Azure Data Lake Storage 1. Nesil'de erişim denetimi

Azure Data Lake Storage 1. Nesil, HDFS'den türetilen ve POSIX erişim denetimi modelinden türetilen bir erişim denetimi modeli uygular. Bu makalede, Data Lake Storage 1. Nesil için erişim denetimi modelinin temelleri özetlemektedir.

Dosyalar ve klasörler üzerindeki erişim denetimi listeleri

İki tür erişim denetim listesi (ACL) vardır: Erişim ACL’leri ve Varsayılan ACL’ler.

  • Erişim ACL’leri: Bunlar bir nesneye erişimi denetler. Hem dosyalar hem de klasörler Erişim ACL’lerine sahiptir.

  • Varsayılan ACL’ler: Bir klasör ile ilişkili olan ACL’lerin o klasör altında oluşturulan tüm alt öğelere ilişkin Erişim ACL’lerini belirleyen bir "şablonudur". Dosyalar Varsayılan ACL’ye sahip değildir.

Hem Erişim ACL'leri hem de Varsayılan ACL'ler aynı yapıdadır.

Not

Bir üst öğe üzerindeki Varsayılan ACL’nin değiştirilmesi zaten var olan alt öğelerin Erişim ACL’sini veya Varsayılan ACL’sini etkilemez.

İzinler

Dosya sistemi nesnesi üzerinde Okuma, Yazma ve Yürütme izinleri bulunur ve bunlar aşağıdaki tabloda gösterildiği gibi dosyalar ve klasörler üzerinde kullanılabilir:

File Klasör
Okuma (R) Bir dosyanın içeriğini okuyabilir Klasörün içeriğini listelemek için Okuma ve Yürütme izinlerini gerektirir
Yazma (W) Bir dosyaya yazabilir veya ekleyebilir Bir klasörde alt öğeler oluşturmak için Yazma ve Yürütme gerektirir
Yürütme (X) Data Lake Storage 1. Nesil bağlamında hiçbir şey ifade etmez Bir klasörün alt öğelerini geçirmek için gereklidir

İzinlerin kısaltmaları

RWX, Okuma + Yazma + Yürütme için kullanılır. Okuma=4, Yazma=2 ve Yürütme=1 olup toplamları izinleri temsil eden daha da kısaltılmış bir sayısal biçim mevcuttur. Bazı örnekler aşağıda verilmiştir.

Sayısal biçim Kısa biçim Anlamı
7 RWX Okuma + Yazma + Yürütme
5 R-X Okuma + Yürütme
4 R-- Read
0 --- İzin yok

İzinler devralınmaz

Data Lake Storage 1. Nesil tarafından kullanılan POSIX stili modelde, bir öğenin izinleri öğenin kendisinde depolanır. Diğer bir deyişle, bir öğenin izinleri üst öğelerinden devralınamaz.

Aşağıda, bir Data Lake Storage 1. Nesil hesabında belirli işlemleri gerçekleştirmek için hangi izinlerin gerekli olduğunu anlamanıza yardımcı olacak bazı yaygın senaryolar yer almaktadır.

İşlem Nesne / Seattle/ Portland/ Data.txt
Read Data.txt --X --X --X R--
Sonuna ekle Data.txt --X --X --X -W-
Sil Data.txt --X --X -WX ---
Oluştur Data.txt --X --X -WX ---
Liste / R-X --- --- ---
Liste /Seattle/ --X R-X --- ---
Liste /Seattle/Portland/ --X --X R-X ---

Not

Önceki iki koşul geçerli oldukça dosyayı silmek için dosya üzerinde yazma izinleri gerekli değildir.

Kullanıcılar ve kimlikler

Her dosya ve klasör bu kimlikler için farklı izinlere sahiptir:

  • Sahip olan kullanıcı
  • Sahip olan grup
  • Adlandırılmış kullanıcılar
  • Adlandırılmış gruplar
  • Diğer tüm kullanıcılar

Kullanıcıların ve grupların kimlikleri Microsoft Entra kimliklerdir. Bu nedenle, aksi belirtilmedikçe, Data Lake Storage 1. Nesil bağlamında bir "kullanıcı" Microsoft Entra kullanıcı veya Microsoft Entra bir güvenlik grubu anlamına gelebilir.

Süper kullanıcı

Süper kullanıcı, Data Lake Storage 1. Nesil hesabındaki tüm kullanıcılar için en fazla haklara sahiptir. Süper kullanıcı:

  • Tüm dosya ve klasörlerde RWX İzinlerine sahiptir.
  • Herhangi bir dosya veya klasörün izinlerini değiştirebilir.
  • Herhangi bir dosya veya klasörün sahibi olan kullanıcıyı ya da grubu değiştirebilir.

bir Data Lake Storage 1. Nesil hesabı için Sahipler rolünün parçası olan tüm kullanıcılar otomatik olarak süper kullanıcı olur.

Sahip olan kullanıcı

Öğeyi oluşturan kullanıcı otomatik olarak öğenin sahibi olan kullanıcıdır. Sahip olan kullanıcı şunları yapabilir:

  • Sahip olunan bir dosyanın izinlerini değiştirme.
  • Sahip olan kullanıcı aynı zamanda hedef grubun bir üyesi oldukça, sahip olunan bir dosyanın sahibi olan grubunu değiştirme.

Not

Sahip olan kullanıcı bir dosya veya klasörün sahibi olan kullanıcıyı değiştiremez. Bir dosya veya klasörün sahibi olan kullanıcıyı yalnızca süper kullanıcılar değiştirebilir.

Sahip olan grup

Arka Plan

POSIX ACL'lerinde her kullanıcı bir "birincil grup" ile ilişkilendirilir. Örneğin, "alice" kullanıcısı "finans" grubuna ait olabilir. Gamze ayrıca birden fazla gruba ait olabilir, ancak bir grup her zaman birincil grubu olarak atanır. POSIX'te, Alice bir dosya oluşturduğunda, söz konusu dosyanın sahip olan grubu birincil grubuna ayarlanır ve bu durumda "finans" olur. Sahip olan grup, diğer kullanıcılar/gruplar için atanmış izinlere benzer şekilde davranır.

Data Lake Storage 1. Nesil'da kullanıcılarla ilişkilendirilmiş "birincil grup" olmadığından, sahip olan grup aşağıdaki gibi atanır.

Yeni bir dosya veya klasör için sahip olan grubu atama

  • Olay 1: Kök klasör "/". Bu klasör, bir Data Lake Storage 1. Nesil hesabı oluşturulduğunda oluşturulur. Bu durumda, sahip olan grup sıfırdan oluşan bir GUID'ye ayarlanır. Bu değer herhangi bir erişime izin vermez. Bir grup atanana kadar yer tutucudur.
  • Olay 2 (Diğer her olay): Yeni bir olay oluşturulduğunda sahip olan grup üst klasörden kopyalanır.

Sahip olan grubu değiştirme

Sahip olan grup aşağıdakiler tarafından değiştirilebilir:

  • Herhangi bir süper kullanıcı.
  • Sahip olan kullanıcı aynı zamanda hedef grubun üyesi ise sahip olan kullanıcı.

Not

Sahip olan grup, bir dosya veya klasörün ACL’lerini değiştiremez.

Eylül 2018 tarihinde veya öncesinde oluşturulan hesaplar için sahip olan grup, yukarıdaki Olay 1 için kök klasör söz konusu olduğunda hesabı oluşturan kullanıcıya ayarlanmıştır. Tek bir kullanıcı hesabı, sahip olan grup aracılığıyla izin sağlamak için geçerli değildir, bu nedenle bu varsayılan ayar tarafından hiçbir izin verilmez. Bu izni geçerli bir kullanıcı grubuna atayabilirsiniz.

Erişim denetimi algoritması

Aşağıdaki sahte kod, Data Lake Storage 1. Nesil hesapları için erişim denetimi algoritmasını temsil eder.

def access_check( user, desired_perms, path ) : 
  # access_check returns true if user has the desired permissions on the path, false otherwise
  # user is the identity that wants to perform an operation on path
  # desired_perms is a simple integer with values from 0 to 7 ( R=4, W=2, X=1). User desires these permissions
  # path is the file or folder
  # Note: the "sticky bit" is not illustrated in this algorithm
  
# Handle super users.
  if (is_superuser(user)) :
    return True

  # Handle the owning user. Note that mask IS NOT used.
  entry = get_acl_entry( path, OWNER )
  if (user == entry.identity)
      return ( (desired_perms & entry.permissions) == desired_perms )

  # Handle the named users. Note that mask IS used.
  entries = get_acl_entries( path, NAMED_USER )
  for entry in entries:
      if (user == entry.identity ) :
          mask = get_mask( path )
          return ( (desired_perms & entry.permmissions & mask) == desired_perms)

  # Handle named groups and owning group
  member_count = 0
  perms = 0
  entries = get_acl_entries( path, NAMED_GROUP | OWNING_GROUP )
  for entry in entries:
    if (user_is_member_of_group(user, entry.identity)) :
      member_count += 1
      perms | =  entry.permissions
  if (member_count>0) :
    return ((desired_perms & perms & mask ) == desired_perms)
 
  # Handle other
  perms = get_perms_for_other(path)
  mask = get_mask( path )
  return ( (desired_perms & perms & mask ) == desired_perms)

Maske

Erişim Denetimi Algoritması'nda gösterildiği gibi, maske adlandırılmış kullanıcılar, sahip olan grup ve adlandırılmış gruplar için erişimi sınırlar.

Not

Yeni bir Data Lake Storage 1. Nesil hesabı için kök klasörün ("/") Erişim ACL'si için maske varsayılan olarak RWX'tir.

Yapışkan bit

Yapışkan bit POSIX dosya sisteminin daha gelişmiş bir özelliğidir. Data Lake Storage 1. Nesil bağlamında, yapışkan bitin gerekli olması olası değildir. Özetle, yapışkan bit bir klasörde etkinleştirildiyse, alt öğe yalnızca alt öğenin sahibi tarafından silinebilir veya yeniden adlandırılabilir.

Yapışkan bit Azure portalında gösterilmez.

Yeni dosya ve klasörlerde varsayılan izinler

Var olan bir klasör altında yeni bir dosya ya da klasör oluşturulduğunda üst klasördeki Varsayılan ACL aşağıdakileri belirler:

  • Bir alt klasörün Varsayılan ACL’si ve Erişim ACL’si.
  • Bir alt dosyanın Erişim ACL’si (dosyaları Varsayılan ACL’ye sahip değildir).

umask

Dosya veya klasör oluştururken, alt öğede varsayılan ACL'lerin nasıl ayarlandığını değiştirmek için umask kullanılır. umask, üst klasörlerde kullanıcıya, sahip olan gruba ve diğerkullanıcılara yönelik bir RWX değeri içeren 9 bitlik bir değerdir.

Azure Data Lake Storage. Nesil için umask, 007 olarak ayarlanmış sabit bir değerdir. Bu değer şu şekilde çevrilir:

umask bileşeni Sayısal biçim Kısa biçim Anlamı
umask.owning_user 0 --- Sahibi olan kullanıcı için üst öğedeki Varsayılan ACL'yi çocuğun Erişim ACL'sine kopyalayın
umask.owning_group 0 --- Sahip olan grup için üst öğedeki Varsayılan ACL'yi çocuğun Erişim ACL'sine kopyalayın
umask.other 7 RWX Diğer kullanıcılar için, çocuğun Erişim ACL'sinde tüm izinleri kaldırın

Azure Data Lake Storage 1. Nesil tarafından kullanılan umask değeri, Varsayılan ACL'nin ne gösterdiğine bakılmaksızın diğerinin değerinin yeni alt öğelerde hiçbir zaman varsayılan olarak iletilmeyeceğini gösterir.

Aşağıdaki sahte kod, bir alt öğe için ACL'ler oluşturulurken umask'ın nasıl uygulandığını gösterir.

def set_default_acls_for_new_child(parent, child):
    child.acls = []
    for entry in parent.acls :
        new_entry = None
        if (entry.type == OWNING_USER) :
            new_entry = entry.clone(perms = entry.perms & (~umask.owning_user))
        elif (entry.type == OWNING_GROUP) :
            new_entry = entry.clone(perms = entry.perms & (~umask.owning_group))
        elif (entry.type == OTHER) :
            new_entry = entry.clone(perms = entry.perms & (~umask.other))
        else :
            new_entry = entry.clone(perms = entry.perms )
        child_acls.add( new_entry )

Data Lake Storage 1. Nesil'daki ACL'ler hakkında sık sorulan sorular

ACL desteğini etkinleştirmem gerekiyor mu?

Hayır. Data Lake Storage 1. Nesil hesabı için ACL'ler aracılığıyla erişim denetimi her zaman açık.

Bir klasörü ve içindekileri yinelemeli olarak silmek için hangi izinler gereklidir?

  • Üst klasör Yazma + Yürütme izinlerine sahip olmalıdır.
  • Silinecek klasör ve içindeki her klasör Okuma + Yazma + Yürütme izinlerini gerektirir.

Not

Klasörlerdeki dosyaları silmek için Yazma izni gerekmez. Ayrıca, "/" kök klasör hiçbir zaman silinemez.

Bir dosyanın veya klasörün sahibi kimdir?

Bir dosyayı veya klasörü oluşturan kişi bunların sahibi olur.

Oluşturma sırasında bir dosyanın veya klasörün sahibi olan grubu olarak hangi grup ayarlanır?

Sahip olan grup, yeni dosya veya klasörün oluşturulduğu üst klasörün sahibi olan gruptan kopyalanır.

Bir dosyanın sahibiyim, ancak gereken RWX izinlerine sahip değilim. Ne yapmalıyım?

Sahip olan kullanıcı kendisine gerekli olan her türlü RWX iznini vermek için dosyanın izinlerini değiştirebilir.

Azure portalında ACL’lere baktığımda kullanıcı adlarını görüyorum, ancak API’lere baktığımda GUID’leri görüyorum, bunun nedeni nedir?

ACL'lerdeki girişler, Microsoft Entra ID kullanıcılara karşılık gelen GUID'ler olarak depolanır. API’ler GUID’leri olduğu gibi döndürür. Azure portalı mümkün olduğunda GUID’leri kolay adlara çevirerek ACL’lerin daha kolay kullanılmasını sağlamaya çalışır.

Azure portalını kullanırken neden bazen ACL’lerde GUID’leri görüyorum?

Kullanıcı artık Microsoft Entra mevcut olmadığında guid gösterilir. Bu durum genellikle kullanıcı şirketten ayrıldığında veya hesabı Microsoft Entra ID silindiğinde gerçekleşir. Ayrıca, ACL'leri ayarlamak için doğru kimliği kullandığınızdan emin olun (aşağıda söz konusu ayrıntılar).

Hizmet sorumlusu kullanırken, ACL'leri ayarlamak için hangi kimliği kullanmalıyım?

Azure Portal'da Microsoft Entra ID -> Kurumsal uygulamalar'a gidin ve uygulamanızı seçin. Genel Bakış sekmesinde bir Nesne Kimliği görüntülenmelidir ve veri erişimi için ACL'ler eklenirken (Uygulama Kimliği değil) bu şekilde kullanılmalıdır.

Data Lake Storage 1. Nesil ACL devralmayı destekliyor mu?

Hayır, ancak üst klasör altında yeni oluşturulan alt dosyalara ve klasöre yönelik ACL’yi ayarlamak için Varsayılan ACL’ler kullanılabilir.

Dosya ve klasörlerdeki ACL girişlerinin sınırları nelerdir?

Dosya başına ve dizin başına 32 ACL ayarlanabilir. Erişim ve varsayılan ACL’ler kendi 32 ACL girdisi sınırına sahiptir. Mümkünse ACL atamaları için güvenlik gruplarını kullanın. Grupları kullanarak, dosya veya dizin başına en fazla ACL girdisi sayısını aşma olasılığınız daha düşüktür.

POSIX erişim denetimi modeli hakkında daha fazla bilgiyi nereden bulabilirim?

Ayrıca bkz.