Självstudie: Lägga till ett rolltilldelningsvillkor för att begränsa åtkomsten till blobar med hjälp av Azure PowerShell
I de flesta fall ger en rolltilldelning de behörigheter du behöver för Azure-resurser. I vissa fall kanske du dock vill ge mer detaljerad åtkomstkontroll genom att lägga till ett rolltilldelningsvillkor.
I den här självstudien lär du dig att:
- Lägga till ett villkor i en rolltilldelning
- Begränsa åtkomsten till blobar baserat på en blobindextagg
Viktigt!
Azure-attributbaserad åtkomstkontroll (Azure ABAC) är allmänt tillgänglig (GA) för att styra åtkomsten till Azure Blob Storage, Azure Data Lake Storage Gen2 och Azure Queues med hjälp av request
, resource
och environment
principal
attribut på prestandanivåerna för både standard- och Premium Storage-konton. För närvarande finns resursattributet för containermetadata och listbloben med begärandeattributet i FÖRHANDSVERSION. Fullständig information om funktionsstatus för ABAC för Azure Storage finns i Status för villkorsfunktioner i Azure Storage.
Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.
Förutsättningar
Information om kraven för att lägga till eller redigera rolltilldelningsvillkor finns i Villkorskrav.
Villkor
I den här självstudien begränsar du åtkomsten till blobar med en specifik tagg. Du kan till exempel lägga till ett villkor i en rolltilldelning så att Chandra bara kan läsa filer med taggen Project=Cascade.
Om Chandra försöker läsa en blob utan taggen Project=Cascade tillåts inte åtkomst.
Så här ser villkoret ut i kod:
(
(
!(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'
)
)
Steg 1: Installera krav
Öppna ett PowerShell-fönster.
Använd Get-InstalledModule för att kontrollera versioner av installerade moduler.
Get-InstalledModule -Name Az Get-InstalledModule -Name Az.Resources Get-InstalledModule -Name Az.Storage
Om det behövs använder du Install-Module för att installera de versioner som krävs för modulerna Az, Az.Resources och 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 -AllowPrerelease
Stäng och öppna PowerShell igen för att uppdatera sessionen.
Steg 2: Logga in på Azure
Använd kommandot Anslut-AzAccount och följ anvisningarna som visas för att logga in på din katalog som administratör för användaråtkomst eller ägare.
Connect-AzAccount
Använd Get-AzSubscription för att lista alla dina prenumerationer.
Get-AzSubscription
Fastställ prenumerations-ID:t och initiera variabeln.
$subscriptionId = "<subscriptionId>"
Ange prenumerationen som den aktiva prenumerationen.
$context = Get-AzSubscription -SubscriptionId $subscriptionId Set-AzContext $context
Steg 3: Skapa en användare
Använd New-MgUser för att skapa en användare eller hitta en befintlig användare. I den här självstudien används Chandra som exempel.
Initiera variabeln för användarens objekt-ID.
$userObjectId = "<userObjectId>"
Steg 4: Konfigurera lagring
Använd New-AzStorageAccount för att skapa ett lagringskonto som är kompatibelt med blobindexfunktionen. Mer information finns i Hantera och hitta Azure Blob-data med blobindextaggar.
Använd New-AzStorageContainer för att skapa en ny blobcontainer i lagringskontot och ange den anonyma åtkomstnivån till Privat (ingen anonym åtkomst).
Använd Set-AzStorageBlobContent för att ladda upp en textfil till containern.
Lägg till följande blobindextagg i textfilen. Mer information finns i Använda blobindextaggar för att hantera och hitta data i Azure Blob Storage.
Kommentar
Blobar stöder också möjligheten att lagra godtyckliga användardefinierade nyckelvärdesmetadata. Även om metadata liknar blobindextaggar måste du använda blobindextaggar med villkor.
Tangent Värde Project Cascade Ladda upp en andra textfil till containern.
Lägg till följande blobindextagg i den andra textfilen.
Tangent Värde Project Baker Initiera följande variabler med de namn som du använde.
$resourceGroup = "<resourceGroup>" $storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameCascade = "<blobNameCascade>" $blobNameBaker = "<blobNameBaker>"
Steg 5: Tilldela en roll med ett villkor
Initiera rollvariablerna för Storage Blob Data Reader .
$roleDefinitionName = "Storage Blob Data Reader" $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
Initiera omfånget för resursgruppen.
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
Initiera villkoret.
$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'))"
Om ditt villkor i PowerShell innehåller ett dollartecken ($) måste du prefixa det med en backtick ('). Det här villkoret använder till exempel dollartecken för att definiera taggnyckelnamnet.
Initiera villkorsversionen och beskrivningen.
$conditionVersion = "2.0" $description = "Read access to blobs with the tag Project=Cascade"
Använd New-AzRoleAssignment för att tilldela rollen Storage Blob Data Reader med ett villkor till användaren i ett resursgruppsomfång.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
Här är ett exempel på utdata:
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'))
Steg 6: (Valfritt) Visa villkoret i Azure-portalen
Öppna resursgruppen i Azure-portalen.
Välj Åtkomstkontroll (IAM) .
Leta upp rolltilldelningen på fliken Rolltilldelningar.
I kolumnen Villkor väljer du Visa/redigera för att visa villkoret.
Steg 7: Testa villkoret
Öppna ett nytt PowerShell-fönster.
Använd Anslut-AzAccount för att logga in som Chandra.
Connect-AzAccount
Initiera följande variabler med de namn som du använde.
$storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameBaker = "<blobNameBaker>" $blobNameCascade = "<blobNameCascade>"
Använd New-AzStorageContext för att skapa en specifik kontext för att få enklare åtkomst till ditt lagringskonto.
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
Använd Get-AzStorageBlob för att försöka läsa filen för Baker-projektet.
Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtx
Här är ett exempel på utdata. Observera att du inte kan läsa filen på grund av villkoret du lade till.
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 Command
Läs filen för Cascade-projektet.
Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtx
Här är ett exempel på utdata. Observera att du kan läsa filen eftersom den har taggen 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
Steg 8: (Valfritt) Redigera villkoret
I det andra PowerShell-fönstret använder du Get-AzRoleAssignment för att hämta rolltilldelningen som du har lagt till.
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
Redigera villkoret.
$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'))"
Initiera villkoret och beskrivningen.
$testRa.Condition = $condition $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"
Använd Set-AzRoleAssignment för att uppdatera villkoret för rolltilldelningen.
Set-AzRoleAssignment -InputObject $testRa -PassThru
Här är ett exempel på utdata:
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'))
Steg 9: Rensa resurser
Använd Remove-AzRoleAssignment för att ta bort rolltilldelningen och villkoret som du lade till.
Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroup
Ta bort lagringskontot som du skapade.
Ta bort den användare som du skapade.