Zugriffssteuerung in Azure Data Lake Storage Gen1Access control in Azure Data Lake Storage Gen1

Das von Azure Data Lake Storage Gen1 implementierte Zugriffssteuerungsmodell leitet sich von HDFS ab, das wiederum vom POSIX-Zugriffssteuerungsmodell abgeleitet wird.Azure Data Lake Storage Gen1 implements an access control model that derives from HDFS, which in turn derives from the POSIX access control model. In diesem Artikel werden die Grundlagen des Zugriffssteuerungsmodells für Data Lake Storage Gen1 zusammengefasst.This article summarizes the basics of the access control model for Data Lake Storage Gen1.

Zugriffssteuerungslisten für Dateien und OrdnerAccess control lists on files and folders

Es gibt zwei Arten von Zugriffssteuerungslisten (Access Control Lists, ACLs): Zugriffs-ACLs und Standard-ACLs.There are two kinds of access control lists (ACLs), Access ACLs and Default ACLs.

  • Zugriffs-ACLs: Diese Listen steuern den Zugriff auf ein Objekt.Access ACLs: These control access to an object. Dateien und Ordner verfügen jeweils über Zugriffs-ACLs.Files and folders both have Access ACLs.

  • Standard-ACLs: Hierbei handelt es sich um eine Art Vorlage für ACLs, die einem Ordner zugeordnet sind und die Zugriffs-ACLs für alle untergeordneten Elemente festlegen, die unter diesem Ordner erstellt werden.Default ACLs: A "template" of ACLs associated with a folder that determine the Access ACLs for any child items that are created under that folder. Dateien verfügen über keine Standard-ACLs.Files do not have Default ACLs.

Zugriffs- und Standard-ACLs besitzen die gleiche Struktur.Both Access ACLs and Default ACLs have the same structure.

Hinweis

Änderungen an der Standard-ACL für ein übergeordnetes Element haben keine Auswirkungen auf die Zugriffs- oder Standard-ACL bereits vorhandener untergeordneter Elemente.Changing the Default ACL on a parent does not affect the Access ACL or Default ACL of child items that already exist.

BerechtigungenPermissions

Die Berechtigungen für ein Dateisystemobjekt sind Lesen, Schreiben und Ausführen. Sie können wie in der folgenden Tabelle beschrieben auf Dateien und Ordner angewendet werden:The permissions on a filesystem object are Read, Write, and Execute, and they can be used on files and folders as shown in the following table:

FileFile OrdnerFolder
Lesen (Read, R)Read (R) Berechtigt zum Lesen von DateiinhaltenCan read the contents of a file Erfordert Lesen und Ausführen, um den Inhalt des Ordners aufzulisten.Requires Read and Execute to list the contents of the folder
Schreiben (Write, W)Write (W) Berechtigt zum Schreiben in eine Datei sowie zum Anfügen an eine DateiCan write or append to a file Erfordert Schreiben und Ausführen, um untergeordnete Elemente in einem Ordner zu erstellen.Requires Write and Execute to create child items in a folder
Ausführen (Execute, X)Execute (X) Hat im Kontext von Data Lake Storage Gen1 keine BedeutungDoes not mean anything in the context of Data Lake Storage Gen1 Erfordert das Durchlaufen der untergeordneten Elemente eines Ordners.Required to traverse the child items of a folder

Kurzformen für BerechtigungenShort forms for permissions

RWX steht für Lesen (Read), Schreiben (Write) und Ausführen (Execute) .RWX is used to indicate Read + Write + Execute. Es gibt auch ein noch kürzeres numerisches Format. Hierbei steht 4 für Lesen, 2 für Schreiben und 1 für Ausführen, und Berechtigungen werden als Summe dieser Werte angegeben.A more condensed numeric form exists in which Read=4, Write=2, and Execute=1, the sum of which represents the permissions. Hier einige Beispiele.Following are some examples.

Numerische FormNumeric form KurzformShort form BedeutungWhat it means
77 RWX Lesen, Schreiben und AusführenRead + Write + Execute
55 R-X Lesen und AusführenRead + Execute
44 R-- LesenRead
00 --- Keine BerechtigungenNo permissions

Keine Vererbung bei BerechtigungenPermissions do not inherit

Im von Data Lake Storage Gen1 verwendeten POSIX-basierten Modell werden Berechtigungen für ein Element direkt im Element gespeichert.In the POSIX-style model that's used by Data Lake Storage Gen1, permissions for an item are stored on the item itself. Berechtigungen für ein Element können also nicht von den übergeordneten Elementen geerbt werden.In other words, permissions for an item cannot be inherited from the parent items.

Im Folgenden sind einige allgemeine Szenarien aufgeführt, die veranschaulichen, welche Berechtigungen zum Ausführen bestimmter Vorgänge für ein Data Lake Storage Gen1-Konto erforderlich sind.Following are some common scenarios to help you understand which permissions are needed to perform certain operations on a Data Lake Storage Gen1 account.

VorgangOperation ObjectObject / Seattle/Seattle/ Portland/Portland/ Data.txtData.txt
LesenRead Data.txtData.txt --X --X --X R--
Anfügen anAppend to Data.txtData.txt --X --X --X RW-
LöschenDelete Data.txtData.txt --X --X -WX ---
ErstellenCreate Data.txtData.txt --X --X -WX ---
ListList / R-X --- --- ---
ListList /Seattle//Seattle/ --X R-X --- ---
ListList /Seattle/Portland//Seattle/Portland/ --X --X R-X ---

Hinweis

Wenn die beiden obigen Bedingungen erfüllt sind, werden zum Löschen der Datei keine Schreibberechtigungen für die Datei benötigt.Write permissions on the file are not required to delete it as long as the previous two conditions are true.

Benutzer und IdentitätenUsers and identities

Alle Dateien und Ordner verfügen über eigene Berechtigungen für folgende Identitäten:Every file and folder has distinct permissions for these identities:

  • Der zuständige BenutzerThe owning user
  • Die zuständige GruppeThe owning group
  • Benannte BenutzerNamed users
  • Benannte GruppenNamed groups
  • Alle anderen BenutzerAll other users

Die Identitäten von Benutzern und Gruppen sind Azure AD-Identitäten (Azure Active Directory).The identities of users and groups are Azure Active Directory (Azure AD) identities. Sofern nichts anderes angegeben ist, kann ein „Benutzer“ im Data Lake Storage Gen1-Kontext also entweder ein Azure AD-Benutzer oder eine Azure AD-Sicherheitsgruppe sein.So unless otherwise noted, a "user," in the context of Data Lake Storage Gen1, can either mean an Azure AD user or an Azure AD security group.

AdministratorThe super-user

Ein Administrator verfügt über die meisten Rechte aller Benutzer im Data Lake Storage Gen1-Konto.A super-user has the most rights of all the users in the Data Lake Storage Gen1 account. Für einen Administrator gilt Folgendes:A super-user:

  • Er besitzt RWX-Berechtigungen für alle Dateien und Ordner.Has RWX Permissions to all files and folders.
  • Er kann die Berechtigungen für jede Datei und jeden Ordner ändern.Can change the permissions on any file or folder.
  • Er kann den zuständigen Benutzer und die zuständige Gruppe einer beliebigen Datei und eines beliebigen Ordners ändern.Can change the owning user or owning group of any file or folder.

Alle Benutzer, die der Rolle Besitzer für ein Data Lake Storage Gen1-Konto angehören, sind automatisch auch Administratoren.All users that are part of the Owners role for a Data Lake Storage Gen1 account are automatically a super-user.

Der zuständige BenutzerThe owning user

Der Benutzer, der das Element erstellt hat, ist automatisch der zuständige Benutzer für das Element.The user who created the item is automatically the owning user of the item. Der zuständige Benutzer hat folgende Möglichkeiten:An owning user can:

  • Er kann die Berechtigungen einer Datei ändern, für die er als Besitzer fungiert.Change the permissions of a file that is owned.
  • Er kann die zuständige Gruppe einer Datei ändern, für die er als Besitzer fungiert, solange der zuständige Benutzer auch der Zielgruppe angehört.Change the owning group of a file that is owned, as long as the owning user is also a member of the target group.

Hinweis

Der Besitzer kann einen anderen Besitzer einer Datei oder eines Ordners nicht ändern.The owning user cannot change the owning user of a file or folder. Nur Administratoren können den zuständigen Benutzer einer Datei oder eines Ordners ändern.Only super-users can change the owning user of a file or folder.

Die zuständige GruppeThe owning group

HintergrundBackground

In den POSIX-Zugriffssteuerungslisten ist jeder Benutzer einer „primären Gruppe“ zugeordnet.In the POSIX ACLs, every user is associated with a "primary group." So kann beispielsweise die Benutzerin „Alice“ der Gruppe „finance“ angehören.For example, user "alice" might belong to the "finance" group. Alice kann außerdem mehreren Gruppen angehören, aber eine Gruppe wird immer als ihre primäre Gruppe festgelegt.Alice might also belong to multiple groups, but one group is always designated as her primary group. In POSIX gilt: Wenn Alice eine Datei erstellt, wird die zuständige Gruppe der Datei auf ihre primäre Gruppe festgelegt (in diesem Fall „finance“).In POSIX, when Alice creates a file, the owning group of that file is set to her primary group, which in this case is "finance." Andernfalls verhält sich die zuständige Gruppe ähnlich wie zugewiesene Berechtigungen für andere Benutzer oder Gruppen.The owning group otherwise behaves similarly to assigned permissions for other users/groups.

Da den Benutzern in Data Lake Storage Gen1 keine „primäre Gruppe“ zugeordnet ist, wird die zuständige Gruppe wie unten angegeben zugewiesen.Because there is no “primary group” associated to users in Data Lake Storage Gen1, the owning group is assigned as below.

Zuweisen der zuständigen Gruppe für eine neue Datei oder einen neuen OrdnerAssigning the owning group for a new file or folder

  • Fall 1: Der Stammordner „/“.Case 1: The root folder "/". Dieser Ordner wird erstellt, wenn ein Data Lake Storage Gen1-Konto erstellt wird.This folder is created when a Data Lake Storage Gen1 account is created. In diesem Fall wird die zuständige Gruppe auf eine GUID festgelegt, die nur aus Nullen besteht.In this case, the owning group is set to an all-zero GUID. Bei diesem Wert ist kein Zugriff zulässig.This value does not permit any access. Es ist ein Platzhalter, der bis zur Zuweisung einer Gruppe gilt.It is a placeholder until such time a group is assigned.
  • Fall 2 (jeder andere Fall): Beim Erstellen eines neuen Elements wird die zuständige Gruppe aus dem übergeordneten Ordner kopiert.Case 2 (Every other case): When a new item is created, the owning group is copied from the parent folder.

Ändern der zuständigen GruppeChanging the owning group

Die zuständige Gruppe kann von folgenden Benutzern geändert werden:The owning group can be changed by:

  • Beliebiger AdministratorAny super-users.
  • Zuständiger Benutzer, sofern er auch der Zielgruppe angehörtThe owning user, if the owning user is also a member of the target group.

Hinweis

Die zuständige Gruppe kann die ACLs einer Datei oder eines Ordners nicht ändern.The owning group cannot change the ACLs of a file or folder.

Für Konten, die bis September 2018 erstellt wurden, wurde die zuständige Gruppe auf den Benutzer festgelegt, der das Konto erstellt hat (für Stammordner siehe 1. Fall oben).For accounts created on or before September 2018, the owning group was set to the user who created the account in the case of the root folder for Case 1, above. Ein einzelnes Benutzerkonto ist zum Bereitstellen von Berechtigungen über die zuständige Gruppe nicht gültig, sodass mit dieser Standardeinstellung keine Berechtigungen gewährt werden.A single user account is not valid for providing permissions via the owning group, thus no permissions are granted by this default setting. Sie können diese Berechtigung einer gültigen Benutzergruppe zuweisen.You can assign this permission to a valid user group.

Algorithmus für die ZugriffsüberprüfungAccess check algorithm

Im folgenden Pseudocode wird der Zugriffsüberprüfungsalgorithmus für Data Lake Storage Gen1-Konten veranschaulicht.The following pseudocode represents the access check algorithm for Data Lake Storage Gen1 accounts.

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)

Die MaskeThe mask

Wie im Algorithmus für die Zugriffsüberprüfung gezeigt beschränkt die Maske den Zugriff auf benannte Benutzer, die zuständige Gruppe und benannte Gruppen.As illustrated in the Access Check Algorithm, the mask limits access for named users, the owning group, and named groups.

Hinweis

Bei einem neuen Data Lake Storage Gen1-Konto wird die Maske für die Zugriffs-ACL des Stammordners („/“) standardmäßig auf „RWX“ festgelegt.For a new Data Lake Storage Gen1 account, the mask for the Access ACL of the root folder ("/") defaults to RWX.

Das Sticky BitThe sticky bit

Das Sticky Bit ist ein erweitertes Feature eines POSIX-Dateisystems.The sticky bit is a more advanced feature of a POSIX filesystem. Im Kontext von Data Lake Storage Gen1 wird das Sticky Bit höchstwahrscheinlich nicht benötigt.In the context of Data Lake Storage Gen1, it is unlikely that the sticky bit will be needed. Kurz gefasst kann ein untergeordnetes Element nur vom jeweiligen zuständigen Benutzer gelöscht oder umbenannt werden, wenn das Sticky Bit für einen Ordner aktiviert ist.In summary, if the sticky bit is enabled on a folder, a child item can only be deleted or renamed by the child item's owning user.

Das Sticky Bit wird im Azure-Portal nicht angezeigt.The sticky bit is not shown in the Azure portal.

Standardberechtigungen für neue Dateien und OrdnerDefault permissions on new files and folders

Wenn unter einem bereits vorhandenen Ordner eine neue Datei oder ein erstellt wird, bestimmt die Standard-ACL des übergeordneten Ordners Folgendes:When a new file or folder is created under an existing folder, the Default ACL on the parent folder determines:

  • Eine Standard- und eine Zugriffs-ACL des untergeordneten OrdnersA child folder’s Default ACL and Access ACL.
  • Eine Zugriffs-ACL der untergeordneten Datei (Dateien besitzen keine Standard-ACL)A child file's Access ACL (files do not have a Default ACL).

umaskumask

Beim Erstellen einer Datei oder eines Ordners wird „umask“ verwenden, um zu ändern, wie Standard-ACLs für das untergeordnete Element festgelegt werden.When creating a file or folder, umask is used to modify how the default ACLs are set on the child item. „umask“ ist ein 9-Bit-Wert für übergeordnete Ordner, der einen RWX-Wert für Besitzer, Gruppe des Besitzers und Andere enthält.umask is a 9-bit value on parent folders that contains an RWX value for owning user, owning group, and other.

Für Azure Data Lake Storage Gen1 ist „umask“ ein konstanter Wert, der auf „007“ festgelegt ist.The umask for Azure Data Lake Storage Gen1 is a constant value set to 007. Dieser Wert wird wie folgt übersetztThis value translates to

umask-Komponenteumask component Numerische FormNumeric form KurzformShort form BedeutungMeaning
umask.owning_userumask.owning_user 00 --- Für zuständige Benutzer wird die Standard-ACL des übergeordneten Elements für die Zugriffs-ACL des untergeordneten Elements kopiertFor owning user, copy the parent's Default ACL to the child's Access ACL
umask.owning_groupumask.owning_group 00 --- Für zuständige Gruppen wird die Standard-ACL des übergeordneten Elements für die Zugriffs-ACL des untergeordneten Elements kopiertFor owning group, copy the parent's Default ACL to the child's Access ACL
umask.otherumask.other 77 RWX Für „Andere“ werden alle Berechtigungen für die Zugriffs-ACL des untergeordneten Elements entferntFor other, remove all permissions on the child's Access ACL

Der umask-Wert, der von Azure Data Lake Storage Gen1 verwendet wird, bedeutet, dass der Wert für „Andere“ nie standardmäßig an untergeordnete Elemente übertragen wird, unabhängig davon, was die Standard-ACL angibt.The umask value used by Azure Data Lake Storage Gen1 effectively means that the value for other is never transmitted by default on new children - regardless of what the Default ACL indicates.

Im folgenden Pseudocode wird gezeigt, wie der umask-Wert angewendet wird, wenn die ACLs für ein untergeordnetes Element erstellt werden.The following pseudocode shows how the umask is applied when creating the ACLs for a child item.

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 )

Allgemeine Fragen zu ACLs in Data Lake Storage Gen1Common questions about ACLs in Data Lake Storage Gen1

Muss ich die Unterstützung für ACLs aktivieren?Do I have to enable support for ACLs?

Nein.No. Die ACL-basierte Zugriffssteuerung ist für ein Data Lake Storage Gen1-Konto immer aktiviert.Access control via ACLs is always on for a Data Lake Storage Gen1 account.

Welche Berechtigungen werden zum rekursiven Löschen eines Ordners und seines Inhalts benötigt?Which permissions are required to recursively delete a folder and its contents?

  • Der übergeordnete Ordner muss über Schreib- und Ausführungsberechtigungen verfügen.The parent folder must have Write + Execute permissions.
  • Der zu löschende Ordner und alle darin enthaltenen Ordner müssen über Lese-, Schreib- und Ausführungsberechtigungen verfügen.The folder to be deleted, and every folder within it, requires Read + Write + Execute permissions.

Hinweis

Sie benötigen zum Löschen von Dateien in Ordnern keine Schreibberechtigungen.You do not need Write permissions to delete files in folders. Außerdem gilt: Der Stammordner „/“ kann nie gelöscht werden.Also, the root folder "/" can never be deleted.

Wer ist der Besitzer einer Datei oder eines Ordners?Who is the owner of a file or folder?

Der Ersteller einer Datei oder eines Ordners wird als Besitzer festgelegt.The creator of a file or folder becomes the owner.

Welche Gruppe wird bei der Erstellung als zuständige Gruppe einer Datei oder eines Ordners festgelegt?Which group is set as the owning group of a file or folder at creation?

Die zuständige Gruppe wird aus der zuständigen Gruppe des übergeordneten Ordners kopiert, unter dem die neue Datei oder der neue Ordner erstellt wird.The owning group is copied from the owning group of the parent folder under which the new file or folder is created.

Ich bin der zuständige Benutzer einer Datei, verfüge aber nicht über die erforderlichen RWX-Berechtigungen.I am the owning user of a file but I don’t have the RWX permissions I need. Wie gehe ich vor?What do I do?

Der zuständige Benutzer kann die Berechtigungen der Datei ändern und sich so selbst die erforderlichen RWX-Berechtigungen gewähren.The owning user can change the permissions of the file to give themselves any RWX permissions they need.

Wenn ich mir die ACLs im Azure-Portal ansehe, sehe ich dort Benutzernamen, aber über APIs werden mir GUIDs angezeigt. Warum ist das so?When I look at ACLs in the Azure portal I see user names but through APIs, I see GUIDs, why is that?

Einträge in den ACLs werden als GUIDs gespeichert, die Benutzern in Azure AD entsprechen.Entries in the ACLs are stored as GUIDs that correspond to users in Azure AD. Die APIs geben die GUIDs unverändert zurück.The APIs return the GUIDs as is. Das Azure-Portal wandelt die GUIDs zur Vereinfachung der ACL-Verwendung nach Möglichkeit in benutzerfreundliche Namen um.The Azure portal tries to make ACLs easier to use by translating the GUIDs into friendly names when possible.

Warum werden im Azure-Portal manchmal GUIDs in den ACLs angezeigt?Why do I sometimes see GUIDs in the ACLs when I'm using the Azure portal?

Eine GUID wird angezeigt, wenn der Benutzer in Azure AD nicht mehr vorhanden ist.A GUID is shown when the user doesn't exist in Azure AD anymore. Dies ist meist der Fall, wenn der Benutzer aus dem Unternehmen ausgeschieden ist oder sein Konto in Azure AD gelöscht wurde.Usually this happens when the user has left the company or if their account has been deleted in Azure AD.

Unterstützt Data Lake Storage Gen1 die Vererbung von ACLs?Does Data Lake Storage Gen1 support inheritance of ACLs?

Nein, aber Standard-ACLs können zum Festlegen von ACLs für untergeordnete Dateien und Ordner verwendet werden, die unter dem übergeordneten Ordner neu erstellt wurden.No, but Default ACLs can be used to set ACLs for child files and folder newly created under the parent folder.

Wo finde ich weitere Informationen zum POSIX-Zugriffssteuerungsmodell?Where can I learn more about POSIX access control model?

Weitere InformationenSee also