Dela via


Tillåt läsåtkomst till blobar baserat på taggar och anpassade säkerhetsattribut

I den här artikeln får du lära dig hur du tillåter läsåtkomst till blobar baserat på blobindextaggar och anpassade säkerhetsattribut med hjälp av attributbaserade åtkomstkontrollvillkor (ABAC). Detta kan göra det enklare att hantera åtkomst till blobar.

Förutsättningar

Om du vill tilldela anpassade säkerhetsattribut och lägga till rolltilldelningsvillkor i din Microsoft Entra-klientorganisation behöver du:

Viktigt!

Som standard har global administratör och andra administratörsroller inte behörighet att läsa, definiera eller tilldela anpassade säkerhetsattribut. Om du inte uppfyller dessa krav visas inte huvudnamns-/användarattributen i villkorsredigeraren.

Villkor

I den här artikeln tillåter du läsåtkomst till blobar om användaren har ett anpassat säkerhetsattribut som matchar blobindextaggen. Detta uppnås genom att lägga till ett villkor i rolltilldelningen.

Diagram of role assignment with a condition.

Om Till exempel Brenda har attributet Project=Bakerkan hon bara läsa blobar med Project=Baker blobindextaggen. På samma sätt kan Chandra bara läsa blobar med Project=Cascade.

Diagram showing read access to blobs based on tags and custom security attributes.

Så här ser villkoret ut i kod:

(
 (
  !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
 )
 OR 
 (
  @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
 )
)

Mer information om villkor finns i Vad är azure-attributbaserad åtkomstkontroll (Azure ABAC)?.

Steg 1: Lägg till ett nytt anpassat säkerhetsattribut

  1. Logga in på Azure-portalen.

  2. Klicka på Anpassade säkerhetsattribut för Microsoft Entra ID>.

  3. Lägg till ett attribut med namnet Project med värdena Baker och Cascade. Eller använd ett befintligt attribut. Mer information finns i Lägga till eller inaktivera anpassade säkerhetsattribut i Microsoft Entra-ID.

    Screenshot of adding a custom security attribute.

Steg 2: Tilldela det anpassade säkerhetsattributet till en användare

  1. Skapa en säkerhetsgrupp i Microsoft Entra-ID.

  2. Lägg till en användare som medlem i gruppen.

  3. Project Tilldela attributet med värdet Cascade till användaren. Mer information finns i Tilldela, uppdatera, lista eller ta bort anpassade säkerhetsattribut för en användare.

    Screenshot of assigning a custom security attribute.

  4. Se till att klicka på Spara för att spara tilldelningen.

Steg 3: Konfigurera lagrings- och blobindextaggar

  1. Skapa ett lagringskonto som är kompatibelt med funktionen blobindextaggar. Mer information finns i Hantera och hitta Azure Blob-data med blobindextaggar.

  2. Skapa en ny container i lagringskontot och ange den offentliga åtkomstnivån till Privat (ingen anonym åtkomst).

  3. Ange autentiseringstypen till Azure AD-användarkonto.

  4. Ladda upp textfiler till containern och ange följande blobindextaggar.

    Fil Tangent Värde
    Textfil för bagare Projekt Baker
    Kaskadtextfil Projekt Cascade

    Dricks

    Information om de tecken som tillåts för blobindextaggar finns i Ange blobindextaggar.

Steg 4: Tilldela rollen Storage Blob Data Reader med ett villkor

  1. Öppna en ny flik och logga in på Azure-portalen.

  2. Öppna den resursgrupp som har lagringskontot.

  3. Klicka på Åtkomstkontroll (IAM).

  4. Klicka på fliken Rolltilldelningar för att visa rolltilldelningarna i det här omfånget.

  5. Klicka på Lägg till lägg till>rolltilldelning.

  6. På fliken Roll väljer du rollen Lagringsblobdataläsare .

  7. På fliken Medlemmar väljer du den säkerhetsgrupp som du skapade tidigare.

  8. (Valfritt) I rutan Beskrivning anger du Läsåtkomst till blobar om användaren har ett anpassat säkerhetsattribut som matchar blobindextaggen.

  9. På fliken Villkor (valfritt) klickar du på Lägg till villkor.

    Sidan Lägg till rolltilldelningsvillkor visas.

  10. I avsnittet Lägg till åtgärd klickar du på Lägg till åtgärd.

    Fönstret Välj en åtgärd visas. Det här fönstret är en filtrerad lista över dataåtgärder baserat på rolltilldelningen som ska vara målet för ditt villkor.

  11. Klicka på Läs en blob och sedan på Välj.

  12. I avsnittet Skapa uttryck klickar du på Lägg till.

  13. Ange följande inställningar:

    Inställning Värde
    Attributkälla Huvudkonto
    Attribut <attributuppsättning>_Project
    Operatör StringEquals
    Alternativ Attribut
    Attributkälla Resurs
    Attribut Blobindextaggar [Värden i nyckel]
    Key Projekt

    Kommentar

    Om Principal inte visas som ett alternativ i Attributkälla kontrollerar du att du har definierat anpassat säkerhetsattribut enligt beskrivningen tidigare i Steg 1: Lägg till ett nytt anpassat säkerhetsattribut.

    Screenshot of condition using principal attribute displayed in visual editor.

  14. Rulla upp till Redigeringstyp och klicka på Kod.

    Ditt villkor bör se ut ungefär så här:

    (
     (
      !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
     )
     OR 
     (
      @Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]
     )
    )
    
  15. Spara villkoret genom att klicka på Spara .

  16. På fliken Granska + tilldela klickar du på Granska + tilldela för att tilldela rollen Storage Blob Data Reader med ett villkor.

Steg 5: Tilldela rollen Läsare

  • Upprepa föregående steg för att tilldela rollen Läsare för säkerhetsgruppen i resursgruppens omfång.

    Kommentar

    Du behöver vanligtvis inte tilldela rollen Läsare. Detta görs dock så att du kan testa villkoret med hjälp av Azure-portalen.

Steg 6: Testa villkoret

  1. Öppna Azure-portalen i ett nytt fönster.

  2. Logga in som den användare som du skapade med det Project=Cascade anpassade säkerhetsattributet.

  3. Öppna lagringskontot och containern som du skapade.

  4. Kontrollera att autentiseringsmetoden är inställd på Azure AD-användarkonto och inte åtkomstnyckel.

    Screenshot of storage container with test files.

  5. Klicka på textfilen Baker.

    Du bör INTE kunna visa eller ladda ned bloben och ett meddelande om att auktoriseringen misslyckades ska visas.

  6. Klicka på Kaskadtextfil.

    Du bör kunna visa och ladda ned bloben.

Azure PowerShell

Du kan också använda Azure PowerShell för att lägga till rolltilldelningsvillkor. Följande kommandon visar hur du lägger till villkor. Mer information finns i Självstudie: Lägga till ett rolltilldelningsvillkor för att begränsa åtkomsten till blobar med hjälp av Azure PowerShell.

Lägg till ett villkor

  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 rollbaserad åtkomstkontroll.

    Connect-AzAccount
    
  2. Använd Get-AzRoleAssignment för att hämta rolltilldelningen som du tilldelade till säkerhetsgruppen.

    $groupRoleAssignment = Get-AzRoleAssignment -ObjectId <groupObjectId> -Scope <scope>
    
  3. Ange egenskapen för Condition rolltilldelningsobjektet. Se till att använda attributuppsättningens namn.

    $groupRoleAssignment.Condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>]))"
    
  4. Ange egenskapen för ConditionVersion rolltilldelningsobjektet.

    $groupRoleAssignment.ConditionVersion = "2.0"
    
  5. Använd Set-AzRoleAssignment för att uppdatera rolltilldelningen.

    Set-AzRoleAssignment -InputObject $groupRoleAssignment
    

Testa villkoret

  1. I ett nytt PowerShell-fönster använder du kommandot Anslut-AzAccount för att logga in som medlem i säkerhetsgruppen.

    Connect-AzAccount
    
  2. Använd New-AzStorageContext för att ange kontexten för lagringskontot.

    $bearerCtx = New-AzStorageContext -StorageAccountName <accountName>
    
  3. Använd Get-AzStorageBlob för att försöka läsa Baker-filen.

    Get-AzStorageBlob -Container <containerName> -Blob <blobNameBaker> -Context $bearerCtx
    

    Du bör INTE kunna läsa bloben och ett meddelande om att auktoriseringen misslyckades ska visas.

    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.
    ...
    
  4. Använd Get-AzStorageBlob för att försöka läsa Cascade-filen.

    Get-AzStorageBlob -Container <containerName> -Blob <blobNameCascade> -Context $bearerCtx
    You should be able to read the blob.
    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
    

Azure CLI

Du kan också använda Azure CLI för att lägga till rolltilldelningsvillkor. Följande kommandon visar hur du lägger till villkor. Mer information finns i Självstudie: Lägga till ett rolltilldelningsvillkor för att begränsa åtkomsten till blobar med hjälp av Azure CLI.

Lägg till ett villkor

  1. Använd kommandot az login och följ anvisningarna som visas för att logga in på din katalog som administratör för rollbaserad åtkomstkontroll.

    az login
    
  2. Använd az role assignment list för att hämta rolltilldelningen som du tilldelade till säkerhetsgruppen.

    az role assignment list --assignee <groupObjectId> --scope <scope>
    
  3. Skapa en JSON-fil med följande format.

    {
        "canDelegate": null,
        "condition": "",
        "conditionVersion": "",
        "description": "",
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{groupObjectId}",
        "principalName": "{principalName}",
        "principalType": "Group",
        "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"
    }
    
  4. Uppdatera egenskapen condition . Se till att använda attributuppsättningens namn.

    "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Principal[Microsoft.Directory/CustomSecurityAttributes/Id:Engineering_Project] StringEquals @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>]))",
    
  5. Uppdatera egenskapen conditionVersion .

    "conditionVersion": "2.0",
    
  6. Använd az role assignment update för att lägga till villkoret i rolltilldelningen.

    az role assignment update --role-assignment "./path/roleassignment.json"
    

Testa villkoret

  1. I ett nytt kommandofönster använder du kommandot az login för att logga in som medlem i säkerhetsgruppen.

    az login
    
  2. Använd az storage blob show för att försöka läsa egenskaperna för Baker-filen.

    az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameBaker> --auth-mode login
    

    Du bör INTE kunna läsa bloben och ett meddelande om att auktoriseringen misslyckades ska visas.

    You do not have the required permissions needed to perform this operation.
    ...
    
  3. Använd az storage blob show för att försöka läsa egenskaperna för Cascade-filen.

    az storage blob show --account-name <storageAccountName> --container-name <containerName> --name <blobNameCascade> --auth-mode login
    You should be able to read the blob.
    {
      "container": "<containerName>",
      "content": "",
      "deleted": false,
      "encryptedMetadata": null,
      "encryptionKeySha256": null,
      "encryptionScope": null,
    ...
    }
    

Nästa steg