Kebenaran — siapa boleh buat apa, dan bagaimana anda membuktikannya
Control Center menjawab dua soalan kebenaran, dan kedua-duanya memang berbeza. “Bolehkah orang ini memanggil operasi ini?” adalah tentang manusia, peranan dan repositori. “Bolehkah ejen ini menyebabkan kesan ini?” adalah tentang tindakan, argumen dan julat kesan — yang itu Guardrail.
Halaman ini membincangkan soalan pertama, serta rekod yang ditinggalkan oleh kedua-duanya.
Satu titik keputusan
Bahagian bertajuk “Satu titik keputusan”Setiap keputusan kebenaran di sisi manusia diselesaikan melalui satu fungsi:
can(principal, permission, resource) → allow | deny + whySatu keizinan ialah <domain>:<tier> — tickets:write,
members:administer, repos:read. Katalog ini terbitan, bukan ditulis
tangan: ia dikira daripada permukaan operasi itu sendiri (awalan nama op
memberikan domain, paras peranan yang sudah dikuatkuasakannya memberikan
peringkat), jadi kesemua ~550 operasi membawa satu keizinan tanpa sesiapa
menaipnya.
Terbitan itulah sifat yang berharga untuk dilindungi. Ia bermakna operasi BAHARU berpagar secara lalai — mod kegagalan model beranotasi tangan ialah seseorang terlupa, dan perkara yang dilupakan itu ialah pagar. Ujian pengunci menyematkan set domain yang terhasil, jadi menambah operasi di bawah awalan baharu menjadi keputusan penamaan yang dibuat oleh manusia, bukan kemalangan.
Empat peringkat itu sepadan tepat dengan peranan terbina dalam:
| Peringkat | Paras peranan | Contoh |
|---|---|---|
read |
Tetamu | tickets:read |
write |
Ahli | tickets:write |
administer |
Pentadbir | members:administer |
own |
Pemilik | workspace:own |
Peranan
Bahagian bertajuk “Peranan”Lima peranan terbina dalam — Pemilik, Pentadbir, Ahli, Pemapar, Tetamu — ialah praset bagi katalog tersebut. Pemilikan ialah satu tempat sahaja bagi setiap ruang kerja, diserahkan secara eksplisit melalui Pindahkan pemilikan (pemilik yang pergi tidak boleh dibuang selain itu: nyahperuntukan SCIM menolak mana-mana pemilik ruang kerja — pindahkan dahulu).
Peranan tersuai hanya mengurangkan. Satu peranan tersuai menamakan praset
asas (admin, member, viewer atau guest — tidak pernah owner) dan satu
set keizinan yang DIBUANG daripadanya — “admin, tetapi tidak boleh mengurus
ahli”. Ia tidak boleh memberikan lebih daripada asasnya, dan itulah yang
menjadikannya selamat diperkenalkan ke dalam pemasangan sedia ada: setiap
semakan sedia ada kekal sebagai sempadan atas yang sah. Ahli memegangnya
sebagai custom:<id>, dan klien yang versinya terlalu lama untuk memahami
nilai itu kembali kepada Tetamu dan tidak meneka.
Di bawah peranan terletak pemberian setiap repositori (none / read /
review / write): keahlian ruang kerja tidak pernah secara senyap memberi
keistimewaan melebihi hos kod. Setiap permukaan yang mendedahkan kod
menyemaknya — termasuk yang mencapai kod secara menyamping, seperti terminal
atau sesi editor yang dibuka pada worktree sesuatu ruang.
Autoriti pelayan
Bahagian bertajuk “Autoriti pelayan”Sesetengah operasi langsung bukan tentang ruang kerja: tetapan seluruh pemasangan, konfigurasi SSO, kelayakan penyedia, pengurusan model, sandaran seluruh pemasangan. Operasi itu mengisytiharkan autoriti pelayan dan ditolak untuk semua orang kecuali operator pemasangan tersebut (pemilik pelayan yang direkodkan). Sengaja hanya wujud satu identiti operator dan satu takrifan bagi identiti itu.
Jejak audit
Bahagian bertajuk “Jejak audit”Setiap keputusan kebenaran — dibenarkan dan ditolak — ditambahkan pada jejak audit berantai hash bagi setiap ruang kerja.
Log yang merekodkan penolakan sahaja menjawab “apa yang kami sekat?” tetapi bukan “apa yang ejen ini sebenarnya lakukan, dan siapa yang memberikannya kebenaran?”, iaitu soalan yang menjadi titik mula semakan insiden. Jadi setiap entri merekodkan rantaian atribusi penuh: prinsipal yang bertindak, manusia yang diwakilinya, perwakilan yang melaluinya ia sampai, tindakan dan argumennya (sebagai ringkasan), keputusan itu, dan peraturan yang membuat keputusan.
Entri dirantai: hash setiap entri merangkumi hash entri sebelumnya, jadi mengedit, memadam atau menyusun semula mana-mana baris memecahkan setiap hash selepasnya. Sahkan rantai menerbitkan semula keseluruhan rantaian itu dan menamakan pautan pertama yang tidak bertahan. Log audit yang tidak boleh anda semak hanyalah log; yang boleh anda terbitkan semula ialah bukti.
Dua akibat yang wajar diketahui:
- Jadual audit dikecualikan daripada pemangkasan berdasarkan usia. Rantaian hash tidak boleh dipangkas dari tengahnya. Pengekalan dilakukan dengan eksport dahulu, kemudian potong; pemotongan itu meninggalkan titik pemeriksaan yang membawa hash terminal segmen yang dibuang, jadi apa yang terselamat masih boleh disahkan kembali ke permulaan.
- Ia terletak di sisi garis masa aktiviti, bukan di atasnya. Garis masa ialah apa yang orang lakukan; ini ialah apa yang diberikan kebenaran dan ditolak. Id korelasi yang dikongsi membaca satu panggilan merentas kedua-duanya.
Ia dieksport sebagai JSON yang dipisahkan baris baharu dan boleh distrim ke SIEM (Splunk, Elastic, Sentinel — titik akhir HTTP dengan token pembawa). Penstriman bersifat usaha terbaik mengikut reka bentuk: SIEM yang tidak berfungsi tidak boleh sesekali menyekat panggilan alat ejen, dan salinan tahan lama yang boleh disahkan tetap ada pada cakera dalam apa jua keadaan.
Sesuatu pemasangan boleh menetapkan usia sesi maksimum dan tamat masa melahu. Kedua-duanya dikuatkuasakan pada pemeriksaan kelayakan peranti yang dilalui oleh setiap lorong yang disahkan — sesi yang terikat pada klien dan boleh diabaikan hanya menjawab soal selidik, bukan penyerang. Sesuatu pemasangan juga boleh mewajibkan SSO, yang melumpuhkan penggandingan manual untuk peranti baharu (dengan pelindung penguncian: ia menolak selagi tiada sambungan SSO yang berfungsi).
Apa yang bukan
Bahagian bertajuk “Apa yang bukan”- Bukan ACL setiap objek. Tiada keizinan setiap tiket atau setiap mesej, secara sengaja. Pengasingan pada peringkat repositori ialah apa yang pasukan sebenarnya minta, dan ia sudah wujud; perkongsian setiap objek ialah permukaan gabungan tanpa permintaan yang terbukti di sini.
- Bukan enjin polisi yang anda konfigur dalam DSL. Perbendaharaan katanya ditutup secara sengaja, jadi keseluruhan polisi boleh dipaparkan, dijelaskan dan disenaraikan.
- Tidak dikuatkuasakan di mana-mana selain pelayan. Semakan di sisi klien wujud hanya untuk mengelakkan daripada menawarkan kawalan yang akan ditolak. Keputusan muktamad sentiasa milik pelayan.