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: Installieren der erforderlichen Komponenten
Öffnen Sie ein PowerShell-Fenster.
Verwenden Sie "Get-InstalledModule ", um Versionen installierter Module zu überprüfen.
Get-InstalledModule -Name Az Get-InstalledModule -Name Az.Resources Get-InstalledModule -Name Az.StorageVerwenden Sie bei Bedarf Install-Module , um die erforderlichen Versionen für die Module Az, Az.Resources und Az.Storage zu installieren.
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 -AllowPrereleaseSchließen Sie PowerShell, und öffnen Sie sie erneut, um die Sitzung zu aktualisieren.
Schritt 2: Anmelden bei Azure
Verwenden Sie den Befehl "Connect-AzAccount" , und folgen Sie den Anweisungen, die angezeigt werden, um sich bei Ihrem Verzeichnis als Benutzerzugriffsadministrator oder -besitzer anzumelden.
Connect-AzAccountVerwenden Sie Get-AzSubscription , um alle Ihre Abonnements aufzulisten.
Get-AzSubscriptionBestimmen Sie die Abonnement-ID, und initialisieren Sie die Variable.
$subscriptionId = "<subscriptionId>"Legen Sie das Abonnement als aktives Abonnement fest.
$context = Get-AzSubscription -SubscriptionId $subscriptionId Set-AzContext $context
Schritt 3: Erstellen eines Benutzers
Verwenden Sie "New-MgUser ", 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 4: Einrichten von Speicher
Verwenden Sie "New-AzStorageAccount ", 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 New-AzStorageContainer , um einen neuen BLOB-Container innerhalb des Speicherkontos zu erstellen und die Anonyme Zugriffsebene auf "Privat" (kein anonymer Zugriff) festzulegen.
Verwenden Sie Set-AzStorageBlobContent , 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 5: 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 Ihre Bedingung ein Dollarzeichen ($) enthält, müssen Sie ihm in PowerShell ein umgekehrtes einfaches Anführungszeichen (`) voranstellen. Diese Bedingung verwendet beispielsweise Dollarzeichen, um den Tagschlüsselnamen zu delineieren.
Initialisieren Sie die Bedingungsversion und -beschreibung.
$conditionVersion = "2.0" $description = "Read access to blobs with the tag Project=Cascade"Verwenden Sie New-AzRoleAssignment, um die Rolle Storage Blob Data Reader mit einer Bedingung dem Benutzer auf Ebene einer Ressourcengruppe zuzuweisen.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersionHier ist ein Beispiel für das Ergebnis:
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'))
Schritt 6: (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 7: Testen der Bedingung
Öffnen Sie ein neues PowerShell-Fenster.
Verwenden Sie Connect-AzAccount , um sich als Chandra anzumelden.
Connect-AzAccountInitialisieren Sie die folgenden Variablen mit den verwendeten Namen.
$storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameBaker = "<blobNameBaker>" $blobNameCascade = "<blobNameCascade>"Verwenden Sie New-AzStorageContext , um einen bestimmten Kontext für den einfacheren Zugriff auf Ihr Speicherkonto zu erstellen.
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountNameVerwenden Sie Get-AzStorageBlob , um die Datei für das Baker-Projekt zu lesen.
Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtxIm Anschluss sehen Sie ein Beispiel für die Ausgabe. Beachten Sie, dass Sie die Datei aufgrund der hinzugefügten Bedingung nicht lesen können .
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 CommandLesen Sie die Datei für das Cascade-Projekt.
Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtxIm Anschluss sehen Sie ein Beispiel für die Ausgabe. Beachten Sie, dass Sie die Datei lesen können, da sie das Tag Project=Cascade aufweist.
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
Schritt 8: (Optional) Bearbeiten der Bedingung
Verwenden Sie im anderen PowerShell-Fenster Get-AzRoleAssignment , um die hinzugefügte Rollenzuweisung abzurufen.
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectIdBearbeiten 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' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Baker'))"Initialisieren Sie die Bedingung und Beschreibung.
$testRa.Condition = $condition $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"Verwenden Sie Set-AzRoleAssignment , um die Bedingung für die Rollenzuweisung zu aktualisieren.
Set-AzRoleAssignment -InputObject $testRa -PassThruHier ist ein Beispiel für das Ergebnis:
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'))
Schritt 9: Bereinigen von Ressourcen
Verwenden Sie Remove-AzRoleAssignment , um die hinzugefügte Rollenzuweisung und Bedingung zu entfernen.
Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroupLöschen Sie das von Ihnen erstellte Speicherkonto.
Löschen Sie den von Ihnen erstellten Benutzer.
