Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In den meisten Fällen gewährt eine Rollenzuweisung die Berechtigungen, die Sie für Azure-Ressourcen benötigen. In einigen Fällen sollten Sie jedoch eine genauere Zugriffssteuerung bereitstellen, indem Sie eine Rollenzuweisungsbedingung hinzufügen.
In diesem Tutorial lernen Sie Folgendes:
- Hinzufügen einer Bedingung zu einer Rollenzuweisung
- Einschränken des Zugriffs auf Blobs basierend auf einem Blob-Indextag
Von Bedeutung
Die attributbasierte Zugriffssteuerung (Attribute-Based Access Control, ABAC) in Azure ist allgemein verfügbar, um den Zugriff auf Azure Blob Storage, Azure Data Lake Storage Gen2 und Azure-Warteschlangen mithilfe der Attribute request, resource, environment und principal sowohl auf der standardmäßigen als auch auf der Premium-Speicherkonto-Leistungsstufe zu steuern. Derzeit befinden sich das Anforderungsattribut zum Einschluss des Listenblobs und das Anforderungsattribut von Momentaufnahmen für hierarchische Namespaces in der VORSCHAU. Vollständige Informationen zum Status des ABAC-Features für Azure Storage finden Sie unter Status der Bedingungsfeatures in Azure Storage.
Die zusätzlichen Nutzungsbestimmungen für Microsoft Azure-Vorschauen enthalten rechtliche Bedingungen. Sie gelten für diejenigen Azure-Features, die sich in der Beta- oder Vorschauversion befinden oder aber anderweitig noch nicht zur allgemeinen Verfügbarkeit freigegeben sind.
Voraussetzungen
Informationen zu den Voraussetzungen für das Hinzufügen oder Bearbeiten von Rollenzuweisungsbedingungen finden Sie unter Voraussetzungen für Bedingungen.
Zustand
In dieser Anleitung beschränken Sie den Zugriff auf Blobs mit einem bestimmten Tag. Beispielsweise fügen Sie einer Rollenzuweisung eine Bedingung hinzu, damit Chandra nur Dateien mit dem Tag Project=Cascade lesen kann.

Wenn Chandra versucht, ein Blob ohne das Tag Project=Cascade zu lesen, ist der Zugriff nicht zulässig.

So sieht die Bedingung im Code aus:
(
(
!(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'
)
)
Schritt 1: Anmelden bei Azure
Verwenden Sie den Befehl az login und folgen Sie den Anweisungen, um sich bei Ihrem Verzeichnis als Benutzerzugriffsadministrator oder Besitzer anzumelden.
az loginVerwenden Sie az account show , um die ID Ihrer Abonnements abzurufen.
az account showBestimmen Sie die Abonnement-ID, und initialisieren Sie die Variable.
subscriptionId="<subscriptionId>"
Schritt 2: Erstellen eines Benutzers
Verwenden Sie az ad user create , um einen Benutzer zu erstellen oder einen vorhandenen Benutzer zu finden. In diesem Lernprogramm wird Chandra als Beispiel verwendet.
Initialisieren Sie die Variable für die Objekt-ID des Benutzers.
userObjectId="<userObjectId>"
Schritt 3: Einrichten von Speicher
Sie können den Zugriff auf Blob Storage über die Azure CLI entweder mit Microsoft Entra-Anmeldeinformationen oder mithilfe des Zugriffsschlüssels für das Speicherkonto autorisieren. In diesem Artikel wird gezeigt, wie Sie Blob Storage-Vorgänge mithilfe der Microsoft Entra-ID autorisieren. Weitere Informationen finden Sie in der Schnellstartanleitung: Erstellen, Herunterladen und Auflisten von Blobs mit Azure CLI
Verwenden Sie az storage account , um ein Speicherkonto zu erstellen, das mit dem BLOB-Indexfeature kompatibel ist. Weitere Informationen finden Sie unter Verwalten und Finden von Azure-Blobdaten mit Blobindextags.
Verwenden Sie az storage container , um einen neuen BLOB-Container innerhalb des Speicherkontos zu erstellen und die anonyme Zugriffsebene auf "Privat" (kein anonymer Zugriff) festzulegen.
Verwenden Sie az storage blob upload , um eine Textdatei in den Container hochzuladen.
Fügen Sie der Textdatei den folgenden Blob-Index-Tag hinzu. Weitere Informationen finden Sie unter Verwenden von BLOB-Indextags zum Verwalten und Suchen von Daten in Azure Blob Storage.
Hinweis
Von Blobs wird auch das Speichern beliebiger benutzerdefinierter Schlüssel-Wert-Metadaten unterstützt. Metadaten sind zwar mit Blobindextags vergleichbar, für Bedingungen müssen jedoch Blobindextags verwendet werden.
Schlüssel Wert Projekt Cascade Laden Sie eine zweite Textdatei in den Container hoch.
Fügen Sie der zweiten Textdatei den folgenden BLOB-Indextag hinzu.
Schlüssel Wert Projekt Bäcker Initialisieren Sie die folgenden Variablen mit den verwendeten Namen.
resourceGroup="<resourceGroup>" storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameCascade="<blobNameCascade>" blobNameBaker="<blobNameBaker>"
Schritt 4: Zuweisen einer Rolle mit einer Bedingung
Initialisieren Sie die Rollenvariablen des Storage Blob Data Reader .
roleDefinitionName="Storage Blob Data Reader" roleDefinitionId="2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"Initialisieren Sie den Bereich für die Ressourcengruppe.
scope="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"Initialisieren Sie die Bedingung.
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'))"Wenn die Verlaufserweiterung in Bash aktiviert ist, wird aufgrund des Ausrufezeichens (!) unter Umständen die Meldung
bash: !: event not foundangezeigt. In diesem Fall können Sie die Verlaufserweiterung mit dem Befehlset +Hdeaktivieren. Verwenden Sieset -H, um die Verlaufserweiterung erneut zu aktivieren.In Bash hat ein Dollarzeichen ($) eine besondere Bedeutung für die Expansion. Wenn Ihre Bedingung ein Dollarzeichen ($) enthält, müssen Sie sie möglicherweise einem umgekehrten Schrägstrich (\) voranstellen. Diese Bedingung verwendet beispielsweise Dollarzeichen, um den Tagschlüsselnamen zu delineieren. Weitere Informationen zu Regeln für Anführungszeichen in Bash finden Sie unter "Doppelte Anführungszeichen".
Initialisieren Sie die Bedingungsversion und -beschreibung.
conditionVersion="2.0" description="Read access to blobs with the tag Project=Cascade"Verwenden Sie az role assignment create, um die Rolle Storage Blob Data Reader mit einer Bedingung dem Benutzer auf Gruppenebene der Ressource zuzuweisen.
az role assignment create --assignee-object-id $userObjectId --scope $scope --role $roleDefinitionId --description "$description" --condition "$condition" --condition-version $conditionVersionHier ist ein Beispiel für das Ergebnis:
{ "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" }
Schritt 5: (Optional) Anzeigen der Bedingung im Azure-Portal
Öffnen Sie im Azure-Portal die Ressourcengruppe.
Wählen Sie Zugriffssteuerung (IAM) aus.
Suchen Sie auf der Registerkarte "Rollenzuweisungen" die Rolle.
Wählen Sie in der Spalte "Bedingung " die Option "Ansicht/Bearbeiten" aus, um die Bedingung anzuzeigen.
Schritt 6: Testen der Bedingung
Öffnen Sie ein neues Befehlsfenster.
Verwenden Sie az login , um sich als Chandra anzumelden.
az loginInitialisieren Sie die folgenden Variablen mit den verwendeten Namen.
storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameBaker="<blobNameBaker>" blobNameCascade="<blobNameCascade>"Verwenden Sie az storage blob show , um zu versuchen, die Eigenschaften der Datei für das Baker-Projekt zu lesen.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameBaker --auth-mode loginIm Anschluss sehen Sie ein Beispiel für die Ausgabe. Beachten Sie, dass Sie die Datei aufgrund der hinzugefügten Bedingung nicht lesen können .
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.Lesen Sie die Eigenschaften der Datei für das Cascade-Projekt.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameCascade --auth-mode loginIm Anschluss sehen Sie ein Beispiel für die Ausgabe. Beachten Sie, dass Sie die Eigenschaften der Datei lesen können, da sie das Tag Project=Cascade aufweist.
{ "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, ... }
Schritt 7: (Optional) Bearbeiten der Bedingung
Verwenden Sie im anderen Befehlsfenster az-Rollenzuweisungsliste , um die hinzugefügte Rollenzuweisung abzurufen.
az role assignment list --assignee $userObjectId --resource-group $resourceGroupDie Ausgabe sieht in etwa wie folgt aus:
[ { "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" } ]Erstellen Sie eine JSON-Datei mit dem folgenden Format und aktualisieren Sie die Eigenschaften
conditionunddescription.{ "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" }Verwenden Sie az role assignment update, um die Bedingung für die Rollenzuweisung zu aktualisieren.
az role assignment update --role-assignment "./path/roleassignment.json"
Schritt 8: Bereinigen von Ressourcen
Verwenden Sie az role assignment delete, um die hinzugefügte Rollenzuweisung und Kondition zu entfernen.
az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroupLöschen Sie das von Ihnen erstellte Speicherkonto.
Löschen Sie den von Ihnen erstellten Benutzer.
