Otorisasi — siapa yang boleh melakukan apa, dan bagaimana Anda membuktikannya
Control Center menjawab dua pertanyaan otorisasi, dan keduanya sungguh berbeda. “Bolehkah orang ini memanggil operasi ini?” menyangkut manusia, peran, dan repositori. “Bolehkah agen ini menimbulkan efek ini?” menyangkut tindakan, argumen, dan radius dampak — pertanyaan itu dibahas di Pagar pengaman.
Halaman ini membahas pertanyaan pertama, plus catatan yang ditinggalkan keduanya.
Satu titik keputusan
Bagian berjudul “Satu titik keputusan”Setiap keputusan otorisasi di sisi manusia diselesaikan melalui satu fungsi:
can(principal, permission, resource) → allow | deny + whySebuah izin berbentuk <domain>:<tier> — tickets:write,
members:administer, repos:read. Katalognya diturunkan, bukan ditulis
tangan: katalog dihitung dari permukaan operasi itu sendiri (prefiks nama
operasi menentukan domain, sedangkan batas peran minimum yang sudah
ditegakkannya menentukan tingkatnya), sehingga semua ~550 operasi membawa
izin tanpa perlu ada yang mengetikkannya.
Penurunan itulah properti yang layak dilindungi. Artinya, operasi BARU sudah dibatasi secara default — mode kegagalan dari model yang dianotasi tangan adalah ada orang yang lupa, dan yang dilupakan adalah gerbangnya. Uji ratchet mematok himpunan domain yang dihasilkan, sehingga menambahkan operasi di bawah prefiks baru menjadi keputusan penamaan yang dibuat manusia, bukan kecelakaan.
Keempat tingkat tersebut memetakan persis ke peran bawaan:
| Tingkat | Peran minimum | Contoh |
|---|---|---|
read |
Tamu | tickets:read |
write |
Anggota | tickets:write |
administer |
Admin | members:administer |
own |
Pemilik | workspace:own |
Lima peran bawaan — Pemilik, Admin, Anggota, Penampil, Tamu — adalah preset di atas katalog tersebut. Kepemilikan adalah satu kursi per ruang kerja, yang dialihkan secara eksplisit dengan Alihkan kepemilikan (pemilik yang pergi tidak dapat dihapus dengan cara lain: deprovisioning SCIM menolak setiap pemilik ruang kerja — alihkan dulu).
Peran kustom bersifat mengurangi. Peran kustom menyebut satu preset dasar
(admin, member, viewer, atau guest — tidak pernah owner) dan
sekumpulan izin yang DIHAPUS darinya — “Admin, tetapi tidak dapat mengelola
anggota”. Peran ini tidak pernah dapat memberikan lebih dari dasarnya, dan
itulah yang membuatnya aman diperkenalkan ke instalasi yang sudah ada: setiap
pemeriksaan yang ada tetap menjadi batas atas yang sah. Anggota memegangnya
sebagai custom:<id>, dan klien yang terlalu lama untuk memahami nilai
tersebut kembali ke Tamu daripada menebak.
Di bawah peran terdapat pemberian izin per repo (none / read /
review / write): keanggotaan ruang kerja tidak pernah diam-diam
melampaui hak istimewa host kode. Setiap permukaan yang mengekspos kode
memeriksanya — termasuk yang menjangkau kode dari samping, seperti terminal
atau sesi editor yang dibuka pada worktree sebuah space.
Kewenangan server
Bagian berjudul “Kewenangan server”Sebagian operasi sama sekali bukan tentang ruang kerja: pengaturan seluruh instalasi, konfigurasi SSO, kredensial penyedia, pengelolaan model, cadangan seluruh instalasi. Operasi tersebut mendeklarasikan kewenangan server dan ditolak untuk semua orang kecuali operator instalasi (pemilik server yang tercatat). Identitas operator sengaja hanya satu, dengan satu definisi untuk itu.
Jejak audit
Bagian berjudul “Jejak audit”Setiap keputusan otorisasi — mengizinkan dan menolak — ditambahkan ke jejak audit per ruang kerja yang dirantai hash.
Log yang hanya mencatat penolakan menjawab “apa yang kami blokir?” tetapi bukan “apa yang sebenarnya dilakukan agen ini, dan siapa yang mengotorisasinya?” — pertanyaan yang menjadi titik awal tinjauan insiden. Karena itu, setiap entri mencatat rantai atribusi lengkap: prinsipal yang bertindak, manusia yang diwakilinya, delegasi yang dilaluinya, tindakan beserta argumennya (sebagai digest), keputusannya, dan aturan yang memutuskan.
Entri-entri dirantai: hash setiap entri mencakup hash entri sebelumnya, sehingga mengedit, menghapus, atau mengubah urutan baris mana pun memutus setiap hash setelahnya. Verifikasi rantai menurunkan ulang keseluruhannya dan menyebutkan mata rantai pertama yang tidak valid. Log audit yang tidak dapat Anda periksa hanyalah log; log yang dapat Anda turunkan ulang adalah bukti.
Dua konsekuensi yang perlu diketahui:
- Tabel audit dikecualikan dari pemangkasan berbasis usia. Rantai hash tidak dapat dipangkas dari tengah. Retensi dilakukan dengan ekspor lalu pemotongan, dan pemotongan itu meninggalkan checkpoint yang membawa hash terminal segmen yang dihapus, sehingga apa yang tersisa tetap terverifikasi sampai ke awal.
- Jejak ini berada di samping timeline aktivitas, bukan di atasnya. Timeline mencatat apa yang dilakukan orang; jejak ini mencatat apa yang diotorisasi dan ditolak. Dengan id korelasi bersama, satu panggilan dapat dibaca di kedua tempat.
Jejak ini diekspor sebagai JSON yang dibatasi baris baru dan dapat dialirkan ke SIEM (Splunk, Elastic, Sentinel — endpoint HTTP dengan bearer token). Streaming bersifat best-effort secara desain: SIEM yang mati tidak boleh menghalangi panggilan alat agen, dan salinan yang tahan lama serta dapat diverifikasi tetap ada di disk.
Sebuah instalasi dapat menetapkan usia sesi maksimum dan batas waktu tidak aktif. Keduanya ditegakkan pada pemeriksaan kredensial perangkat tempat setiap jalur terautentikasi bermuara — batas sesi yang bisa diabaikan klien hanya menjawab kuesioner, bukan menangkal penyerang. Instalasi juga dapat mewajibkan SSO, yang menonaktifkan pairing manual untuk perangkat baru (dengan pengaman penguncian: permintaan ditolak selama tidak ada koneksi SSO yang berfungsi).
Apa yang tidak termasuk di sini
Bagian berjudul “Apa yang tidak termasuk di sini”- Bukan ACL per objek. Tidak ada izin per tiket atau per pesan, dan itu disengaja. Pemisahan tingkat repositori adalah yang benar-benar diminta tim, dan itu sudah ada; berbagi per objek adalah permukaan kombinatorial tanpa permintaan yang terbukti di sini.
- Bukan mesin kebijakan yang Anda konfigurasikan lewat DSL. Kosakatanya ditutup dengan sengaja, sehingga seluruh kebijakan dapat ditampilkan, dijelaskan, dan dienumerasi.
- Tidak ditegakkan di mana pun selain server. Pemeriksaan di sisi klien hanya ada agar tidak menawarkan kontrol yang akan ditolak. Keputusan yang berwenang selalu milik server.