Ana içeriğe geç

Yan yana

RBACvsABAC

RBAC ile ABAC arasındaki fark nedir?

Güncellendi 2 dk okuma8 fark

Kısaca

RBAC izinleri admin ya da editor gibi roller üzerinden verir; ABAC ise her isteğe kullanıcının, kaynağın, eylemin ve bağlamın niteliklerine bakarak karar verir.

RBAC

Rol Tabanlı Erişim Kontrolü (Role-Based Access Control)

RBAC, izinleri admin veya editor gibi rollere veren ve kullanıcılara bu rolleri atayarak erişim sağlayan bir yetkilendirme modelidir.

RBAC sayfasını oku

ABAC

Nitelik Tabanlı Erişim Kontrolü (Attribute-Based Access Control)

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 sayfasını oku

RBAC ve ABAC karşılaştırması

ÖzellikRBACABAC
Neye göre karar verirKullanıcının sahip olduğu rollereKullanıcının, kaynağın, eylemin ve ortamın niteliklerine
Kuralların yeriRollerden izinlere eşlemelerKodda ya da bir politika motorunda değerlendirilen politikalar
Ayrıntı düzeyiKaba: bir roldeki herkese aynı erişimİnce: sahiplik, departman ya da saat gibi koşullar
BağlamRoller kapsamlandırılmadıkça (örneğin proje bazında) dikkate alınmazSaat, konum, cihaz ve isteğe ait başka veriler hesaba katılabilir
DenetimKolay: her rolün izinlerini listelemek yeterDaha zor: yanıt istek anındaki verilere bağlıdır
Kurulum zahmetiDüşük: rolleri tanımlayıp atamakDaha yüksek: nitelik kaynakları, politikalar ve çoğu zaman bir motor
Tipik sorunÖzel durumlar yeni roller ekledikçe rol patlamasıİncelemesi ve test etmesi zor, karmaşık politikalar
En uygun olduğu yerNet görev tanımları ve geniş izinlerSahiplik, çok kiracılı veriler ve bağlama bağlı kurallar

Fark, açıklamalı

RBAC, yani rol tabanlı erişim kontrolü, izinleri viewer, editor ve admin gibi rollere bağlar ve kullanıcılara bu rolleri atayarak erişim verir. ABAC, yani nitelik tabanlı erişim kontrolü, her isteğe politikaları öznenin, kaynağın, eylemin ve ortamın niteliklerine, örneğin kullanıcının departmanına, belgenin sahibine ya da günün saatine karşı denetleyerek karar verir. İkisi de yetkilendirme modelidir: kimliği doğrulanmış bir kullanıcının neler yapabileceğine karar verir.

Fark, her birinin sorduğu sorudadır. RBAC yalnızca kullanıcının hangi rollere sahip olduğunu sorar; bu yüzden erişim önceden bellidir: bir rolün izinlerini listelemek kimin neyi yapabildiğini gösterir ve bu da RBAC'ı anlamayı ve denetlemeyi kolaylaştırır. ABAC ise yanıtı istek anında canlı verilerden hesaplar; böylece "kullanıcılar yalnızca kendi taslaklarını düzenleyebilir" ya da "doktorlar kendi departmanlarındaki hastaların kayıtlarını okuyabilir" gibi, salt rollerin ifade edemeyeceği kuralları ifade edebilir.

Her birinin bedeli ölçek büyüdükçe ortaya çıkar. Salt RBAC, özel durumlar için açılan dar roller birikip kimin neye erişebildiğini kimse söyleyemez hâle gelene dek süren rol patlamasına (role explosion) eğilimlidir; ABAC bunu önler, ama sonuç verilere bağlı olduğu için kurallarını incelemek daha zordur. Bu yüzden birçok sistem ikisini birleştirir: geniş erişim için rolleri, sahiplik, kiracı (tenant) ya da ülke gibi ince taneli koşullar için nitelikleri kullanır; bunlar çoğu zaman Open Policy Agent ya da Cedar gibi bir politika motorunda değerlendirilir.

Sık yapılan bir yanlış, ABAC'ın RBAC'ın yerini aldığını düşünmektir. Rol, pek çok nitelikten yalnızca biridir; bu yüzden RBAC, ABAC'ın özel bir hâli olarak görülebilir ve çoğu ABAC kurulumu yine rolleri kullanır. Bir diğeri, seçimin kalıcı olduğu düşüncesidir: pek çok uygulama rollerle başlar ve nitelik kurallarını yalnızca rollerin yetmediği yerlere ekler.

Hangisini kullanmalısınız?

RBAC şu durumlarda doğru seçim:

  • Erişim; viewer, editor ve admin gibi net görev tanımlarını izliyor.
  • Denetçilerin kimin neyi yapabildiğini hızla görmesi gerekiyor.
  • Kurması ve anlatması kolay, basit bir model istiyorsunuz.
  • İzinler, bir kaydın sahibinin kim olduğuna ya da kayda ne zaman erişildiğine nadiren bağlı.

ABAC şu durumlarda doğru seçim:

  • Kurallar sahiplik, departman ya da kiracı gibi verilere bağlı.
  • Bağlam önemli: saat, konum, cihaz ya da risk düzeyi.
  • Özel durumları karşılamak için roller durmadan çoğalıyor.
  • Politikaların Open Policy Agent ya da Cedar gibi bir motorda merkezi olarak yönetilmesini istiyorsunuz.

Bir rol denetimi ile nitelik tabanlı bir politika denetimi

RBACtypescript
// RBAC: the decision depends only on the user's roles
const rolePermissions: Record<string, string[]> = {
  viewer: ["doc:read"],
  editor: ["doc:read", "doc:edit"],
};

function canRbac(user: { roles: string[] }, action: string): boolean {
  return user.roles.some((role) => rolePermissions[role]?.includes(`doc:${action}`));
}

canRbac({ roles: ["editor"] }, "edit"); // true, for every document
ABACtypescript
// ABAC: the decision combines attributes of the user, the document and the time
type User = { id: string; department: string };
type Doc = { ownerId: string; department: string; status: "draft" | "published" };

function canAbac(user: User, doc: Doc, action: "read" | "edit", now = new Date()): boolean {
  if (action === "read") return user.department === doc.department;
  const workingHours = now.getHours() >= 8 && now.getHours() < 18;
  return doc.ownerId === user.id && doc.status === "draft" && workingHours;
}

const draft: Doc = { ownerId: "u1", department: "sales", status: "draft" };
canAbac({ id: "u1", department: "sales" }, draft, "edit"); // true only for the owner, in working hours

Sık sorulan sorular

ABAC, RBAC'tan daha mı iyi?

Genel olarak hayır. ABAC daha esnektir ve rollerin ifade edemeyeceği kuralları ifade eder, ama kurması ve denetlemesi daha zordur. Pek çok uygulamaya RBAC yeter; daha büyük sistemlerin çoğu da geniş erişim için rolleri, ince taneli kurallar için nitelikleri kullanır.

RBAC ile ABAC birlikte kullanılabilir mi?

Evet, bu yaygındır. Kullanıcının rolü bir ABAC politikasında niteliklerden biri olur, örneğin "editörler kendi departmanlarındaki belgeleri düzenleyebilir"; böylece roller basit kalır, istisnaları nitelikler karşılar.

RBAC ve ABAC kimlik doğrulama mı, yetkilendirme mi?

İkisi de yetkilendirmedir. Önce kimlik doğrulama kullanıcının kim olduğunu doğrular; ardından RBAC ya da ABAC o kullanıcının neler yapabileceğine karar verir.

Daha fazla

Ayarlar