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. Logowanie się do platformy Azure
Użyj polecenia az login i postępuj zgodnie z instrukcjami wyświetlanymi, aby zalogować się do katalogu jako administrator dostępu użytkowników lub właściciel.
az loginUżyj az account show, aby uzyskać identyfikator twoich subskrypcji.
az account showOkreśl identyfikator subskrypcji i zainicjuj zmienną.
subscriptionId="<subscriptionId>"
Krok 2. Tworzenie użytkownika
Użyj polecenia az ad user create do utworzenia użytkownika lub znalezienia istniejącego użytkownika. W tym samouczku użyto narzędzia Chandra jako przykładu.
Zainicjuj zmienną identyfikatora obiektu użytkownika.
userObjectId="<userObjectId>"
Krok 3. Konfigurowanie magazynu
Dostęp do Blob Storage można autoryzować z poziomu Azure CLI przy użyciu poświadczeń Microsoft Entra lub klucza dostępu do konta magazynu. W tym artykule pokazano, jak autoryzować operacje magazynu obiektów blob przy użyciu identyfikatora Entra firmy Microsoft. Aby uzyskać więcej informacji, zobacz Szybki start: tworzenie, pobieranie i wyświetlanie listy obiektów blob za pomocą interfejsu wiersza polecenia platformy Azure
Użyj az storage account, aby utworzyć konto magazynu 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 az storage container, aby utworzyć nowy kontener blob na koncie magazynowania i ustawić poziom dostępu anonimowego na Prywatny (bez dostępu anonimowego).
Użyj az storage blob upload, 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 4. 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 powłoce Bash, jeśli funkcja rozszerzania historii jest włączona, możesz zobaczyć komunikat
bash: !: event not foundz powodu wykrzyknika (!). W takim przypadku można wyłączyć rozszerzenie historii za pomocą poleceniaset +H. Aby ponownie włączyć rozszerzenie historii, użyj poleceniaset -H.W powłoce Bash znak dolara ($) ma specjalne znaczenie dla ekspansji. Jeśli warunek zawiera znak dolara ($), może być konieczne poprzedzenie go ukośnikiem odwrotnym (\). Na przykład ten warunek używa znaków dolara do wyznaczenia nazwy klucza tagu. Aby uzyskać więcej informacji na temat zasad użycia cudzysłowów w powłoce Bash, zobacz Podwójne cudzysłowy.
Zainicjuj wersję i opis warunku.
conditionVersion="2.0" description="Read access to blobs with the tag Project=Cascade"Użyj az role assignment create, aby przypisać rolę Czytelnik danych obiektu blob Storage z warunkiem dla użytkownika w zakresie grupy zasobów.
az role assignment create --assignee-object-id $userObjectId --scope $scope --role $roleDefinitionId --description "$description" --condition "$condition" --condition-version $conditionVersionOto przykład danych wyjściowych:
{ "canDelegate": null, "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'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }
Krok 5. (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 6. Testowanie warunku
Otwórz nowe okno polecenia.
Użyj az login, aby zalogować się jako Chandra.
az loginZainicjuj następujące zmienne przy użyciu użytych nazw.
storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameBaker="<blobNameBaker>" blobNameCascade="<blobNameCascade>"Użyj az storage blob show, aby odczytać właściwości pliku dla projektu Baker.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameBaker --auth-mode loginOto przykład danych wyjściowych. Zwróć uwagę, że nie można odczytać pliku z powodu dodanego warunku.
You do not have the required permissions needed to perform this operation. Depending on your operation, you may need to be assigned one of the following roles: "Storage Blob Data Contributor" "Storage Blob Data Reader" "Storage Queue Data Contributor" "Storage Queue Data Reader" If you want to use the old authentication method and allow querying for the right account key, please use the "--auth-mode" parameter and "key" value.Przeczytaj właściwości pliku dla projektu Cascade.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameCascade --auth-mode loginOto przykład danych wyjściowych. Zwróć uwagę, że można odczytać właściwości pliku, ponieważ ma on tag Project=Cascade.
{ "container": "<containerName>", "content": "", "deleted": false, "encryptedMetadata": null, "encryptionKeySha256": null, "encryptionScope": null, "isAppendBlobSealed": null, "isCurrentVersion": null, "lastAccessedOn": null, "metadata": {}, "name": "<blobNameCascade>", "objectReplicationDestinationPolicy": null, "objectReplicationSourceProperties": [], "properties": { "appendBlobCommittedBlockCount": null, "blobTier": "Hot", "blobTierChangeTime": null, "blobTierInferred": true, "blobType": "BlockBlob", "contentLength": 7, "contentRange": null, ... }
Krok 7. (Opcjonalnie) Edytowanie warunku
W innym oknie poleceń użyj az role assignment list, aby uzyskać informacje o przypisaniach ról, które dodałeś.
az role assignment list --assignee $userObjectId --resource-group $resourceGroupDane wyjściowe są podobne do następujących:
[ { "canDelegate": null, "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'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalName": "chandra@contoso.com", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "roleDefinitionName": "Storage Blob Data Reader", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" } ]Utwórz plik JSON z następującym formatem i zaktualizuj właściwości
conditionorazdescription.{ "canDelegate": null, "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'))", "conditionVersion": "2.0", "description": "Read access to blobs with the tag Project=Cascade or Project=Baker", "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}", "name": "{roleAssignmentId}", "principalId": "{userObjectId}", "principalName": "chandra@contoso.com", "principalType": "User", "resourceGroup": "{resourceGroup}", "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1", "roleDefinitionName": "Storage Blob Data Reader", "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}", "type": "Microsoft.Authorization/roleAssignments" }Użyj az role assignment update (polecenie), aby zaktualizować warunek przypisania roli.
az role assignment update --role-assignment "./path/roleassignment.json"
Krok 8. Czyszczenie zasobów
Użyj az role assignment delete, aby usunąć dodane przypisanie i warunek roli.
az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroupUsuń utworzone konto pamięci masowej.
Usuń utworzonego użytkownika.