Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł pokazuje, jak użyć PowerShella do pobierania, ustawiania i aktualizacji list kontroli dostępu (ACL) katalogów i plików.
Nowe elementy podrzędne, które tworzysz w katalogu nadrzędnym, automatycznie dziedziczą listy ACL. Możesz jednak także dodawać, aktualizować i usuwać ACL rekurencyjnie na istniejących elementach potomnych katalogu nadrzędnego, bez wprowadzania tych zmian osobno dla każdego elementu potomnego.
Dokumentacja | — prześlij opinię
Wymagania wstępne
Subskrypcja platformy Azure. Aby uzyskać więcej informacji, zobacz Uzyskiwanie bezpłatnej wersji próbnej platformy Azure.
Konto magazynu z włączoną hierarchiczną strukturą przestrzeni nazw (HNS). Postępuj zgodnie z tymi instrukcjami, aby je utworzyć.
Jedno z poniższych uprawnień bezpieczeństwa:
Skonfigurowany podmiot zabezpieczeń Microsoft Entra ID security principal, któremu przypisano rolę Storage Blob Data Owner, o zakresie obejmującym kontener docelowy, konto magazynu, nadrzędną grupę zasobów lub subskrypcję.
Użytkownik będący właścicielem kontenera docelowego lub katalogu, do którego planujesz zastosować ustawienia listy ACL. Aby rekursywnie ustawić listy ACL, dla tego użytkownika uwzględniane są wszystkie elementy podrzędne w kontenerze lub katalogu docelowym.
Zainstaluj moduł programu PowerShell
Sprawdź za pomocą następującego polecenia, czy zainstalowana wersja programu PowerShell to
5.1lub nowsza.echo $PSVersionTable.PSVersion.ToString()Aby zaktualizować swoją wersję PowerShell, zobacz Upgrading existing Windows PowerShell.
Zainstaluj moduł Az.Storage .
Install-Module Az.Storage -Repository PSGallery -ForceAby uzyskać więcej informacji o instalacji modułów PowerShell, zobacz Install the Azure PowerShell module.
Nawiązywanie połączenia z kontem
Otwórz okno polecenia programu Windows PowerShell, a następnie zaloguj się do subskrypcji platformy Azure za pomocą polecenia Connect-AzAccount i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.
Connect-AzAccountJeśli Twoja tożsamość jest powiązana z więcej niż jedną subskrypcją i nie zostaniesz poproszony o wybór subskrypcji, ustaw aktywną subskrypcję na subskrypcję konta magazynowego, którego chcesz używać. W tym przykładzie zamień symbol zastępczy
<subscription-id>na identyfikator swojej subskrypcji.Select-AzSubscription -SubscriptionId <subscription-id>Pobierz kontekst konta przechowywania.
$ctx = New-AzStorageContext -StorageAccountName '<storage-account-name>' -UseConnectedAccount
Pobierz listy ACL
Pobierz listę ACL katalogu lub pliku przy użyciu polecenia cmdlet Get-AzDataLakeGen2Item .
W Azure Data Lake Storage kontener nazywany jest również systemem plików. Parametr -FileSystem użyty w poniższych przykładach przyjmuje nazwę twojego kontenera.
Poniższy przykład pobiera listę ACL katalogu głównego kontenera, a następnie wyświetla ją w konsoli.
$filesystemName = "my-file-system"
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL
Poniższy przykład pobiera listę ACL katalogu, a następnie wyświetla listę ACL w konsoli.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL
Poniższy przykład pobiera listę ACL dla pliku, a następnie wyświetla ją w konsoli.
$filePath = "my-directory/upload.txt"
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL
Na poniższej ilustracji przedstawiono dane wyjściowe po otrzymaniu listy ACL katalogu.
W tym przykładzie użytkownik, który jest właścicielem, ma uprawnienia do odczytu, zapisu i wykonywania. Grupa będąca właścicielem ma tylko uprawnienia do odczytu i uruchamiania. Aby uzyskać więcej informacji na temat list kontroli dostępu, zobacz Kontrola dostępu w usłudze Azure Data Lake Storage.
Ustaw ACL
Gdy ustawiasz listę ACL, zastępujesz całą listę ACL wraz ze wszystkimi jej wpisami. Jeśli chcesz zmienić poziom uprawnień zasady bezpieczeństwa lub dodać nową zasadę bezpieczeństwa do ACL bez wpływu na inne istniejące wpisy, zaktualizuj zamiast tego ACL. Aby zaktualizować listę ACL zamiast jej zastąpić, zobacz sekcję Aktualizowanie list ACL w tym artykule.
Jeśli zdecydujesz się ustawić listę ACL, musisz dodać wpis dla użytkownika będącego właścicielem, wpis dla grupy właścicieli i wpis dla wszystkich innych użytkowników. Aby dowiedzieć się więcej na temat użytkownika, grupy właścicieli i wszystkich innych użytkowników, zobacz Użytkownicy i tożsamości.
W tej sekcji pokazano, jak wykonać następujące działania:
- Ustaw ACL
- Cykliczne ustawianie list kontroli dostępu
Ustaw ACL
Użyj polecenia cmdlet Set-AzDataLakeGen2ItemAclObject, aby utworzyć listę ACL dla użytkownika, grupy właścicieli lub innych użytkowników. Następnie użyj cmdlet Update-AzDataLakeGen2Item, aby zatwierdzić listę kontroli dostępu (ACL).
W tym przykładzie lista ACL jest ustawiana w katalogu głównym kontenera dla użytkownika, grupy właścicieli lub innych użytkowników, a następnie drukuje listę ACL do konsoli.
$filesystemName = "my-file-system"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission -wx -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Acl $acl
$filesystem = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName
$filesystem.ACL
W tym przykładzie ACL jest ustawiana w katalogu dla użytkownika właściciela, grupy właścicielskiej lub innych użytkowników, a następnie wyświetlana w konsoli.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission -wx -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$dir = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname
$dir.ACL
Uwaga
Aby ustawić domyślny wpis ACL, użyj parametru -DefaultScope podczas uruchamiania komendy Set-AzDataLakeGen2ItemAclObject . Na przykład: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope.
W tym przykładzie lista ACL jest ustawiana w pliku dla użytkownika, który jest właścicielem grupy lub innych użytkowników, a następnie wyświetla listę ACL w konsoli.
$filesystemName = "my-file-system"
$filePath = "my-directory/upload.txt"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rw-
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission rw- -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission "-wx" -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath -Acl $acl
$file = Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $filePath
$file.ACL
Uwaga
Aby ustawić ACL określonej grupy lub użytkownika, jednostki usługi lub tożsamości zarządzanej, użyj odpowiednich identyfikatorów ich obiektów. Aby na przykład ustawić ACL grupy, użyj polecenia group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Aby ustawić ACL użytkownika, użyj user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Na poniższej ilustracji przedstawiono dane wyjściowe po ustawieniu listy ACL pliku.
W tym przykładzie właściciel i grupa będąca właścicielem mają uprawnienia tylko do odczytu i zapisu. Wszyscy inni użytkownicy mają uprawnienia do zapisu i wykonywania. Aby uzyskać więcej informacji na temat list kontroli dostępu, zobacz Kontrola dostępu w usłudze Azure Data Lake Storage.
Cykliczne ustawianie list kontroli dostępu
Ustaw listy kontroli dostępu rekursywnie przy użyciu polecenia cmdlet Set-AzDataLakeGen2AclRecursive.
Ten przykład ustawia ACL katalogu o nazwie my-parent-directory. Te wpisy przyznają właścicielowi uprawnienia do odczytu, zapisu i wykonywania, grupie właściciela jedynie uprawnienia do odczytu i wykonywania, a wszystkim pozostałym nie przyznają żadnego dostępu. Ostatni wpis na liście ACL w tym przykładzie przyznaje określonemu użytkownikowi o identyfikatorze obiektu "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" uprawnienia do odczytu i wykonywania.
$filesystemName = "my-container"
$dirname = "my-parent-directory/"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType group -Permission r-x -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType other -Permission "---" -InputObject $acl
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission r-x -InputObject $acl
Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
Uwaga
Aby ustawić domyślny wpis ACL, użyj parametru -DefaultScope podczas uruchamiania komendy Set-AzDataLakeGen2ItemAclObject . Na przykład: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -Permission rwx -DefaultScope.
Aby zobaczyć przykład ustawiający listy kontroli dostępu (ACL) rekursywnie, partiami przy określonym rozmiarze partii, zobacz referencyjny artykuł Set-AzDataLakeGen2AclRecursive.
Zaktualizuj listy ACL
Podczas aktualizacji listy ACL należy ją zmodyfikować, a nie zastępować. Można na przykład dodać nowego podmiotu zabezpieczeń do listy ACL bez wpływu na inne podmioty zabezpieczeń wymienione na liście ACL. Aby zastąpić listę ACL zamiast ją zaktualizować, zobacz sekcję Ustawianie list ACL w tym artykule.
W tej sekcji pokazano, jak wykonać następujące działania:
- Zaktualizuj ACL
- Rekursywne aktualizowanie list ACL
Zaktualizuj ACL
Najpierw pobierz ACL. Następnie użyj polecenia cmdlet Set-AzDataLakeGen2ItemAclObject, aby dodać lub zaktualizować wpis ACL. Użyj polecenia cmdlet Update-AzDataLakeGen2Item, aby zatwierdzić listę kontroli dostępu.
W tym przykładzie jest tworzona lub aktualizowana lista ACL w katalogu dla użytkownika.
$filesystemName = "my-file-system"
$dirname = "my-directory/"
$acl = (Get-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname).ACL
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID aaaaaaaa-bbbb-cccc-1111-222222222222 -Permission r-x -InputObject $acl
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
Uwaga
Aby zaktualizować domyślny wpis ACL, użyj parametru -DefaultScope podczas uruchamiania polecenia Set-AzDataLakeGen2ItemAclObject . Na przykład: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityID aaaaaaaa-bbbb-cccc-1111-222222222222 -Permission r-x -DefaultScope.
Rekursywne aktualizowanie list ACL
Aktualizuj listy ACL cyklicznie przy użyciu polecenia cmdlet Update-AzDataLakeGen2AclRecursive .
W tym przykładzie zaktualizowano wpis listy kontroli dostępu (ACL) z uprawnieniami do zapisu.
$filesystemName = "my-container"
$dirname = "my-parent-directory/"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission rwx
Update-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
Uwaga
Aby ustawić ACL określonej grupy lub użytkownika, jednostki usługi lub tożsamości zarządzanej, użyj odpowiednich identyfikatorów ich obiektów. Aby na przykład ustawić ACL grupy, użyj polecenia group:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Aby ustawić ACL użytkownika, użyj user:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
Aby zobaczyć przykład aktualizacji list ACL rekurencyjnie w partiach przez określenie rozmiaru partii, zobacz artykuł referencyjny Update-AzDataLakeGen2AclRecursive.
Usuwanie wpisów listy ACL
W tej sekcji pokazano, jak wykonać następujące działania:
- Usuwanie wpisu listy ACL
- Rekursywnie usuwać wpisy listy ACL
Usuwanie wpisu listy ACL
W tym przykładzie usunięto wpis z istniejącej listy ACL. Ponownie używa kontekstu konta magazynu $ctx oraz zmiennych $acl, $filesystemName i $dirname, zdefiniowanych we wcześniejszych sekcjach tego artykułu.
$id = "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# Create the new ACL object.
[Collections.Generic.List[System.Object]]$aclnew =$acl
foreach ($a in $aclnew)
{
if ($a.AccessControlType -eq "User" -and $a.DefaultScope -eq $false -and $a.EntityId -eq $id)
{
$aclnew.Remove($a);
break;
}
}
Update-AzDataLakeGen2Item -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $aclnew
Rekursywnie usuwać wpisy listy ACL
Można usunąć co najmniej jeden wpis listy ACL rekursywnie. Aby usunąć wpis ACL, stwórz nowy obiekt ACL dla wpisu, który chcesz usunąć, a następnie użyj tego obiektu w operacji usuwania ACL. Nie pobieraj istniejącej listy ACL, po prostu podaj wpisy ACL do usunięcia.
Usuń wpisy ACL przy użyciu cmdletu Remove-AzDataLakeGen2AclRecursive.
W tym przykładzie usunięto wpis listy ACL z katalogu głównego kontenera.
$filesystemName = "my-container"
$userID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---"
Remove-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Acl $acl
Uwaga
Aby usunąć domyślny wpis ACL, użyj parametru -DefaultScope podczas uruchamiania polecenia Set-AzDataLakeGen2ItemAclObject . Na przykład: $acl = Set-AzDataLakeGen2ItemAclObject -AccessControlType user -EntityId $userID -Permission "---" -DefaultScope.
Aby zobaczyć przykład, który rekursywnie usuwa listy kontrolne dostępu (ACL) w partiach przez określenie rozmiaru partii, zobacz artykuł referencyjny Remove-AzDataLakeGen2AclRecursive.
Odzyskiwanie po awariach
Podczas cyklicznego modyfikowania list ACL mogą wystąpić błędy środowiska uruchomieniowego lub uprawnień. Przykłady w tej sekcji ponownie wykorzystują kontekst konta magazynu $ctx oraz zmienne $filesystemName, $dirname i $acl zdefiniowane we wcześniejszych sekcjach tego artykułu.
W przypadku błędów środowiska uruchomieniowego uruchom ponownie proces od początku. Błędy uprawnień mogą wystąpić, jeśli podmiot bezpieczeństwa nie ma wystarczających uprawnień, aby zmodyfikować ACL katalogu lub pliku znajdującego się w hierarchii katalogów, którą modyfikujesz. Rozwiać problem z uprawnieniami, a następnie wybrać wznowienie procesu od momentu awarii za pomocą tokena kontynuacji lub wznowienie procesu od początku. Jeśli wolisz ponownie uruchomić od początku, nie musisz używać tokenu kontynuacji. Możesz ponownie zastosować wpisy ACL bez żadnych negatywnych skutków.
Ten przykład zwraca wyniki do zmiennej, a następnie przesyła nieudane wpisy do sformatowanej tabeli.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl
$result
$result.FailedEntries | ft
Na podstawie danych wyjściowych tabeli można naprawić wszelkie błędy uprawnień, a następnie wznowić wykonywanie przy użyciu tokenu kontynuacji.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinuationToken $result.ContinuationToken
$result
Aby zobaczyć przykład ustawiający listy kontroli dostępu (ACL) rekursywnie, partiami przy określonym rozmiarze partii, zobacz referencyjny artykuł Set-AzDataLakeGen2AclRecursive.
Jeśli chcesz, aby proces przebiegał bez przerw przez błędy uprawnień, możesz go tak skonfigurować.
W tym przykładzie użyto parametru ContinueOnFailure , aby wykonanie było kontynuowane nawet wtedy, gdy operacja napotka błąd uprawnień.
$result = Set-AzDataLakeGen2AclRecursive -Context $ctx -FileSystem $filesystemName -Path $dirname -Acl $acl -ContinueOnFailure
echo "[Result Summary]"
echo "TotalDirectoriesSuccessfulCount: `t$($result.TotalDirectoriesSuccessfulCount)"
echo "TotalFilesSuccessfulCount: `t`t`t$($result.TotalFilesSuccessfulCount)"
echo "TotalFailureCount: `t`t`t`t`t$($result.TotalFailureCount)"
echo "FailedEntries:"$($result.FailedEntries | ft)
Aby zobaczyć przykład ustawiający listy kontroli dostępu (ACL) rekursywnie, partiami przy określonym rozmiarze partii, zobacz referencyjny artykuł Set-AzDataLakeGen2AclRecursive.
Najlepsze rozwiązania
Ta sekcja zawiera wskazówki dotyczące najlepszych praktyk rekursywnego ustawiania listy ACL.
Obsługa błędów środowiska uruchomieniowego
Błąd środowiska uruchomieniowego może wystąpić z wielu powodów (na przykład: awaria lub problem z łącznością klienta). Jeśli wystąpi błąd środowiska uruchomieniowego, uruchom ponownie proces ACL. ACL można ponownie zastosować do elementów bez negatywnych skutków.
Obsługa błędów uprawnień (403)
Jeśli wystąpi wyjątek kontroli dostępu podczas uruchamiania rekursywnego procesu ACL, podmiot zabezpieczeń AD może nie mieć wystarczających uprawnień do zastosowania ACL do co najmniej jednego elementu podrzędnego w hierarchii katalogów. Po wystąpieniu błędu uprawnień proces zostanie zatrzymany i zostanie udostępniony token kontynuacji. Rozwiąż problem z uprawnieniami, a następnie użyj tokenu kontynuacji, aby przetworzyć pozostały zestaw danych. Katalogi i pliki, które zostały już pomyślnie przetworzone, nie będą musiały zostać ponownie przetworzone. Możesz również ponownie uruchomić proces rekurencyjny ACL. ACL można ponownie zastosować do elementów bez negatywnych skutków.
Dane uwierzytelniające
Zalecamy utworzenie podmiotu zabezpieczeń Microsoft Entra, który ma przypisaną rolę Właściciela danych obiektu blob usługi Storage w zakresie docelowego konta magazynu lub kontenera.
Wydajność
Aby zmniejszyć opóźnienia, zalecamy uruchomienie procesu rekurencyjnego ACL na maszynie wirtualnej Azure, która znajduje się w tym samym regionie co konto magazynowe.
Limity listy ACL
Maksymalna liczba list ACL, które można zastosować do katalogu lub pliku, to 32 listy ACL dostępu i 32 domyślne listy ACL. Aby uzyskać więcej informacji, zobacz Kontrola dostępu w usłudze Azure Data Lake Storage Gen2.