Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W większości przypadków przypisanie roli przyznaje uprawnienia potrzebne do zasobów platformy Azure. Jednak w niektórych przypadkach możesz zapewnić bardziej szczegółową kontrolę dostępu, dodając warunek przypisania roli.
W tym poradniku nauczysz się, jak:
- Dodawanie warunku do przypisania roli
- Ograniczanie dostępu do obiektów blob na podstawie tagu indeksu obiektów blob
Ważne
Kontrola dostępu oparta na atrybutach platformy Azure (Azure ABAC) jest ogólnie dostępna (GA) do kontrolowania dostępu do usług Azure Blob Storage, Azure Data Lake Storage Gen2 i Azure Queues przy użyciu request, resource, environment i principal w obu poziomach wydajności konta magazynowego: standardowym i premium. Obecnie lista obiektów blob zawiera atrybuty żądania, a także atrybuty żądania migawki dla hierarchicznej przestrzeni nazw, które są w wersji zapoznawczej. Aby uzyskać pełne informacje o stanie funkcji ABAC dla usługi Azure Storage, zobacz Stan warunkowych funkcji w usłudze Azure Storage.
Zobacz dodatkowe warunki użytkowania dla wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta, wersji zapoznawczej lub w inny sposób nie zostały jeszcze wydane w wersji ogólnodostępnej.
Wymagania wstępne
Aby uzyskać informacje o wymaganiach wstępnych dotyczących dodawania lub edytowania warunków przypisywania ról, zobacz Warunki wstępne.
Warunek
W tym samouczku ograniczysz dostęp do blobów z określonym tagiem. Na przykład dodasz warunek do przypisania roli, aby usługa Chandra mogła odczytywać tylko pliki z tagiem Project=Cascade.
Jeśli Chandra próbuje odczytać blob bez etykiety Project=Cascade, dostęp jest zabroniony.
Oto jak wygląda warunek w kodzie:
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
AND NOT
SubOperationMatches{'Blob.List'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'
)
)
Krok 1. Instalowanie wymagań wstępnych
Otwórz okno programu PowerShell.
Użyj polecenia Get-InstalledModule , aby sprawdzić wersje zainstalowanych modułów.
Get-InstalledModule -Name Az Get-InstalledModule -Name Az.Resources Get-InstalledModule -Name Az.StorageW razie potrzeby użyj polecenia Install-Module , aby zainstalować wymagane wersje modułów Az, Az.Resources i Az.Storage .
Install-Module -Name Az -RequiredVersion 5.5.0 Install-Module -Name Az.Resources -RequiredVersion 3.2.1 Install-Module -Name Az.Storage -RequiredVersion 2.5.2-preview -AllowPrereleaseZamknij i otwórz ponownie program PowerShell, aby odświeżyć sesję.
Krok 2. Logowanie się do platformy Azure
Użyj polecenia Connect-AzAccount i postępuj zgodnie z instrukcjami wyświetlanymi, aby zalogować się do katalogu jako administrator dostępu użytkowników lub właściciel.
Connect-AzAccountUżyj polecenia Get-AzSubscription , aby wyświetlić listę wszystkich subskrypcji.
Get-AzSubscriptionOkreśl identyfikator subskrypcji i zainicjuj zmienną.
$subscriptionId = "<subscriptionId>"Ustaw subskrypcję jako aktywną subskrypcję.
$context = Get-AzSubscription -SubscriptionId $subscriptionId Set-AzContext $context
Krok 3. Tworzenie użytkownika
Użyj New-MgUser, aby utworzyć użytkownika lub znaleźć istniejącego użytkownika. W tym samouczku użyto narzędzia Chandra jako przykładu.
Zainicjuj zmienną identyfikatora obiektu użytkownika.
$userObjectId = "<userObjectId>"
Krok 4. Konfigurowanie magazynu
Użyj New-AzStorageAccount, aby utworzyć konto pamięci zgodne z funkcją indeksowania obiektów BLOB. Aby uzyskać więcej informacji, zobacz Zarządzanie danymi obiektów blob platformy Azure i ich znajdowanie za pomocą tagów indeksu.
Użyj New-AzStorageContainer aby utworzyć nowy kontener obiektów blob na koncie magazynu i ustawić poziom dostępu anonimowego na Prywatny (bez dostępu anonimowego).
Użyj Set-AzStorageBlobContent aby przekazać plik tekstowy do kontenera.
Dodaj następujący tag indeksu obiektów blob do pliku tekstowego. Aby uzyskać więcej informacji, zobacz Use blob index tags to manage and find data on Azure Blob Storage (Używanie tagów indeksu obiektów blob do zarządzania danymi i znajdowania ich w usłudze Azure Blob Storage).
Uwaga / Notatka
Obiekty blob obsługują również możliwość przechowywania dowolnych metadanych klucz-wartość zdefiniowanych przez użytkownika. Chociaż metadane są podobne do tagów indeksu obiektów blob, należy używać tagów indeksu obiektów blob z warunkami.
Klawisz Wartość Projekt Kaskada Przekaż drugi plik tekstowy do kontenera.
Dodaj następujący tag indeksu obiektów blob do drugiego pliku tekstowego.
Klawisz Wartość Projekt Piekarz Zainicjuj następujące zmienne przy użyciu użytych nazw.
$resourceGroup = "<resourceGroup>" $storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameCascade = "<blobNameCascade>" $blobNameBaker = "<blobNameBaker>"
Krok 5. Przypisywanie roli z warunkiem
Zainicjuj zmienne roli Czytelnik danych Blob Storage.
$roleDefinitionName = "Storage Blob Data Reader" $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"Zainicjuj zakres grupy zasobów.
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"Zainicjuj warunek.
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade'))"W programie PowerShell, jeśli warunek zawiera znak dolara ($), musisz go poprzedzić znakiem backtick (`). Na przykład ten warunek używa znaków dolara do wyznaczenia nazwy klucza tagu.
Zainicjuj wersję i opis warunku.
$conditionVersion = "2.0" $description = "Read access to blobs with the tag Project=Cascade"Użyj New-AzRoleAssignment aby przypisać rolę Czytelnik danych Blob Storage z warunkiem dla użytkownika w zakresie grupy zasobów.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersionOto przykład danych wyjściowych:
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso ft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : Chandra SignInName : chandra@contoso.com RoleDefinitionName : Storage Blob Data Reader RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1 ObjectId : <userObjectId> ObjectType : User CanDelegate : False Description : Read access to blobs with the tag Project=Cascade ConditionVersion : 2.0 Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/co ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))
Krok 6. (Opcjonalnie) Wyświetlanie warunku w witrynie Azure Portal
W witrynie Azure Portal otwórz grupę zasobów.
Wybierz pozycję Kontrola dostępu (IAM).
Na karcie Przypisania ról znajdź przypisanie roli.
W kolumnie Warunek wybierz pozycję Widok/Edytuj , aby wyświetlić warunek.
Krok 7. Testowanie warunku
Otwórz nowe okno programu PowerShell.
Użyj polecenia Connect-AzAccount aby zalogować się jako Chandra.
Connect-AzAccountZainicjuj następujące zmienne przy użyciu użytych nazw.
$storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameBaker = "<blobNameBaker>" $blobNameCascade = "<blobNameCascade>"Użyj New-AzStorageContext, aby łatwiej utworzyć określony kontekst do uzyskania dostępu do konta magazynowego.
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountNameUżyj polecenia Get-AzStorageBlob , aby spróbować odczytać plik projektu Baker.
Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtxOto przykład danych wyjściowych. Zwróć uwagę, że nie można odczytać pliku z powodu dodanego warunku.
Get-AzStorageBlob : This request is not authorized to perform this operation using this permission. HTTP Status Code: 403 - HTTP Error Message: This request is not authorized to perform this operation using this permission. ErrorCode: AuthorizationPermissionMismatch ErrorMessage: This request is not authorized to perform this operation using this permission. RequestId: <requestId> Time: Sat, 24 Apr 2021 13:26:25 GMT At line:1 char:1 + Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Con ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Get-AzStorageBlob], StorageException + FullyQualifiedErrorId : StorageException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageBlob CommandPrzeczytaj plik projektu Cascade.
Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtxOto przykład danych wyjściowych. Zwróć uwagę, że możesz odczytać plik, ponieważ ma on tag Project=Cascade.
AccountName: <storageAccountName>, ContainerName: <containerName> Name BlobType Length ContentType LastModified AccessTier SnapshotT ime ---- -------- ------ ----------- ------------ ---------- --------- CascadeFile.txt BlockBlob 7 text/plain 2021-04-24 05:35:24Z Hot
Krok 8. (Opcjonalnie) Edytowanie warunku
W innym oknie programu PowerShell użyj polecenia Get-AzRoleAssignment , aby uzyskać dodane przypisanie roli.
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectIdEdytuj warunek.
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Baker'))"Zainicjuj warunek i opis.
$testRa.Condition = $condition $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"Użyj Set-AzRoleAssignment, aby zaktualizować warunek przypisania roli.
Set-AzRoleAssignment -InputObject $testRa -PassThruOto przykład danych wyjściowych:
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso ft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : Chandra SignInName : chandra@contoso.com RoleDefinitionName : Storage Blob Data Reader RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1 ObjectId : <userObjectId> ObjectType : User CanDelegate : False Description : Read access to blobs with the tag Project=Cascade or Project=Baker ConditionVersion : 2.0 Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/co ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' OR @Resource[Microsoft.S torage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Baker'))
Krok 9. Czyszczenie zasobów
Użyj Remove-AzRoleAssignment aby usunąć przypisanie roli i warunek, które zostały dodane.
Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroupUsuń utworzone konto pamięci masowej.
Usuń utworzonego użytkownika.