Använda Azure CLI för att hantera ACL:er i Azure Data Lake Storage

Den här artikeln visar hur du använder Azure CLI för att hämta, sätta och uppdatera åtkomstkontrolllistorna (ACL) för kataloger och filer.

Nya barnobjekt ärver automatiskt ACL:er. Men du kan också lägga till, uppdatera och ta bort ACL:er rekursivt på befintliga barnobjekt utan att göra dessa ändringar individuellt för varje barnobjekt.

Referens | Exempel | Ge feedback

Förutsättningar

  • En Azure-prenumeration. Mer information finns i Hämta kostnadsfri utvärderingsversion av Azure.

  • Ett lagringskonto som har hierarkiskt namnområde aktiverat. För instruktioner, se Skapa ett lagringskonto som har en hierarkisk namnrymd.

  • Azure CLI-version 2.14.0 eller senare.

  • En av följande säkerhetsbehörigheter:

    • En provisionerad Microsoft Entra ID-säkerhetsprincip som tilldelas rollen Storage Blob Data Owner, begränsad till målcontainern, lagringskontot, föräldraresursgruppen eller prenumerationen.

    • Ägande användare av målcontainern eller katalogen som du planerar att tillämpa ACL-inställningar på. För att sätta ACL:er rekursivt inkluderar denna användare alla underordnade objekt i målbehållaren eller katalogen.

Kontrollera att du har rätt version av Azure CLI installerad

  1. Öppna Azure Cloud Shell, eller om du installerat Azure CLI lokalt, öppna en kommandokonsolapplikation som Windows PowerShell.

  2. Kontrollera att den version av Azure CLI som du har installerat är 2.14.0 eller högre med hjälp av följande kommando.

     az --version
    

    Om din version av Azure CLI är lägre än 2.14.0, installera en senare version. Mer information finns i Installera Azure CLI.

Ansluta till kontot

  1. Om du använder Azure CLI lokalt kör du inloggningskommandot.

    az login
    

    Om CLI kan öppna din standardwebbläsare, öppnar den webbläsaren och laddar en Azure-inloggningssida.

    Annars öppnar du en webbläsarsida på https://aka.ms/devicelogin och anger auktoriseringskoden som visas i terminalen. Logga sedan in med dina kontoautentiseringsuppgifter i webbläsaren.

    Mer information om olika autentiseringsmetoder finns i Auktorisera åtkomst till blob- eller ködata med Azure CLI.

  2. Om din identitet är kopplad till mer än en prenumeration och du inte blir ombedd att välja prenumerationen, ställ in din aktiva prenumeration till prenumerationen på det lagringskonto du vill använda. I det här exemplet ersätter du <subscription-id> platshållarvärdet med ID:t för din prenumeration.

    az account set --subscription <subscription-id>
    

Hämta åtkomstkontrollistor (ACL:er)

Hämta ACL för en katalog med kommandot az storage fs access show.

Det här exemplet hämtar ACL:en för en katalog och skriver sedan ut ACL:en till konsolen.

az storage fs access show -p my-directory -f my-container --account-name mystorageaccount --auth-mode login

Hämta åtkomstbehörigheterna för en fil med kommandot az storage fs access show .

Det här exemplet hämtar ACL:en för en fil och skriver sedan ut ACL:en till konsolen.

az storage fs access show -p my-directory/upload.txt -f my-container --account-name mystorageaccount --auth-mode login

Följande bild visar utdata när du har hämtat ACL för en katalog.

Skärmdump av konsolens utdata som visar ACL för en katalog i Azure Data Lake Storage.

I det här exemplet har den ägande användaren läs-, skriv- och körningsbehörigheter. Ägandegruppen har endast läs- och exekveringsrättigheter. Mer information om åtkomstkontrollistor finns i Åtkomstkontroll i Azure Data Lake Storage.

Konfigurera ACL

När du ställer in en ACL ersätter du hela ACL:en, inklusive alla dess poster. Om du vill ändra behörighetsnivån för ett säkerhetsobjekt eller lägga till ett nytt säkerhetsobjekt i ACL:n utan att påverka andra befintliga poster bör du uppdatera ACL:en i stället. Information om hur du uppdaterar en ACL i stället för att ersätta den finns i avsnittet Uppdatera ACL:er i den här artikeln.

Om du väljer att ange ACL måste du lägga till en post för den ägande användaren, en post för ägande gruppen och en post för alla andra användare. Mer information om den ägande användaren, ägande gruppen och alla andra användare finns i Användare och identiteter.

Det här avsnittet visar hur du:

  • Konfigurera en ACL
  • Ange ACL:er rekursivt

Konfigurera en ACL

Använd kommandot az storage fs access set för att ange ACL för en katalog.

Det här exemplet anger ACL på en katalog för den ägande användaren, ägande gruppen eller andra användare och skriver sedan ut ACL:en till konsolen.

az storage fs access set --acl "user::rw-,group::rw-,other::-wx" -p my-directory -f my-container --account-name mystorageaccount --auth-mode login

Det här exemplet anger standard-ACL på en katalog för den ägande användaren, ägande gruppen eller andra användare och skriver sedan ut ACL:en till konsolen.

az storage fs access set --acl "default:user::rw-,group::rw-,other::-wx" -p my-directory -f my-container --account-name mystorageaccount --auth-mode login

Använd kommandot az storage fs access set för att ställa in ACL för en fil.

Det här exemplet anger ACL på en fil för den ägande användaren, ägande gruppen eller andra användare och skriver sedan ut ACL:en till konsolen.

az storage fs access set --acl "user::rw-,group::rw-,other::-wx" -p my-directory/upload.txt -f my-container --account-name mystorageaccount --auth-mode login

Kommentar

För att ställa in ACL för en specifik grupp eller användare, använd deras respektive objekt-ID:n. Till exempel, för att sätta ACL för en grupp, använd group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. För att ställa in ACL för en användare, använd user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Följande bild visar utdata när du har angett ACL för en fil.

Skärmdump av konsolens utdata som visar ACL för en fil efter att den satts i Azure Data Lake Storage.

I det här exemplet har ägande användare och ägande grupp endast läs- och skrivbehörigheter. Alla andra användare har skriv- och körningsbehörigheter. Mer information om åtkomstkontrollistor finns i Åtkomstkontroll i Azure Data Lake Storage.

Ange ACL:er rekursivt

Ange åtkomstkontrollistor rekursivt genom att använda kommandot az storage fs access set-recursive.

I det här exemplet anges ACL för en katalog med namnet my-parent-directory. Dessa poster ger den ägande användaren läs-, skriv- och exekveringsbehörigheter, ger den ägande gruppen endast läs- och exekveringsbehörigheter, och ger alla andra inga åtkomst. Den sista ACL-posten i det här exemplet ger en specifik användare med objekt-ID:t "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" läs- och körningsbehörigheter.

az storage fs access set-recursive --acl "user::rwx,group::r-x,other::---,user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:r-x" -p my-parent-directory/ -f my-container --account-name mystorageaccount --auth-mode login

Kommentar

För att sätta en standard ACL-post, lägg till prefixet default: till varje post. Exempel: default:user::rwx eller default:user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:r-x.

Uppdatera ACL:er

När du uppdaterar en ACL ändrar du ACL:en i stället för att ersätta ACL:en. Du kan till exempel lägga till ett nytt säkerhetsobjekt till ACL utan att påverka andra säkerhetsobjekt som anges i ACL: n. Om du vill ersätta ACL:en i stället för att uppdatera den läser du avsnittet Ange ACL:er i den här artikeln.

Om du vill uppdatera en ACL skapar du ett nytt ACL-objekt med den ACL-post som du vill uppdatera och använder sedan objektet i åtgärden uppdatera ACL. Hämta inte den befintliga ACL:n, ange bara de ACL-poster som ska uppdateras.

Det här avsnittet visar hur du:

  • Uppdatera en ACL
  • Uppdatera ACL:er rekursivt

Uppdatera en ACL

Uppdatera filens ACL med kommandot az storage fs access uppdatera-rekursivt. Azure CLI tillhandahåller endast kommandot update-recursive för uppdateringar. När du riktar in dig på en enskild fil uppdaterar kommandot endast ACL för den filen.

I det här exemplet uppdateras en ACL-post med skrivbehörighet.

az storage fs access update-recursive --acl "user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:rwx" -p my-parent-directory/myfile.txt -f my-container --account-name mystorageaccount --auth-mode login

Om du vill uppdatera ACL för en viss grupp eller användare använder du deras respektive objekt-ID:n. Exempel: group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx eller user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.

Kommentar

Azure CLI stöder inte att uppdatera ACL för en enskild katalog utan att uppdatera ACL för barnenheter. Om du vill uppdatera ACL:en för en katalog utan att ändra ACL:er för alla underordnade objekt i katalogen använder du något av de andra verktygen och SDK:erna som stöds. Se Så här ställer du in ACL:er.

Uppdatera ACL:er rekursivt

Uppdatera ACL rekursivt med hjälp av kommandot az storage fs access update-recursive.

I det här exemplet uppdateras en ACL-post med skrivbehörighet.

az storage fs access update-recursive --acl "user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:rwx" -p my-parent-directory/ -f my-container --account-name mystorageaccount --auth-mode login

Kommentar

För att uppdatera en standard ACL-post, lägg till prefixet default: till varje post. Exempel: default:user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:r-x

Ta bort ACL-listor rekursivt

Du kan ta bort en eller flera ACL-poster rekursivt. För att ta bort en ACL-post, skapa ett nytt ACL-objekt för den ACL-post du vill ta bort, och använd sedan det objektet i funktionen ta bort ACL. Hämta inte den befintliga ACL:en, ange bara de ACL-poster som ska tas bort.

Ta bort ACL-poster genom att använda kommandot az storage fs access remove-rekursiv.

Det här exemplet tar bort en ACL-post från containerns rotkatalog.

az storage fs access remove-recursive --acl "user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -p my-parent-directory/ -f my-container --account-name mystorageaccount --auth-mode login

Kommentar

För att ta bort en standardpost i en ACL, lägg till prefixet default: framför varje post. Exempel: default:user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Återhämtning från fel

Du kan stöta på körnings- eller behörighetsfel när du ändrar ACL:er rekursivt. Starta om processen från början vid körningsfel. Behörighetsfel kan uppstå om säkerhetschefen inte har tillräcklig behörighet för att ändra ACL för en katalog eller fil i kataloghierarkin du ändrar. Åtgärda behörighetsproblemet och välj sedan att antingen återuppta processen från felpunkten med hjälp av en fortsättningstoken eller starta om processen från början. Du behöver inte använda fortsättningstoken om du föredrar att starta om från början. Du kan använda ACL-uppgifter igen utan någon negativ inverkan.

Om ett fel inträffar, returnera en fortsättningstoken genom att sätta parametern --continue-on-failure till false. När du har åtgärdat felen kan du återuppta processen från felpunkten genom att köra kommandot igen och sedan ange parametern --continuation till fortsättningstoken.

az storage fs access set-recursive --acl "user::rw-,group::r-x,other::---" --continue-on-failure false --continuation xxxxxxx -p my-parent-directory/ -f my-container --account-name mystorageaccount --auth-mode login  

För att säkerställa att processen slutförs utan avbrott anger du parametern --continue-on-failure till true.

az storage fs access set-recursive --acl "user::rw-,group::r-x,other::---" --continue-on-failure true --continuation xxxxxxx -p my-parent-directory/ -f my-container --account-name mystorageaccount --auth-mode login  

Bästa praxis

Det här avsnittet innehåller några riktlinjer för bästa praxis för att ställa in ACL:er rekursivt.

Hantera körningsfel

Ett körningsfel kan inträffa av många orsaker (till exempel ett avbrott eller ett problem med klientanslutningen). Om du stöter på ett körningsfel startar du om den rekursiva ACL-processen. ACL:er kan tillämpas på objekt igen utan att orsaka en negativ inverkan.

Hantera åtkomstfel (403)

Om du stöter på ett undantag för åtkomstkontroll när du kör en rekursiv ACL-process kanske din AD-säkerhetsprincip inte har tillräcklig behörighet för att tillämpa en ACL på ett eller flera underordnade objekt i kataloghierarkin. När ett behörighetsfel inträffar stoppas processen och en fortsättningstoken tillhandahålls. Åtgärda behörighetsproblemet och använd sedan fortsättningstoken för att bearbeta den återstående datauppsättningen. Katalogerna och filerna som redan har bearbetats behöver inte bearbetas igen. Du kan också välja att starta om den rekursiva ACL-processen. ACL:er kan tillämpas på objekt igen utan att orsaka en negativ inverkan.

Referenser

Vi rekommenderar att du etablerar ett Microsoft Entra-säkerhetsobjekt som har tilldelats rollen Storage Blob Data Owner i omfånget för mållagringskontot eller containern.

Prestanda

För att minska svarstiden rekommenderar vi att du kör den rekursiva ACL-processen på en virtuell Azure-dator (VM) som finns i samma region som ditt lagringskonto.

ACL-gränser

Det maximala antalet ACL:er som du kan använda för en katalog eller fil är 32 åtkomst-ACL:er och 32 standard-ACL:er. Mer information finns i Åtkomstkontroll i Azure Data Lake Storage Gen2.

Se även