Belajar Tailscale - Access Control: ACL & Tags
Episode 6 of 23

Belajar Tailscale - Access Control: ACL & Tags

Episode ini membahas Access Control Lists: mengontrol siapa yang bisa mengakses resource apa melalui file ACL di admin console, aturan allow dan deny, contoh policy dasar, serta penggunaan tags dan groups untuk kebijakan yang terkelola.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Sampai episode 5, semua node di tailnet saling bisa diakses. Itu nyaman untuk eksperimen, tapi berbahaya untuk production. Bayangkan NAS rumah kalian tiba-tiba bisa diakses laptop rekan kerja hanya karena satu tailnet. Inilah masalah yang diselesaikan ACL (Access Control Lists).

Episode 6 membahas sistem keamanan inti Tailscale: file ACL di admin console, konsep aturan allow, prinsip default deny, serta tags dan groups untuk membuat kebijakan yang terkelola. Setelah episode ini, kalian bisa merancang tailnet yang aman sejak awal.

Konsep ACL

Apa Itu File ACL

ACL di Tailscale adalah file HuJSON (JSON dengan komentar) yang diatur di admin console pada menu Access Controls. File ini menentukan siapa yang boleh mengakses apa — paket, port, dan fitur. Aturan paling dasar berbentuk srcdst:

ACL dasar default allow semua
{
  "acls": [
    { "action": "accept",
      "src": ["*"],
      "dst": ["*:*"] }
  ]
}

Aturan di atas mengizinkan semua user mengakses semua node di semua port. Ini default saat tailnet baru dibuat.

Prinsip Default Deny

Tailscale tidak mengizinkan apa pun kecuali ACL menyatakannya secara eksplisit. Jadi file ACL adalah daftar pengecualian dari default deny. Setiap aturan punya tiga bagian:

  • action: accept untuk mengizinkan.
  • src: siapa yang diizinkan (user, group, atau tag).
  • dst: apa yang boleh diakses (node:port atau network range).
ACL terbatas
{
  "acls": [
    { "action": "accept",
      "src": ["user1@example.com"],
      "dst": ["server-prod:22"] }
  ]
}

Aturan src: user1@example.com, dst: server-prod:22 mengizinkan hanya user tersebut mengakses port 22 node server-prod.

Tags dan Groups

Mengapa Perlu Tags

Untuk perangkat otomatis (server, CI, container), login berbasis user tidak cocok — perangkat tidak punya akun manusia. Tags memindahkan otorisasi dari user ke kategori perangkat. Tag selalu berawalan tag: dan diatur admin di file ACL.

Up dengan tag
sudo tailscale up --advertise-tags=tag:server

Perintah sudo tailscale up --advertise-tags=tag:server mengajukan tag tag:server ke admin. Persetujuan tag dikendalikan oleh blok tagOwners di ACL.

Mendefinisikan tagOwners

Hanya admin yang berhak memberikan tag. Aturan tagOwners menentukan siapa yang boleh meng-assign tag tertentu:

tagOwners di ACL
{
  "tagOwners": {
    "tag:server": ["group:devops"],
    "tag:workstation": ["user1@example.com"]
  },
  "acls": [
    { "action": "accept",
      "src": ["tag:server"],
      "dst": ["tag:workstation:22"] }
  ]
}

Di blok di atas, tag:server hanya bisa di-assign anggota group:devops, dan semua node bertag server boleh mengakses port 22 node bertag workstation.

Groups: Pengelompokan User

Selain tag, ACL bisa memakai group — sekumpulan user dari identity provider (Google Workspace, Entra ID, GitHub). Contoh: group:engineering memakai definisi dari provider, bukan daftar manual. Ini membuat kebijakan konsisten dengan organisasi kalian.

Membangun Policy yang Terkelola

Pola ACL yang Umum

Contoh policy lengkap
{
  "acls": [
    { "action": "accept",
      "src": ["group:devops"],
      "dst": ["tag:server:*"] },
    { "action": "accept",
      "src": ["user1@example.com"],
      "dst": ["nas-rumah:22,80,443"] }
  ],
  "ssh": [
    { "action": "accept",
      "src": ["group:devops"],
      "dst": ["tag:server"],
      "users": ["autogroup:nonroot", "root"] }
  ]
}

Perhatikan detailnya:

  • Rule src: ["group:devops"], dst: ["tag:server:*"] memberi seluruh anggota devops akses penuh ke semua node server.
  • Rule kedua membatasi akses NAS hanya ke port 22, 80, dan 443.
  • Blok ssh mengatur kebijakan Tailscale SSH secara terpisah — kita bahas di episode 7.

Menguji Perubahan ACL

Setiap perubahan ACL langsung aktif. Selalu simpan dan uji dari dua sisi: jalankan tailscale ping dari node src ke node dst, dan pastikan node yang tidak diizinkan justru ditolak. Cek efeknya cepat dengan:

Cek akses ke node lain
tailscale ping nas-rumah
tailscale status

Praktik Terbaik

  • Mulai dari default deny dan buka hanya yang dibutuhkan (least privilege).
  • Gunakan tags untuk perangkat otomatis, group untuk manusia.
  • Batasi port, bukan *:*, untuk service yang sensitif.
  • Review file ACL secara berkala dan versikan di repository (episode 17).

Penutup

Episode 6 memperkenalkan lapisan keamanan pertama dan terpenting Tailscale: ACL. Kalian bisa mengatur siapa yang mengakses apa, memakai tags untuk perangkat otomatis, group untuk manusia, dan menyusun policy yang terkelola.

Inti yang harus dibawa pulang:

  • ACL adalah file HuJSON yang mengatur akses di tailnet.
  • Default deny: tidak ada yang boleh mengakses tanpa aturan eksplisit.
  • Setiap aturan terdiri dari action, src, dan dst.
  • Tags (tag:server) untuk perangkat otomatis, diatur lewat tagOwners.
  • Groups memetakan user dari identity provider.
  • Batasi port service sensitif dan selalu uji setelah mengubah ACL.

Di episode 7 selanjutnya kita akan membahas Tailscale SSH — mengaktifkan SSH berbasis identitas tailnet dengan tailscale up --ssh dan tailscale ssh <host>, menghilangkan manajemen password dan SSH key, serta mengatur akses SSH per-user dan per-group melalui blok ssh di ACL.

Belajar Tailscale - Access Control: ACL & Tags | Belajar Tailscale