Zugriffssteuerung in Azure Data Lake Storage Gen2Access control in Azure Data Lake Storage Gen2

Azure Data Lake Storage Gen2 implementiert ein Zugriffssteuerungsmodell, das sowohl die rollenbasierte Zugriffssteuerung (Role Based Access Control, RBAC) in Azure als auch POSIX-ähnliche Zugriffssteuerungslisten (Access Control Lists, ACLs) unterstützt.Azure Data Lake Storage Gen2 implements an access control model that supports both Azure role-based access control (Azure RBAC) and POSIX-like access control lists (ACLs). In diesem Artikel werden die Grundlagen des Zugriffssteuerungsmodells für Data Lake Storage Gen2 zusammengefasst.This article summarizes the basics of the access control model for Data Lake Storage Gen2.

Rollenbasierte ZugriffssteuerungRole-based access control

Für die RBAC werden Rollenzuweisungen verwendet, um Sicherheitsprinzipalen effektiv Berechtigungen zuzuweisen.RBAC uses role assignments to effectively apply sets of permissions to security principals. Ein Sicherheitsprinzipal ist ein Objekt, das einen Benutzer, eine Gruppe, einen Dienstprinzipal oder eine verwaltete Identität darstellt, der bzw. die in Azure Active Directory (AD) definiert ist und Zugriff auf Azure-Ressourcen anfordert.A security principal is an object that represents a user, group, service principal, or managed identity that is defined in Azure Active Directory (AD) that is requesting access to Azure resources.

In der Regel sind diese Azure-Ressourcen auf Ressourcen oberster Ebene beschränkt, z. B. Azure Storage-Konten.Typically, those Azure resources are constrained to top-level resources (For example: Azure Storage accounts). Im Falle von Azure Storage und damit auch von Azure Data Lake Storage Gen2 wurde dieser Mechanismus auf die Containerressource (Dateisystem) ausgeweitet.In the case of Azure Storage, and consequently Azure Data Lake Storage Gen2, this mechanism has been extended to the container (file system) resource.

Informationen zum Zuweisen von Rollen zu Sicherheitsprinzipalen im Bereich Ihres Speicherkontos finden Sie unter Grant access to Azure blob and queue data with RBAC in the Azure portal (Erteilen des Zugriffs auf Azure-Blob- und Warteschlangendaten mithilfe von RBAC im Azure-Portal).To learn how to assign roles to security principals in the scope of your storage account, see Grant access to Azure blob and queue data with RBAC in the Azure portal.

Hinweis

Ein Gastbenutzer kann keine Rollenzuweisung erstellen.A guest user can't create a role assignment.

Die Auswirkungen von Rollenzuweisungen auf Zugriffssteuerungslisten auf Datei- und VerzeichnisebeneThe impact of role assignments on file and directory level access control lists

Azure-Rollenzuweisungen sind zwar ein effektiver Mechanismus zur Steuerung von Zugriffsberechtigungen, aber im Vergleich zu Zugriffssteuerungslisten nicht sehr detailliert.While using Azure role assignments is a powerful mechanism to control access permissions, it is a very coarsely grained mechanism relative to ACLs. Die kleinste Granularität für RBAC ist die Containerebene, und diese wird mit einer höheren Priorität als Zugriffssteuerungslisten ausgewertet.The smallest granularity for RBAC is at the container level and this will be evaluated at a higher priority than ACLs. Wenn Sie einem Sicherheitsprinzipal im Bereich eines Containers eine Rolle zuweisen, hat dieser Sicherheitsprinzipal daher die Autorisierungsstufe dieser Rolle für ALLE Verzeichnisse und Dateien in diesem Container, unabhängig von den ACL-Zuweisungen.Therefore, if you assign a role to a security principal in the scope of a container, that security principal has the authorization level associated with that role for ALL directories and files in that container, regardless of ACL assignments.

Wenn einem Sicherheitsprinzipal RBAC-Datenberechtigungen über eine integrierte Rolle oder eine benutzerdefinierte Rolle erteilt werden, erfolgt die Auswertung dieser Berechtigungen bei der Autorisierung einer Anforderung als erstes.When a security principal is granted RBAC data permissions through a built-in role, or through a custom role, these permissions are evaluated first upon authorization of a request. Wenn der Anforderungsvorgang von den Azure-Rollenzuweisungen des Sicherheitsprinzipals autorisiert wurde, wird die Autorisierung sofort aufgelöst, und es werden keine weiteren ACL-Prüfungen durchgeführt.If the requested operation is authorized by the security principal's Azure role assignments then authorization is immediately resolved and no additional ACL checks are performed. Wenn der Sicherheitsprinzipal nicht über eine Azure-Rollenzuweisung verfügt oder der Vorgang der Anforderung nicht mit der zugewiesenen Berechtigung übereinstimmt, werden alternativ ACL-Prüfungen durchgeführt, um zu bestimmen, ob der Sicherheitsprinzipal für die Durchführung des angeforderten Vorgangs autorisiert ist.Alternatively, if the security principal does not have an Azure role assignment, or the request's operation does not match the assigned permission, then ACL checks are performed to determine if the security principal is authorized to perform the requested operation.

Hinweis

Wenn dem Sicherheitsprinzipal die integrierte Rolle des Besitzers der Speicherblobdaten zugewiesen wurde, gilt der Sicherheitsprinzipal als super-user, und er erhält Vollzugriff für alle Änderungsvorgänge, einschließlich Festlegung des Besitzers eines Verzeichnisses oder einer Datei sowie von ACLs für Verzeichnisse und Dateien, deren Besitzer er nicht ist.If the security principal has been assigned the Storage Blob Data Owner built-in role assignment, then the security principal is considered a super-user and is granted full access to all mutating operations, including setting the owner of a directory or file as well as ACLs for directories and files for which they are not the owner. Dieser Administratorzugriff ist die einzige autorisierte Möglichkeit, den Besitzer einer Ressource zu ändern.Super-user access is the only authorized manner to change the owner of a resource.

Gemeinsam verwendeter Schlüssel und SAS-Authentifizierung (Shared Access Signature)Shared Key and Shared Access Signature (SAS) authentication

Azure Data Lake Storage Gen2 unterstützt für die Authentifizierung die Methoden „Gemeinsam verwendeter Schlüssel“ und „SAS“.Azure Data Lake Storage Gen2 supports Shared Key and SAS methods for authentication. Ein Merkmal dieser Authentifizierungsmethoden ist, dass dem Aufrufer keine Identität zugeordnet wird und daher keine auf Sicherheitsprinzipalberechtigungen basierende Autorisierung erfolgen kann.A characteristic of these authentication methods is that no identity is associated with the caller and therefore security principal permission-based authorization cannot be performed.

Im Falle des gemeinsam verwendeten Schlüssels erhält der Aufrufer faktisch Administratorzugriff, was Vollzugriff zum Anwenden sämtlicher Vorgänge auf alle Ressourcen bedeutet, einschließlich Festlegung des Besitzers und Änderung von ACLs.In the case of Shared Key, the caller effectively gains 'super-user' access, meaning full access to all operations on all resources, including setting owner and changing ACLs.

SAS-Token enthalten zulässige Berechtigungen als Teil des Tokens.SAS tokens include allowed permissions as part of the token. Die im SAS-Token enthaltenen Berechtigungen fließen effektiv in alle Berechtigungsentscheidungen ein, ohne dass zusätzliche ACL-Prüfungen erfolgen.The permissions included in the SAS token are effectively applied to all authorization decisions, but no additional ACL checks are performed.

Zugriffssteuerungslisten für Dateien und VerzeichnisseAccess control lists on files and directories

Sie können einem Sicherheitsprinzipal eine Zugriffsebene für Dateien und Verzeichnisse zuordnen.You can associate a security principal with an access level for files and directories. Diese Zuordnungen werden in einer Zugriffssteuerungsliste (ACL) erfasst.These associations are captured in an access control list (ACL). Jede Datei und jedes Verzeichnis in Ihrem Speicherkonto verfügt über eine Zugriffssteuerungsliste.Each file and directory in your storage account has an access control list.

Hinweis

ACLs gelten nur für Sicherheitsprinzipale im gleichen Mandanten.ACLs apply only to security principals in the same tenant.

Wenn Sie einem Sicherheitsprinzipal eine Rolle auf Speicherkontoebene zugewiesen haben, können Sie diesem Sicherheitsprinzipal mit Zugriffssteuerungslisten Zugriff mit erhöhten Rechten auf bestimmte Dateien und Verzeichnisse gewähren.If you assigned a role to a security principal at the storage account-level, you can use access control lists to grant that security principal elevated access to specific files and directories.

Zugriffssteuerungslisten können nicht verwendet werden, um eine Zugriffsebene bereitzustellen, die niedriger als eine durch eine Rollenzuweisung gewährte Ebene ist.You can't use access control lists to provide a level of access that is lower than a level granted by a role assignment. Wenn Sie beispielsweise einem Sicherheitsprinzipal die Rolle Mitwirkender an Speicherblob zuweisen, können Sie nicht mithilfe von Zugriffssteuerungslisten verhindern, dass dieser Sicherheitsprinzipal in ein Verzeichnis schreibt.For example, if you assign the Storage Blob Data Contributor role to a security principal, then you can't use access control lists to prevent that security principal from writing to a directory.

Festlegen von Berechtigungen auf Datei- und Verzeichnisebene mithilfe von ZugriffssteuerungslistenSet file and directory level permissions by using access control lists

Informationen zum Festlegen von Berechtigungen auf Datei- und Verzeichnisebene finden Sie in den folgenden Artikeln:To set file and directory level permissions, see any of the following articles:

EnvironmentEnvironment ArtikelArticle
Azure Storage-ExplorerAzure Storage Explorer Verwenden von Azure Storage-Explorer zum Verwalten von Verzeichnissen, Dateien und Zugriffssteuerungslisten in Azure Data Lake Storage Gen2Use Azure Storage Explorer to manage directories, files, and ACLs in Azure Data Lake Storage Gen2
.NET.NET Verwenden von .NET zum Verwalten von Verzeichnissen, Dateien und Zugriffssteuerungslisten in Azure Data Lake Storage Gen2Use .NET to manage directories, files, and ACLs in Azure Data Lake Storage Gen2
JavaJava Verwenden von Java zum Verwalten von Verzeichnissen, Dateien und Zugriffssteuerungslisten in Azure Data Lake Storage Gen2Use Java to manage directories, files, and ACLs in Azure Data Lake Storage Gen2
PythonPython Verwenden von Python zum Verwalten von Verzeichnissen, Dateien und Zugriffssteuerungslisten in Azure Data Lake Storage Gen2Use Python to manage directories, files, and ACLs in Azure Data Lake Storage Gen2
PowerShellPowerShell Verwenden von PowerShell zum Verwalten von Verzeichnissen, Dateien und Zugriffssteuerungslisten in Azure Data Lake Storage Gen2Use PowerShell to manage directories, files, and ACLs in Azure Data Lake Storage Gen2
Azure-BefehlszeilenschnittstelleAzure CLI Verwenden der Azure CLI zum Verwalten von Verzeichnissen, Dateien und Zugriffssteuerungslisten in Azure Data Lake Storage Gen2Use Azure CLI to manage directories, files, and ACLs in Azure Data Lake Storage Gen2
REST-APIREST API Pfad – AktualisierungPath - Update

Wichtig

Wenn der Sicherheitsprinzipal ein Dienstprinzipal ist, muss die Objekt-ID des Dienstprinzipals verwendet werden, nicht die Objekt-ID der zugehörigen App-Registrierung.If the security principal is a service principal, it's important to use the object ID of the service principal and not the object ID of the related app registration. Um die Objekt-ID des Dienstprinzipals abzurufen, öffnen Sie die Azure-Befehlszeilenschnittstelle, und verwenden Sie diesen Befehl: az ad sp show --id <Your App ID> --query objectId.To get the object ID of the service principal open the Azure CLI, and then use this command: az ad sp show --id <Your App ID> --query objectId. Achten Sie darauf, den Platzhalter <Your App ID> durch die App-ID der App-Registrierung zu ersetzen.make sure to replace the <Your App ID> placeholder with the App ID of your app registration.

Arten von ZugriffssteuerungslistenTypes of access control lists

Es gibt zwei Arten von Zugriffssteuerungslisten: Zugriffs-ACLs und Standard-ACLs.There are two kinds of access control lists: access ACLs and default ACLs.

Zugriffs-ACLs steuern den Zugriff auf ein Objekt.Access ACLs control access to an object. Dateien und Verzeichnisse verfügen jeweils über Zugriffs-ACLs.Files and directories both have access ACLs.

Standard-ACLs sind Vorlagen von ACLs, die einem Verzeichnis zugeordnet sind, das die Zugriffs-ACLs für alle unter diesem Verzeichnis erstellten untergeordneten Elemente festlegt.Default ACLs are templates of ACLs associated with a directory that determine the access ACLs for any child items that are created under that directory. Dateien verfügen über keine Standard-ACLs.Files do not have default ACLs.

Zugriffs- und Standard-ACLs haben 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.

BerechtigungsebenenLevels of permission

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

DateiFile VerzeichnisDirectory
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 Verzeichnisses aufzulisten.Requires Read and Execute to list the contents of the directory
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 Verzeichnis zu erstellen.Requires Write and Execute to create child items in a directory
Ausführen (Execute, X)Execute (X) Hat im Kontext von Data Lake Storage Gen2 keine BedeutungDoes not mean anything in the context of Data Lake Storage Gen2 Erfordert das Durchlaufen der untergeordneten Elemente eines VerzeichnissesRequired to traverse the child items of a directory

Hinweis

Wenn Sie Berechtigungen ausschließlich mithilfe von ACLs (ohne RBAC) erteilen, müssen Sie zum Erteilen von Lese- oder Schreibzugriff auf eine Datei für einen Sicherheitsprinzipal dem Sicherheitsprinzipal die Berechtigung Ausführen für den Container und für jeden Ordner in der Ordnerhierarchie erteilen, der zu der betreffenden Datei führt.If you are granting permissions by using only ACLs (no RBAC), then to grant a security principal read or write access to a file, you'll need to give the security principal Execute permissions to the container, and to each folder in the hierarchy of folders that lead to the file.

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

Vererbung von BerechtigungenPermissions inheritance

Im von Data Lake Storage Gen2 verwendeten POSIX-basierten Modell werden Berechtigungen für ein Element direkt im Element selbst gespeichert.In the POSIX-style model that's used by Data Lake Storage Gen2, 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, wenn die Berechtigungen festgelegt werden, nachdem das untergeordnete Element bereits erstellt wurde.In other words, permissions for an item cannot be inherited from the parent items if the permissions are set after the child item has already been created. Berechtigungen werden nur dann geerbt, wenn für die übergeordneten Elemente Standardberechtigungen festgelegt wurden, bevor die untergeordneten Elemente erstellt werden.Permissions are only inherited if default permissions have been set on the parent items before the child items have been created.

In der folgenden Tabelle sind einige allgemeine Szenarien aufgeführt, die veranschaulichen, welche Berechtigungen zum Anwenden bestimmter Vorgänge auf ein Speicherkonto erforderlich sind.The following table lists some common scenarios to help you understand which permissions are needed to perform certain operations on a storage account.

VorgangOperation / Oregon/Oregon/ Portland/Portland/ Data.txtData.txt
Lesen von „Data.txt“Read Data.txt --X --X --X R--
Anfügen an „Data.txt“Append to Data.txt --X --X --X RW-
Löschen von „Data.txt“Delete Data.txt --X --X -WX ---
Erstellen von „Data.txt“Create Data.txt --X --X -WX ---
Auflisten von „/“List / R-X --- --- ---
List /Oregon/List /Oregon/ --X R-X --- ---
List /Oregon/Portland/List /Oregon/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, so long as the previous two conditions are true.

Benutzer und IdentitätenUsers and identities

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

  • Der zuständige BenutzerThe owning user
  • Die zuständige GruppeThe owning group
  • Benannte BenutzerNamed users
  • Benannte GruppenNamed groups
  • Benannte DienstprinzipaleNamed service principals
  • Benannte verwaltete IdentitätenNamed managed identities
  • 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 nicht anderes angegeben, kann ein Benutzer im Data Lake Storage Gen2-Kontext also ein Benutzer, ein Dienstprinzipal, eine verwaltete Identität oder eine Sicherheitsgruppe in Azure AD sein.So unless otherwise noted, a user, in the context of Data Lake Storage Gen2, can refer to an Azure AD user, service principal, managed identity, or security group.

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 zuständige Benutzer kann den zuständigen Benutzer einer Datei oder eines Verzeichnisses nicht ändern.The owning user cannot change the owning user of a file or directory. Nur Administratoren können den zuständigen Benutzer einer Datei oder eines Verzeichnisses ändern.Only super-users can change the owning user of a file or directory.

Die zuständige GruppeThe owning group

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 der Benutzer „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 their 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.

Zuweisen der zuständigen Gruppe für eine neue Datei oder ein neues VerzeichnisAssigning the owning group for a new file or directory
  • Fall 1: Das Stammverzeichnis „/“.Case 1: The root directory "/". Dieses Verzeichnis wird erstellt, wenn ein Data Lake Storage Gen2-Container erstellt wird.This directory is created when a Data Lake Storage Gen2 container is created. In diesem Fall wird die zuständige Gruppe auf den Benutzer festgelegt, der den Container erstellt hat, sofern dies mithilfe von OAuth erfolgt ist.In this case, the owning group is set to the user who created the container if it was done using OAuth. Wenn der Container mithilfe eines gemeinsam verwendeten Schlüssels, einer Konto-SAS oder Dienst-SAS erstellt wird, werden der Besitzer und die zuständige Gruppe auf $superuser festgelegt.If the container is created using Shared Key, an Account SAS, or a Service SAS, then the owner and owning group are set to $superuser.
  • Fall 2 (jeder andere Fall): Beim Erstellen eines neuen Elements wird die zuständige Gruppe aus dem übergeordneten Verzeichnis kopiert.Case 2 (Every other case): When a new item is created, the owning group is copied from the parent directory.
Ä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 Verzeichnisses nicht ändern.The owning group cannot change the ACLs of a file or directory. Im Fall des Stammordners (Fall 1 weiter oben) wird die zuständige Gruppe zwar auf den Benutzer festgelegt, der das Konto erstellt hat, für die Bereitstellung von Berechtigungen über die zuständige Gruppe ist jedoch kein einzelnes Benutzerkonto zulässig.While the owning group is set to the user who created the account in the case of the root directory, Case 1 above, a single user account isn't valid for providing permissions via the owning group. Sie können diese Berechtigung ggf. einer gültigen Benutzergruppe zuweisen.You can assign this permission to a valid user group if applicable.

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

Im folgenden Pseudocode wird der Zugriffsüberprüfungsalgorithmus für Speicherkonten veranschaulicht.The following pseudocode represents the access check algorithm for storage 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 directory
  # Note: the "sticky bit" isn't illustrated in this algorithm
  
# Handle super users.
  if (is_superuser(user)) :
    return True

# Handle the owning user. Note that mask isn't 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.permissions & mask) == desired_perms)

# Handle named groups and owning group
member_count = 0
perms = 0
entries = get_acl_entries( path, NAMED_GROUP | OWNING_GROUP )
mask = get_mask( path )
for entry in entries:
if (user_is_member_of_group(user, entry.identity)) :
    if ((desired_perms & entry.permissions & mask) == desired_perms)
        return True 
        
# 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

Für einen neuen Data Lake Storage Gen2-Container wird die Maske für die Zugriffs-ACL des Stammverzeichnisses („/“) für Verzeichnisse standardmäßig auf 750 und für Dateien auf 640 festgelegt.For a new Data Lake Storage Gen2 container, the mask for the access ACL of the root directory ("/") defaults to 750 for directories and 640 for files. Dateien erhalten nicht das X-Bit, da es für Dateien in einem reinen Speichersystem irrelevant ist.Files do not receive the X bit as it is irrelevant to files in a store-only system.

Die Maske kann aufrufbezogen festgelegt werden.The mask may be specified on a per-call basis. Dies ermöglicht verschiedenen verarbeitenden Systemen, wie beispielsweise Clustern, für ihre Dateivorgänge unterschiedliche effektive Masken zu verwenden.This allows different consuming systems, such as clusters, to have different effective masks for their file operations. Wenn eine Maske für eine bestimmte Anforderung angegeben wird, überschreibt sie die Standardmaske vollständig.If a mask is specified on a given request, it completely overrides the default mask.

Das Sticky BitThe sticky bit

Das Sticky Bit ist ein erweitertes Feature eines POSIX-Containers.The sticky bit is a more advanced feature of a POSIX container. Im Kontext von Data Lake Storage Gen2 wird das Sticky Bit höchstwahrscheinlich nicht benötigt.In the context of Data Lake Storage Gen2, 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 ein Verzeichnis aktiviert ist.In summary, if the sticky bit is enabled on a directory, 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 isn't shown in the Azure portal.

Standardberechtigungen für neue Dateien und VerzeichnisseDefault permissions on new files and directories

Wenn in einem bereits vorhandenen Verzeichnis eine neue Datei oder ein Verzeichnis erstellt wird, bestimmt die Standard-ACL des übergeordneten Verzeichnisses Folgendes:When a new file or directory is created under an existing directory, the default ACL on the parent directory determines:

  • Eine Standard- und eine Zugriffs-ACL des untergeordneten VerzeichnissesA child directory's default ACL and access ACL.
  • Eine Zugriffs-ACL der untergeordneten Datei (Dateien haben keine Standard-ACL)A child file's access ACL (files do not have a default ACL).

umaskumask

Beim Erstellen einer Datei oder eines Verzeichnisses wird „umask“ verwendet, um zu ändern, wie Standard-ACLs für das untergeordnete Element festgelegt werden.When creating a file or directory, umask is used to modify how the default ACLs are set on the child item. „umask“ ist ein 9-Bit-Wert für übergeordnete Verzeichnisse, der einen RWX-Wert für den zuständigen Benutzer, die zuständige Gruppe und andere enthält.umask is a 9-bit value on parent directories that contains an RWX value for owning user, owning group, and other.

Für Azure Data Lake Storage Gen2 ist „umask“ ein konstanter Wert, der auf „007“ festgelegt ist.The umask for Azure Data Lake Storage Gen2 a constant value that is set to 007. Dieser Wert wird wie folgt übersetzt:This 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 kopiert.For owning user, copy the parent's default ACL to the child's access ACL
umask.owning_groupumask.owning_group 00 --- Für die zuständige Gruppe wird die Standard-ACL des übergeordneten Elements für die Zugriffs-ACL des untergeordneten Elements kopiert.For owning group, copy the parent's default ACL to the child's access ACL
umask.otherumask.other 77 RWX Für „other“ (andere) werden alle Berechtigungen für die Zugriffs-ACL des untergeordneten Elements entfernt.For other, remove all permissions on the child's access ACL

Der „umask“-Wert, der von Azure Data Lake Storage Gen2 verwendet wird, bedeutet, dass der Wert für other 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 Gen2 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 Gen2Common questions about ACLs in Data Lake Storage Gen2

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

Nein.No. Die Zugriffssteuerung über ACLs ist für ein Speicherkonto so lange aktiviert, wie die Funktion „Hierarchischer Namespace“ (HNS) aktiviert ist.Access control via ACLs is enabled for a storage account as long as the Hierarchical Namespace (HNS) feature is turned ON.

Wenn HNS deaktiviert ist, gelten weiterhin die RBAC-Autorisierungsregeln von Azure.If HNS is turned OFF, the Azure RBAC authorization rules still apply.

Wie werden ACLs am besten angewendet?What is the best way to apply ACLs?

Verwenden Sie in ACLs Azure AD-Sicherheitsgruppen stets als den zugewiesenen Prinzipal.Always use Azure AD security groups as the assigned principal in ACLs. Widerstehen Sie der Möglichkeit, einzelne Benutzer oder Dienstprinzipale direkt zuzuweisen.Resist the opportunity to directly assign individual users or service principals. Die Verwendung dieser Struktur ermöglicht Ihnen, Benutzer oder Dienstprinzipale hinzuzufügen und zu entfernen, ohne dass Sie ACLs erneut auf eine gesamte Verzeichnisstruktur anwenden müssen.Using this structure will allow you to add and remove users or service principals without the need to reapply ACLs to an entire directory structure. Sie müssen sie stattdessen nur der entsprechenden Azure AD-Sicherheitsgruppe hinzufügen oder daraus entfernen.Instead, you simply need to add or remove them from the appropriate Azure AD security group. Beachten Sie, dass ACLs nicht vererbt werden und die erneute Anwendung von ACLs daher eine Aktualisierung der ACL für jede Datei und jedes Unterverzeichnis erfordert.Keep in mind that ACLs are not inherited and so reapplying ACLs requires updating the ACL on every file and subdirectory.

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

  • Der Aufrufer verfügt über die Berechtigung „super-user“.The caller has 'super-user' permissions,

oderOr

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

Hinweis

Sie benötigen zum Löschen von Dateien in Verzeichnissen keine Schreibberechtigungen.You do not need Write permissions to delete files in directories. Außerdem kann das Stammverzeichnis„/“ kann nicht gelöscht werden.Also, the root directory "/" can never be deleted.

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

Der Ersteller einer Datei oder eines Verzeichnisses wird als Besitzer festgelegt.The creator of a file or directory becomes the owner. Im Falle des Stammverzeichnisses ist dies die Identität des Benutzers, der den Container erstellt hat.In the case of the root directory, this is the identity of the user who created the container.

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

Die zuständige Gruppe wird aus der zuständigen Gruppe des übergeordneten Verzeichnisses kopiert, in dem die neue Datei oder das neue Verzeichnis erstellt wird.The owning group is copied from the owning group of the parent directory under which the new file or directory 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.

Warum werden im Portal mitunter GUIDs in ACLs angezeigt?Why do I sometimes see GUIDs in ACLs?

Eine GUID wird angezeigt, wenn der Eintrag einen Benutzer darstellt, der in Azure AD nicht mehr vorhanden ist.A GUID is shown if the entry represents a user and that 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. Darüber hinaus haben Dienstprinzipale und Sicherheitsgruppen keinen Benutzerprinzipalnamen (UPN), um sie zu identifizieren, und werden daher durch ihr OID-Attribut (eine GUID) abgebildet.Additionally, service principals and security groups do not have a User Principal Name (UPN) to identify them and so they are represented by their OID attribute (a guid).

Wie lege ich ACLs für einen Dienstprinzipal richtig fest?How do I set ACLs correctly for a service principal?

Beim Definieren von ACLs für Dienstprinzipale ist es wichtig, die Objekt-ID (OID) des Dienstprinzipals für die von Ihnen erstellte App-Registrierung zu verwenden.When you define ACLs for service principals, it's important to use the Object ID (OID) of the service principal for the app registration that you created. Sie müssen beachten, dass registrierte Apps über einen separaten Dienstprinzipal im jeweiligen Azure AD-Mandanten verfügen.It's important to note that registered apps have a separate service principal in the specific Azure AD tenant. Registrierte Apps haben eine OID, die im Azure-Portal angezeigt wird, doch hat der Dienstprinzipal eine andere (davon abweichende) OID.Registered apps have an OID that's visible in the Azure portal, but the service principal has another (different) OID.

Mit dem Befehl az ad sp show können Sie die OID für den Dienstprinzipal abrufen, der einer App-Registrierung entspricht.To get the OID for the service principal that corresponds to an app registration, you can use the az ad sp show command. Geben Sie die Anwendungs-ID als Parameter an.Specify the Application ID as the parameter. Es folgt ein Beispiel für das Abrufen der OID für den Dienstprinzipal, der einer App-Registrierung mit der App-ID „18218b12-1895-43e9-ad80-6e8fc1ea88ce“ entspricht.Here's an example on obtaining the OID for the service principal that corresponds to an app registration with App ID = 18218b12-1895-43e9-ad80-6e8fc1ea88ce. Führen Sie in der Azure CLI den folgenden Befehl aus:Run the following command in the Azure CLI:

az ad sp show --id 18218b12-1895-43e9-ad80-6e8fc1ea88ce --query objectId

Die OID wird angezeigt.OID will be displayed.

Wenn Sie über die richtige OID für den Dienstprinzipal verfügen, wechseln Sie zur Seite Zugang verwalten im Storage-Explorer, um die OID hinzuzufügen und entsprechende Berechtigungen für die OID zuzuweisen.When you have the correct OID for the service principal, go to the Storage Explorer Manage Access page to add the OID and assign appropriate permissions for the OID. Klicken Sie auf Speichern.Make sure you select Save.

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

Azure-Rollenzuweisungen werden vererbt.Azure role assignments do inherit. Zuweisungen werden aus Abonnement-, Ressourcengruppen und Speicherkontenressourcen an die Containerressource übertragen.Assignments flow from subscription, resource group, and storage account resources down to the container resource.

ACLs werden nicht vererbt.ACLs do not inherit. Standard-ACLs können jedoch zum Festlegen von ACLs für untergeordnete Unterverzeichnisse und Dateien verwendet werden, die im übergeordneten Verzeichnis erstellt wurden.However, default ACLs can be used to set ACLs for child subdirectories and files created under the parent directory.

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

Weitere InformationenSee also