Autorisierungsfehler "403 Zugriff verweigert", wenn das sticky bit in ADLS Gen2 aktiviert ist

Dieser Artikel hilft Ihnen, das klebrige Bit zu verstehen, und enthält Informationen dazu, wie Sie diese Einstellung überprüfen, wenn Sie sie in Azure Data Lake Storage (ADLS) Gen2 konfigurieren und Probleme erhalten.

Was ist das klebrige Bit in ADLS Gen2?

ADLS Gen2-Benutzer müssen häufig Berechtigungen für verschiedene Benutzer verwalten. Eine Möglichkeit hierfür ist die Verwendung einer Zugriffssteuerungsliste (Access Control List, ACL). ACL ist ein POSIX-ähnliches Zugriffssteuerungssystem mit einer bestimmten Einstellung, die als sticky bit bezeichnet wird und autorisierungsfehler verursachen kann. Weitere Informationen zum Berechtigungssteuerungsmodus und zum sticky bit finden Sie unter Zugriffssteuerungslisten (ACLs) in Azure Data Lake Storage Gen2.

Das sticky bit ist ein erweitertes Feature, das in der ACL-Einstellung des ADLS Gen2-Speicherkontos nicht erforderlich ist. Stattdessen können Sie die Maskenfunktion verwenden, um die maximalen Berechtigungen für benannte Benutzer, benannte Gruppen und die besitzende Gruppe einzuschränken. Dies funktioniert ähnlich wie das klebrige Bit und lässt sich einfach im Azure-Portal konfigurieren.

Autorisierungsfehler "403 Zugriff verweigert"

Stellen Sie sich folgendes Szenario vor:

  • Ein ADLS Gen2-Speicherkonto verfügt über einen Container namens Container und einen Ordnerpfad namens folder/child-folder.
  • Sie verwenden ACL als Autorisierungsmethode.
  • In der ACL-Einstellung des ADLS Gen2-Speicherkontos sind Sie mit der Berechtigung Ausführen (X) für das Stammverzeichnis und ordner und mit den Berechtigungen Schreiben und Ausführen (WX) für untergeordnete Ordner konfiguriert.
  • Das klebrige Bit ist für untergeordnete Ordner aktiviert.
  • Sie versuchen, eine neue Datei zu erstellen oder hochzuladen, z. B.test.txtin den Ordnerpfad des ADLS Gen2-Speicherkontos container/folder/child-folder/.

In diesem Szenario erhalten Sie den Autorisierungsfehler "403 Access Verweigert".

Dieser Fehler tritt aus zwei Gründen auf:

  • Sie verfügen nicht über ausreichende Berechtigungen für den Zugriff auf den Ordnerpfad.
  • Sie verfügen über genügend Berechtigungen, aber wenn Sie das sticky bit aktivieren, sind Sie nicht der Besitzer dieses Ordnerpfads.

Identifizieren, ob das sticky bit einen Fehler vom Typ 403 Access Denied verursacht

Überprüfen Sie die ACL-Einstellung des Ordners und der übergeordneten Ordner, und vergleichen Sie sie dann mit den allgemeinen Szenarien im Zusammenhang mit ACL-Berechtigungen. Wenn die Berechtigungen ausreichen, kann der Fehler 403 durch das sticky Bit verursacht werden.

Überprüfen der Einstellung "Sticky Bit" mithilfe der Azure CLI

Es gibt viele Möglichkeiten, diese Einstellung zu überprüfen, z. B. ein REST-API-Aufruf, PowerShell-Befehl und Azure CLI. Wir empfehlen die Azure CLI-Option, da dafür keine zusätzliche Software installiert werden muss und der Befehl leicht zu verstehen ist.

Führen Sie die folgenden Schritte aus, um die Einstellung "Sticky Bit" mithilfe der Azure CLI zu überprüfen:

  1. Melden Sie sich mit Ihrem Konto beim Azure-Portal an. Stellen Sie sicher, dass dieses Konto über die Rollenzuweisung Besitzer von Storage-Blobdaten für das ADLS Gen2-Speicherkonto verfügt.

  2. Wählen Sie Cloud Shell im Azure-Portal aus.

    Screenshot der Schaltfläche „Cloud Shell“ im Azure-Portal.

  3. Verwenden Sie den folgenden Befehl, um die ACL und die Sticky Bit-Einstellung des Container-/Ordnerverzeichnisses abzurufen:

    az storage fs access show -p folder -f container --account-name account --auth-mode login
    

    Verwenden Sie den folgenden Befehl, um die ACL und die Sticky Bit-Einstellung des Stammverzeichnisses zu überprüfen, bei der es sich um die ACL auf Containerebene und die Sticky Bit-Einstellung handelt:

    az storage fs access show -p / -f container --account-name account --auth-mode login
    

    Hier sehen Sie eine Beispielausgabe:

    Screenshot des Beispiels für die Befehlsausgabe.

    Konzentrieren Sie sich im JSON-Antworttext auf permissions. Es enthält normalerweise 9 oder 10 Bits mit einem zusätzlichen "+"-Symbol. Weitere Informationen zu diesen Buchstaben finden Sie unter Benutzer und Identitäten.

    Das vorherige Beispiel zeigt an, dass alle Benutzerberechtigungen aktiviert sind und das sticky bit aktiviert ist. Weitere Informationen zum Lesen dieser Berechtigungsnotation finden Sie unter Notation herkömmlicher Unix-Berechtigungen.

    Der neunte Buchstabe hat vier mögliche Werte: "-", "x", "t" und "T". Wenn der Wert dieses Buchstabens "t" oder "T" ist, bedeutet dies, dass das klebrige Bit aktiviert ist. Das "t" ist "x" mit aktiviertem Klebbit, und "T" ist "-" bei aktiviertem Klebbit.

    "rwxrwxrwt" lässt sich wie folgt erklären:

    • r,w- und x-Berechtigungen sind für den Besitzer aktiviert.
    • Die Berechtigungen r, w und x sind für die Gruppe Besitzer aktiviert.
    • r,w- und x-Berechtigungen sind für Andere Benutzer aktiviert, und das sticky bit ist aktiviert.

    Um es besser zu verstehen, finden Sie hier ein weiteres Beispiel für "rwxr-xr-T":

    • r,w- und x-Berechtigungen sind für den Besitzer aktiviert.
    • r- und x-Berechtigungen sind für die Gruppe Besitzer aktiviert.
    • Nur die r-Berechtigung ist für andere Benutzer aktiviert, und das sticky bit ist aktiviert.

    Gemäß den Kurzformularen für Berechtigungen wird die Kurzformberechtigung für jede Gruppe von drei Buchstaben berechnet ("r" als 4, "w" als 2 und "x "als 1"). "rw-rwx--x" ist also gleich 4+2+0, 4+2+1, 0+0+1, 671. Basierend auf dieser Berechnungsregel müssen Sie nur den vierten Buchstaben am Anfang hinzufügen. Wenn das klebrige Bit aktiviert ist, legen Sie es auf 1 fest. Wenn das klebrige Bit deaktiviert ist, legen Sie es auf 0 fest.

    Hier sind einige Beispiele:

    • rwxrwxrwt => 1777
    • rwxr-xr-T => 1754
    • rw-rwx--x => 0671

Deaktivieren/Aktivieren der Einstellung "Sticky Bit"

Legen Sie die Berechtigungen auf die erwarteten Werte fest, um die Einstellung "Sticky Bit" zu deaktivieren/zu aktivieren.

Das Azure-Konto, das zum Ändern dieser Einstellung verwendet wird, muss über die Rolle Besitzer von Speicherblobdaten im ADLS Gen2-Zielspeicherkonto verfügen. Es gibt viele Möglichkeiten, die Einstellung "Sticky Bit" zu ändern. Dies sind die unterstützten SDKs:

SDK Unterstützte Version Weitere Informationen
REST-API API-Versionen 2019-12-12 und höher Path
Az PowerShell-Modul 5.6.0 und höhere Versionen Verwenden von PowerShell zum Verwalten von ACLs in Azure Data Lake Storage Gen2
Azure CLI 2.38.0 und höhere Versionen Verwenden der Azure CLI zum Verwalten von ACLs in Azure Data Lake Storage Gen2
.NET SDK 12.14.0 und höhere Versionen Verwenden von .NET zum Verwalten von ACLs in Azure Data Lake Storage Gen2
Java SDK 12.11.0 und höhere Versionen Verwenden von Java zum Verwalten von ACLs in Azure Data Lake Storage Gen2
Python SDK 12.8.0 und höhere Versionen Verwenden von Python zum Verwalten von ACLs in Azure Data Lake Storage Gen2
JavaScript SDK 12.11.0-beta.1 und höhere Versionen Verwenden des JavaScript SDK in Node.js zum Verwalten von ACLs in Azure Data Lake Storage Gen2
HDFS CLI 3.3.3 und höhere Versionen Verwenden der HDFS-CLI mit Data Lake Storage Gen2 und Apache Hadoop 3.3.3 – HDFS-Berechtigungshandbuch

Hier sehen Sie ein Beispiel für die Deaktivierung/Aktivierung der Einstellung "Sticky Bit" mit der Azure CLI.

  1. Melden Sie sich beim Azure-Portal mit Ihrem Konto an, das über die Rollenzuweisung Besitzer von Storage-Blobdaten für das ADLS Gen2-Zielspeicherkonto verfügt.

  2. Wählen Sie Cloud Shell im Azure-Portal aus.

    Screenshot der Schaltfläche „Cloud Shell“ im Azure-Portal.

  3. Verwenden Sie den folgenden Befehl, um die ACL und die Sticky Bit-Einstellung des Container-/Ordnerverzeichnisses auf die Berechtigungen "rwxrwxrwt" festzulegen und das sticky bit zu aktivieren:

    az storage fs access set --permissions rwxrwxrwt -p folder -f container --account-name account --auth-mode login
    

    Verwenden Sie den folgenden Befehl, um die Einstellung des Stammverzeichnisses zu ändern, bei der es sich um die ACL auf Containerebene und die Einstellung "Sticky Bit" handelt:

    az storage fs access set --permissions rwxrwxrwt -p / -f container --account-name account --auth-mode login
    

    Der {permission notation} im vorherigen Befehl kann sowohl lange als auch kurze Notationen akzeptieren. Dies bedeutet, dass der folgende Befehl ebenfalls qualifiziert ist:

    az storage fs access set --permissions 1776 -p folder -f container --account-name account --auth-mode login
    

    Hier sehen Sie eine Beispielausgabe:

    Screenshot des Beispiels für die Befehlsausgabe.

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.