Dela via


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, resourceoch environmentprincipal 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.

Diagram över rolltilldelning med ett villkor.

Om Chandra försöker läsa en blob utan taggen Project=Cascade tillåts inte åtkomst.

Diagram som visar läsåtkomst till blobar med Project=Cascade-tagg.

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

  1. Öppna ett PowerShell-fönster.

  2. 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
    
  3. 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
    
  4. Stäng och öppna PowerShell igen för att uppdatera sessionen.

Steg 2: Logga in på Azure

  1. 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
    
  2. Använd Get-AzSubscription för att lista alla dina prenumerationer.

    Get-AzSubscription
    
  3. Fastställ prenumerations-ID:t och initiera variabeln.

    $subscriptionId = "<subscriptionId>"
    
  4. Ange prenumerationen som den aktiva prenumerationen.

    $context = Get-AzSubscription -SubscriptionId $subscriptionId
    Set-AzContext $context
    

Steg 3: Skapa en användare

  1. 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.

  2. Initiera variabeln för användarens objekt-ID.

    $userObjectId = "<userObjectId>"
    

Steg 4: Konfigurera lagring

  1. 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.

  2. Använd New-AzStorageContainer för att skapa en ny blobcontainer i lagringskontot och ange den anonyma åtkomstnivån till Privat (ingen anonym åtkomst).

  3. Använd Set-AzStorageBlobContent för att ladda upp en textfil till containern.

  4. 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
  5. Ladda upp en andra textfil till containern.

  6. Lägg till följande blobindextagg i den andra textfilen.

    Tangent Värde
    Project Baker
  7. 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

  1. Initiera rollvariablerna för Storage Blob Data Reader .

    $roleDefinitionName = "Storage Blob Data Reader"
    $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
    
  2. Initiera omfånget för resursgruppen.

    $scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
    
  3. 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.

  4. Initiera villkorsversionen och beskrivningen.

    $conditionVersion = "2.0"
    $description = "Read access to blobs with the tag Project=Cascade"
    
  5. 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

  1. Öppna resursgruppen i Azure-portalen.

  2. Välj Åtkomstkontroll (IAM) .

  3. Leta upp rolltilldelningen på fliken Rolltilldelningar.

  4. I kolumnen Villkor väljer du Visa/redigera för att visa villkoret.

Skärmbild av Lägg till rolltilldelningsvillkor i Azure-portalen.

Steg 7: Testa villkoret

  1. Öppna ett nytt PowerShell-fönster.

  2. Använd Anslut-AzAccount för att logga in som Chandra.

    Connect-AzAccount
    
  3. Initiera följande variabler med de namn som du använde.

    $storageAccountName = "<storageAccountName>"
    $containerName = "<containerName>"
    $blobNameBaker = "<blobNameBaker>"
    $blobNameCascade = "<blobNameCascade>"
    
  4. 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
    
  5. 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
    
  6. 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

  1. 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
    
  2. 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'))"
    
  3. Initiera villkoret och beskrivningen.

    $testRa.Condition = $condition
    $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"
    
  4. 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

  1. Använd Remove-AzRoleAssignment för att ta bort rolltilldelningen och villkoret som du lade till.

    Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroup
    
  2. Ta bort lagringskontot som du skapade.

  3. Ta bort den användare som du skapade.

Nästa steg