Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In de meeste gevallen verleent een roltoewijzing de machtigingen die u nodig hebt voor Azure-resources. In sommige gevallen wilt u echter meer gedetailleerd toegangsbeheer bieden door een voorwaarde voor roltoewijzing toe te voegen.
In deze handleiding leer je hoe je:
- Een voorwaarde toevoegen aan een roltoewijzing
- Toegang tot blobs beperken op basis van een blobindextag
Belangrijk
Op kenmerken gebaseerd toegangsbeheer van Azure (Azure ABAC) is algemeen beschikbaar (GA) voor het beheren van de toegang tot Azure Blob Storage, Azure Data Lake Storage Gen2 en Azure Queues met behulp van request, resourceen environmentprincipal kenmerken in de prestatielagen standard en Premium Storage-account. Op dit moment bevat de lijst-blob het aanvraagkenmerk en het momentopnameaanvraagkenmerk voor hiërarchische naamruimte in PREVIEW. Zie Status van voorwaardefuncties in Azure Storage voor volledige informatie over de functiestatus van ABAC voor Azure Storage.
Zie de Aanvullende Gebruiksvoorwaarden voor Microsoft Azure Previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta, preview, of anderszins nog niet algemeen beschikbaar zijn.
Vereiste voorwaarden
Zie Voorwaarden voor informatie over de vereisten voor het toevoegen of bewerken van voorwaarden voor roltoewijzing.
Conditie
In deze zelfstudie beperkt u de toegang tot blobs met een specifieke tag. U voegt bijvoorbeeld een voorwaarde toe aan een roltoewijzing, zodat Chandra alleen bestanden kan lezen met de tag Project=Cascade.
Als Chandra probeert een blob te lezen zonder de tag Project=Cascade, is toegang niet toegestaan.
De voorwaarde ziet er als volgt uit in code:
(
(
!(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'
)
)
Stap 1: Vereisten installeren
Open een PowerShell-venster.
Gebruik Get-InstalledModule om de versies van geïnstalleerde modules te controleren.
Get-InstalledModule -Name Az Get-InstalledModule -Name Az.Resources Get-InstalledModule -Name Az.StorageGebruik indien nodig Install-Module om de vereiste versies voor de modules Az, Az.Resources en Az.Storage te installeren.
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 -AllowPrereleaseSluit PowerShell en open opnieuw om de sessie te vernieuwen.
Stap 2: aanmelden bij Azure
Gebruik de opdracht Connect-AzAccount en volg de instructies die worden weergegeven om u als beheerder of eigenaar van gebruikerstoegang aan te melden bij uw directory.
Connect-AzAccountGebruik Get-AzSubscription om al uw abonnementen weer te geven.
Get-AzSubscriptionBepaal de abonnements-id en initialiseer de variabele.
$subscriptionId = "<subscriptionId>"Stel het abonnement in als het actieve abonnement.
$context = Get-AzSubscription -SubscriptionId $subscriptionId Set-AzContext $context
Stap 3: Een gebruiker maken
Gebruik New-MgUser om een gebruiker te maken of een bestaande gebruiker te zoeken. In deze zelfstudie wordt Chandra gebruikt als voorbeeld.
Initialiseer de variabele voor de object-id van de gebruiker.
$userObjectId = "<userObjectId>"
Stap 4: Opslag instellen
Gebruik New-AzStorageAccount om een opslagaccount te maken dat compatibel is met de blob-indexfunctie. Zie Azure Blob-gegevens beheren en zoeken met blobindextags voor meer informatie.
Gebruik New-AzStorageContainer om een nieuwe blobcontainer te maken in het opslagaccount en stel het anonieme toegangsniveau in op Privé (geen anonieme toegang).
Gebruik Set-AzStorageBlobContent om een tekstbestand te uploaden naar de container.
Voeg de volgende blobindextag toe aan het tekstbestand. Zie Blob-indextags gebruiken voor het beheren en vinden van gegevens in Azure Blob Storage voor meer informatie.
Opmerking
Blobs bieden ook ondersteuning voor de mogelijkheid om willekeurige door de gebruiker gedefinieerde sleutelwaardemetagegevens op te slaan. Hoewel metagegevens vergelijkbaar zijn met blob-indextags, moet u blobindextags met voorwaarden gebruiken.
Sleutelcode Waarde Project Cascade Upload een tweede tekstbestand naar de container.
Voeg de volgende blobindextag toe aan het tweede tekstbestand.
Sleutelcode Waarde Project Bakker Initialiseer de volgende variabelen met de namen die u hebt gebruikt.
$resourceGroup = "<resourceGroup>" $storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameCascade = "<blobNameCascade>" $blobNameBaker = "<blobNameBaker>"
Stap 5: Een rol met een voorwaarde toewijzen
Initialiseer de rolvariabelen voor de opslag-blob-gegevens-lezer.
$roleDefinitionName = "Storage Blob Data Reader" $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"Initialiseer het bereik voor de resourcegroep.
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"Initialiseer de voorwaarde.
$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'))"Als uw voorwaarde in PowerShell een dollarteken ($) bevat, moet u het voorvoegsel voorzien van een backtick ('). Deze voorwaarde gebruikt bijvoorbeeld dollartekens om de naam van de tagsleutel af te bakenen.
Initialiseer de versie en beschrijving van de voorwaarde.
$conditionVersion = "2.0" $description = "Read access to blobs with the tag Project=Cascade"Gebruik New-AzRoleAssignment om de rol Storage Blob Data Reader met een voorwaarde toe te wijzen aan de gebruiker binnen een resourcegroepbereik.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersionHier is een voorbeeld van de output:
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'))
Stap 6: (Optioneel) Bekijk de voorwaarde in Azure Portal
Open de resourcegroep in de Azure Portal.
Klik op Toegangsbeheer (IAM) .
Op het tabblad Roltoewijzingen, vindt u de roltoewijzing.
Selecteer Weergeven/bewerken in de kolom Voorwaarde om de voorwaarde weer te geven.
Stap 7: De voorwaarde testen
Open een nieuw PowerShell-venster.
Gebruik Connect-AzAccount om u aan te melden als Chandra.
Connect-AzAccountInitialiseer de volgende variabelen met de namen die u hebt gebruikt.
$storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameBaker = "<blobNameBaker>" $blobNameCascade = "<blobNameCascade>"Gebruik New-AzStorageContext om een specifieke context te maken voor eenvoudiger toegang tot uw opslagaccount.
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountNameGebruik Get-AzStorageBlob om het bestand voor het Baker-project te lezen.
Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtxHier volgt een voorbeeld van de uitvoer. U ziet dat u het bestand niet kunt lezen vanwege de voorwaarde die u hebt toegevoegd.
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 CommandLees het bestand voor het Cascade-project.
Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtxHier volgt een voorbeeld van de uitvoer. U ziet dat u het bestand kunt lezen omdat het de tag Project=Trapsgewijs heeft.
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
Stap 8: (Optioneel) Bewerk de voorwaarde
Gebruik In het andere PowerShell-venster Get-AzRoleAssignment om de roltoewijzing op te halen die u hebt toegevoegd.
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectIdBewerk de voorwaarde.
$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'))"Initialiseer de voorwaarde en beschrijving.
$testRa.Condition = $condition $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"Gebruik Set-AzRoleAssignment om de voorwaarde voor de roltoewijzing bij te werken.
Set-AzRoleAssignment -InputObject $testRa -PassThruHier is een voorbeeld van de output:
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'))
Stap 9: Resources opschonen
Gebruik Remove-AzRoleAssignment om de roltoewijzing en voorwaarde te verwijderen die u hebt toegevoegd.
Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroupVerwijder het opslagaccount dat u hebt gemaakt.
Verwijder de gebruiker die u hebt gemaakt.