Ana içeriğe geç

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.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/abac

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

Nitelik tabanlı bir politika denetimitypescript
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 it

Sı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

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar