ABAC
Nitelik Tabanlı Erişim Kontrolü (Attribute-Based Access Control)
- Türkçe karşılığı
- nitelik tabanlı erişim kontrolü, öznitelik tabanlı erişim kontrolü
- Okunuşu
- ey-bek ya da ey-bi-ey-si
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
ABAC, her isteği kullanıcının, kaynağın, eylemin ve bağlamın niteliklerini politikalarla karşılaştırarak onaylayan ya da reddeden bir yetkilendirme modelidir.
ABAC nedir?
ABAC, yani nitelik tabanlı erişim kontrolü, bir kullanıcının neler yapabileceğine her isteğin geldiği anda nitelik (attribute) denen bilgileri değerlendirerek karar verir. Nitelikler özneyi, örneğin kullanıcının departmanını ya da yetki düzeyini; kaynağı, örneğin bir belgenin sahibini ya da hassasiyetini; eylemi, örneğin okuma ya da silmeyi; ortamı da, örneğin saati, konumu ya da cihazı tanımlar. NIST bu modeli 2014'te 800-162 numaralı özel yayınında (Special Publication) tanımladı.
Kurallar politika olarak yazılır; örneğin "doktorlar, hasta kendi departmanlarındaysa ve kendileri nöbetteyse hastanın kaydını okuyabilir". Bir istek geldiğinde, politika uygulama noktası (policy enforcement point) rolündeki uygulama nitelikleri toplar ve politikaları değerlendirip izin ya da ret yanıtı veren politika karar noktasına (policy decision point) sorar. Politikalar uygulama kodunda ya da Open Policy Agent, Amazon'un Cedar'ı veya daha eski, XML tabanlı XACML standardı gibi ayrı bir motorda yaşayabilir; AWS gibi bulut platformları da IAM politikalarının kullanıcılar ve kaynaklar üzerindeki etiketleri (tag) karşılaştırmasına izin verir.
RBAC, belirli türdeki her kapıyı açan bir yaka kartına benzer; ABAC ise sizi içeri almadan önce kartınızı, odayı, saati ve gerekçenizi denetleyen bir görevliye. ABAC; kullanıcıların yalnızca kendi taslaklarını düzenlemesine izin vermek, çok kiracılı (multi-tenant) yazılımda her müşterinin verisini ayrı tutmak ya da yasal nedenlerle erişimi ülkeye göre sınırlamak gibi veriye bağlı kurallar için uygundur.
ABAC genellikle rol tabanlı erişim kontrolü olan RBAC ile karşılaştırılır. RBAC yalnızca kullanıcının hangi rollere sahip olduğunu sorar; ABAC ise her türlü niteliği birleştirebilir, bu yüzden rol pek çok nitelikten yalnızca biri olur ve RBAC, ABAC'ın özel bir hâli olarak görülebilir. Bunun bedeli görünürlüktür: RBAC'ta bir rolün izinlerini listelemek kimin neyi yapabildiğini gösterir, ABAC'ta ise yanıt istek anındaki verilere bağlıdır ve bu da denetimi zorlaştırır. Birçok sistem ikisini birleştirir: geniş erişim için rolleri, sahiplik gibi ince taneli kurallar için nitelikleri kullanır; bu da salt RBAC'ın yol açabileceği rol patlamasını (role explosion) önler.
Önemli noktalar
- ABAC, erişime kullanıcının, kaynağın, eylemin ve ortamın niteliklerine bakarak karar verir.
- Politikalar "sahipler kendi taslaklarını düzenleyebilir" gibi kuralları ifade eder.
- Open Policy Agent ve Cedar gibi motorlar politikaları uygulama kodunun dışında değerlendirir.
- RBAC'ta çok sayıda rol gerektirecek ince taneli kuralları karşılar.
- RBAC'tan daha esnektir ama denetlemesi daha zordur; birçok sistem ikisini birlikte kullanır.
Örnek
type User = { id: string; department: string; clearance: number };
type Doc = { ownerId: string; department: string; sensitivity: number; status: "draft" | "published" };
// One policy combining attributes of the user, the resource, the action and the context
function isAllowed(user: User, doc: Doc, action: "read" | "edit", now = new Date()): boolean {
const workingHours = now.getHours() >= 8 && now.getHours() < 18;
if (action === "read") return user.department === doc.department && user.clearance >= doc.sensitivity;
if (action === "edit") return doc.ownerId === user.id && doc.status === "draft" && workingHours;
return false;
}
const alice: User = { id: "u1", department: "finance", clearance: 2 };
const report: Doc = { ownerId: "u2", department: "finance", sensitivity: 2, status: "published" };
console.log(isAllowed(alice, report, "read")); // true: same department, enough clearance
console.log(isAllowed(alice, report, "edit")); // false: Alice doesn't own itSık sorulan sorular
ABAC ile RBAC arasındaki fark nedir?
RBAC izinleri admin ya da editor gibi roller üzerinden verir. ABAC ise politikalarda kullanıcının, kaynağın ve bağlamın niteliklerini değerlendirir; böylece yalnızca rollerle ifade edilemeyen sahiplik, departman ya da günün saati gibi koşulları ifade edebilir.
ABAC'a örnek nedir?
Doktorların yalnızca kendi departmanlarındaki hastaların kayıtlarını ve yalnızca nöbetteyken okumasına izin veren bir hastane kuralı ya da kullanıcıların yalnızca sahibi oldukları taslakları düzenlemesine izin veren bir belge uygulaması. Her kural bir rolü adlandırmak yerine nitelikleri birleştirir.
ABAC için hangi araçlar kullanılır?
Rego diliyle Open Policy Agent ve Amazon Verified Permissions'ın kullandığı Cedar gibi politika motorları ile daha eski XACML standardı. Bulut IAM sistemleri de etiketlere dayanan AWS politikaları gibi nitelik koşullarını destekler.
İlgili sayfalar
- RBACGüvenlik, s. 35RBAC, izinleri admin veya editor gibi rollere veren ve kullanıcılara bu rolleri atayarak erişim sağlayan bir yetkilendirme modelidir.
- YetkilendirmeGüvenlik, s. 55Yetkilendirme, kimliği doğrulanmış bir kullanıcının ya da servisin hangi verileri okuyabileceğine, değiştirebileceğine veya silebileceğine karar vermektir.
- En Az Ayrıcalık İlkesiGüvenlik, s. 12En az ayrıcalık ilkesi, her kullanıcıya, programa ve servise yalnızca işini yapması için gereken asgari erişimin verilmesini öngören güvenlik kuralıdır.
- Zero TrustGüvenlik, s. 56Zero trust, varsayılan olarak hiçbir kullanıcı, cihaz veya ağa güvenmeyip her isteği kimliğe, cihaz sağlığına ve bağlama göre doğrulayan güvenlik modelidir.
- Kimlik DoğrulamaGüvenlik, s. 24Kimlik doğrulama, bir kullanıcının, cihazın veya servisin gerçekten iddia ettiği kişi olduğunu, örneğin parola ya da passkey kontrol ederek doğrulama işlemidir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin