İçeriğe geç

Yetkilendirme — kimin neyi yapabileceği ve bunu nasıl kanıtladığınız

Control Center iki yetkilendirme sorusunu yanıtlar ve bu ikisi gerçekten farklıdır. “Bu kişi bu işlemi çağırabilir mi?” sorusu insanlarla, rollerle ve depolarla ilgilidir. “Bu ajan bu etkiye yol açabilir mi?” sorusu ise eylemlerle, argümanlarla ve hasar yarıçapıyla ilgilidir — o soru Korumalar sayfasının konusudur.

Bu sayfa ilk soruyu ele alır; ayrıca ikisinin de geride bıraktığı kaydı.

İnsan tarafındaki her yetkilendirme kararı tek bir işlevden geçerek sonuçlanır:

can(principal, permission, resource) → allow | deny + why

Bir izin, <domain>:<tier> biçimindedir — tickets:write, members:administer, repos:read. Katalog türetilir, elle yazılmaz: işlem yüzeyinin kendisinden hesaplanır (işlemin ad öneki alanı, hâlihazırda uyguladığı rol tabanı ise kademeyi verir); böylece yaklaşık 550 işlemin tamamı, kimse tek bir tane bile yazmadan bir izin taşır.

Korunmaya değer olan şey bu türetmedir. Yeni bir işlemin varsayılan olarak izin denetiminden geçtiği anlamına gelir — elle etiketlenmiş bir modelin başarısızlık biçimi, birinin unutmasıdır ve unuttuğu şey de kapının kendisidir. Ortaya çıkan alan kümesi bir mandal testiyle sabitlenir; böylece yeni bir önek altında işlem eklemek, kazara değil, insanın verdiği bir adlandırma kararı olur.

Dört kademe, yerleşik rollere tam olarak karşılık gelir:

Kademe Rol tabanı Örnek
read Misafir tickets:read
write Üye tickets:write
administer Yönetici members:administer
own Sahip workspace:own

Beş yerleşik rol — Sahip, Yönetici, Üye, İzleyici, Misafir — bu katalog üzerinde ön ayarlardır. Sahiplik, çalışma alanı başına tek bir koltuktur ve açıkça Sahipliği devret ile devredilir (ayrılan bir sahip, aksi hâlde kaldırılamaz: SCIM ile sağlamadan çıkarma herhangi bir çalışma alanı sahibini reddeder — önce devredin).

Özel roller çıkarımsaldır. Bir özel rol, bir temel ön ayar (admin, member, viewer veya guest — asla owner değil) ile ondan ÇIKARILAN izinler kümesini adlandırır — “yönetici, ancak üyeleri yönetemez”. Temelinden daha fazlasını asla veremez; onları mevcut bir kuruluma sokmayı güvenli kılan şey de budur: mevcut her denetim sağlam bir üst sınır olarak kalır. Üyeler bunları custom:<id> olarak taşır ve bu değeri anlayamayacak kadar eski bir istemci, tahmin yürütmek yerine misafire geri düşer.

Rollerin altında depo başına izinler (none / read / review / write) yer alır: çalışma alanı üyeliği, kod barındırıcısının verdiğinden fazla ayrıcalığı asla sessizce sağlamaz. Kodu açığa çıkaran her yüzey bunları denetler — koda dolaylı yollardan erişenler de dahil: bir alanın çalışma ağacı üzerinde açılan terminal ya da düzenleyici oturumu gibi.

Bazı işlemler hiçbir şekilde bir çalışma alanıyla ilgili değildir: kurulum geneli ayarlar, SSO yapılandırması, sağlayıcı kimlik bilgileri, model yönetimi, kurulumun tamamının yedekleri. Bunlar sunucu yetkisi bildirir ve kurulumun operatörü (kayıtlı sunucu sahibi) dışındaki herkes için reddedilir. Kasıtlı olarak tek bir operatör kimliği ve onun tek bir tanımı vardır.

Her yetkilendirme kararı — izin ve ret — çalışma alanı başına, hash zinciriyle bağlı bir denetim kaydına eklenir.

Yalnızca retleri tutan bir kayıt, “neyi engelledik?” sorusunu yanıtlar ama “bu ajan gerçekte ne yaptı ve bunu kim yetkilendirdi?” sorusunu yanıtlamaz; oysa bir olay incelemesi tam da bu soruyla başlar. Bu yüzden her kayıt, tam atıf zincirini tutar: işlemi yapan kimlik, adına hareket ettiği kişi, hangi yetki devriyle geldiği, eylem ve argümanları (özet olarak), karar ve kararı veren kural.

Kayıtlar zincirlenmiştir: her birinin hash’i kendinden öncekininkini kapsar; dolayısıyla herhangi bir satırı düzenlemek, silmek veya yeniden sıralamak, ondan sonraki her hash’i bozar. Zinciri doğrula her şeyi baştan türetir ve tutmayan ilk halkayı adlandırır. Denetleyemediğiniz bir denetim kaydı yalnızca bir kayıttır; yeniden türetebildiğiniz kayıt ise kanıttır.

Bilinmeye değer iki sonuç:

  • Denetim tablosu yaşa dayalı budamadan muaftır. Bir hash zinciri ortasından kırpılamaz. Saklama, önce dışa aktar sonra kırp biçimindedir ve kırpma, kaldırılan bölümün uç hash’ini taşıyan bir kontrol noktası bırakır; böylece geriye kalanlar yine de başa kadar doğrulanır.
  • Etkinlik zaman çizelgesinin yanında durur, üstünde değil. Zaman çizelgesi insanların ne yaptığıdır; buradaki ise neyin yetkilendirildiği ve reddedildiğidir. Paylaşılan bir korelasyon kimliği, tek bir çağrıyı her ikisinde birlikte okumanızı sağlar.

Yeni satırla ayrılmış JSON olarak dışa aktarılır ve bir SIEM’e (Splunk, Elastic, Sentinel — bearer token’lı bir HTTP uç noktası) akıtılabilir. Akış kasıtlı olarak en iyi gayret esaslıdır: bir SIEM’in çökmesi bir ajanın araç çağrısını asla engellememelidir; kalıcı ve doğrulanabilir kopya her durumda diskte durur.

Bir kurulum, bir azami oturum yaşı ve bir boşta kalma zaman aşımı belirleyebilir. Her ikisi de, kimliği doğrulanmış her yolun geçtiği cihaz kimlik bilgisi denetiminde uygulanır — bir istemcinin görmezden gelebileceği bir oturum sınırı, bir saldırgana değil, bir ankete yanıt verir. Bir kurulum ayrıca SSO zorunlu kılabilir; bu, yeni cihazlar için elle eşleştirmeyi devre dışı bırakır (bir kilitlenme korumasıyla: çalışan bir SSO bağlantısı yokken reddeder).

  • Nesne başına ACL’ler değildir. Bilet başına veya mesaj başına izin kasıtlı olarak yoktur. Ekiplerin gerçekte istediği şey depo düzeyinde ayrımdır ve bu mevcuttur; nesne başına paylaşım, burada talebi gösterilmemiş, kombinasyonel bir yüzeydir.
  • Bir DSL’de yapılandırdığınız bir politika motoru değildir. Sözcük dağarcığı kasıtlı olarak kapalıdır; böylece politikanın tamamı işlenebilir, açıklanabilir ve sayılabilir.
  • Sunucudan başka hiçbir yerde uygulanmaz. İstemci tarafı denetimler yalnızca reddedilecek bir kontrolün sunulmasını önlemek için vardır. Yetkili karar her zaman sunucunundur.