Läs på engelska

Dela via


Självstudie: Lägga till ett rolltilldelningsvillkor för att begränsa åtkomsten till blobar med hjälp av Azure CLI

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: Logga in på Azure

  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 användaråtkomst eller ägare.

    Azure CLI
    az login
    
  2. Använd az account show för att hämta ID för dina prenumerationer.

    Azure CLI
    az account show
    
  3. Fastställ prenumerations-ID:t och initiera variabeln.

    Azure CLI
    subscriptionId="<subscriptionId>"
    

Steg 2: Skapa en användare

  1. Använd az ad user create 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.

    Azure CLI
    userObjectId="<userObjectId>"
    

Steg 3: Konfigurera lagring

Du kan auktorisera åtkomst till Blob Storage från Azure CLI antingen med Microsoft Entra-autentiseringsuppgifter eller med hjälp av åtkomstnyckeln för lagringskontot. Den här artikeln visar hur du auktoriserar bloblagringsåtgärder med hjälp av Microsoft Entra-ID. Mer information finns i Snabbstart: Skapa, ladda ned och lista blobar med Azure CLI

  1. Använd az storage-kontot 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 az storage container för att skapa en ny blobcontainer i lagringskontot och ange den anonyma åtkomstnivån till Privat (ingen anonym åtkomst).

  3. Använd az storage blob upload 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.

    Anteckning

    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.

    Azure CLI
    resourceGroup="<resourceGroup>"
    storageAccountName="<storageAccountName>"
    containerName="<containerName>"
    blobNameCascade="<blobNameCascade>"
    blobNameBaker="<blobNameBaker>"
    

Steg 4: Tilldela en roll med ett villkor

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

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

    Azure CLI
    scope="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
    
  3. Initiera villkoret.

    Azure CLI
    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 historikexpansionen är aktiverad i Bash kan meddelandet bash: !: event not found visas på grund av utropstecken (!). I det här fallet kan du inaktivera historikexpansion med kommandot set +H. Om du vill återaktivera historikexpansion använder du set -H.

    I Bash har ett dollartecken ($) en särskild betydelse för expansion. Om villkoret innehåller ett dollartecken ($) kan du behöva prefixet med ett omvänt snedstreck (\). Det här villkoret använder till exempel dollartecken för att definiera taggnyckelnamnet. Mer information om regler för citattecken i Bash finns i Dubbla citattecken.

  4. Initiera villkorsversionen och beskrivningen.

    Azure CLI
    conditionVersion="2.0"
    description="Read access to blobs with the tag Project=Cascade"
    
  5. Använd az role assignment create för att tilldela rollen Storage Blob Data Reader med ett villkor till användaren i ett resursgruppsomfång.

    Azure CLI
    az role assignment create --assignee-object-id $userObjectId --scope $scope --role $roleDefinitionId --description "$description" --condition "$condition" --condition-version $conditionVersion
    

    Här är ett exempel på utdata:

    Azure CLI
    {
      "canDelegate": null,
      "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'))",
      "conditionVersion": "2.0",
      "description": "Read access to blobs with the tag Project=Cascade",
      "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
      "name": "{roleAssignmentId}",
      "principalId": "{userObjectId}",
      "principalType": "User",
      "resourceGroup": "{resourceGroup}",
      "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
      "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    

Steg 5: (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 6: Testa villkoret

  1. Öppna ett nytt kommandofönster.

  2. Använd az login för att logga in som Chandra.

    Azure CLI
    az login
    
  3. Initiera följande variabler med de namn som du använde.

    Azure CLI
    storageAccountName="<storageAccountName>"
    containerName="<containerName>"
    blobNameBaker="<blobNameBaker>"
    blobNameCascade="<blobNameCascade>"
    
  4. Använd az storage blob show för att försöka läsa egenskaperna för filen för Baker-projektet.

    Azure CLI
    az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameBaker --auth-mode login
    

    Här är ett exempel på utdata. Observera att du inte kan läsa filen på grund av villkoret du lade till.

    Azure CLI
    You do not have the required permissions needed to perform this operation.
    Depending on your operation, you may need to be assigned one of the following roles:
        "Storage Blob Data Contributor"
        "Storage Blob Data Reader"
        "Storage Queue Data Contributor"
        "Storage Queue Data Reader"
    
    If you want to use the old authentication method and allow querying for the right account key, please use the "--auth-mode" parameter and "key" value.
    
  5. Läs egenskaperna för filen för Cascade-projektet.

    Azure CLI
    az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameCascade --auth-mode login 
    

    Här är ett exempel på utdata. Observera att du kan läsa egenskaperna för filen eftersom den har taggen Project=Cascade.

    Azure CLI
    {
      "container": "<containerName>",
      "content": "",
      "deleted": false,
      "encryptedMetadata": null,
      "encryptionKeySha256": null,
      "encryptionScope": null,
      "isAppendBlobSealed": null,
      "isCurrentVersion": null,
      "lastAccessedOn": null,
      "metadata": {},
      "name": "<blobNameCascade>",
      "objectReplicationDestinationPolicy": null,
      "objectReplicationSourceProperties": [],
      "properties": {
        "appendBlobCommittedBlockCount": null,
        "blobTier": "Hot",
        "blobTierChangeTime": null,
        "blobTierInferred": true,
        "blobType": "BlockBlob",
        "contentLength": 7,
        "contentRange": null,
    
      ...
    
    }
    

Steg 7: (Valfritt) Redigera villkoret

  1. I det andra kommandofönstret använder du az role assignment list för att hämta rolltilldelningen som du har lagt till.

    Azure CLI
    az role assignment list --assignee $userObjectId --resource-group $resourceGroup
    

    De utdata som genereras liknar följande:

    Azure CLI
    [
      {
        "canDelegate": null,
        "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'))",
        "conditionVersion": "2.0",
        "description": "Read access to blobs with the tag Project=Cascade",
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{userObjectId}",
        "principalName": "chandra@contoso.com",
        "principalType": "User",
        "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"
      }
    ]
    
  2. Skapa en JSON-fil med följande format och uppdatera condition egenskaperna och description .

    JSON
    {
        "canDelegate": null,
        "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'))",
        "conditionVersion": "2.0",
        "description": "Read access to blobs with the tag Project=Cascade or Project=Baker",
        "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
        "name": "{roleAssignmentId}",
        "principalId": "{userObjectId}",
        "principalName": "chandra@contoso.com",
        "principalType": "User",
        "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"
    }
    
  3. Använd az role assignment update för att uppdatera villkoret för rolltilldelningen.

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

Steg 8: Rensa resurser

  1. Använd az role assignment delete för att ta bort rolltilldelningen och villkoret som du lade till.

    Azure CLI
    az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroup
    
  2. Ta bort lagringskontot som du skapade.

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

Nästa steg