Share via


Oktatóanyag: Szerepkör-hozzárendelési feltétel hozzáadása a blobokhoz való hozzáférés korlátozásához az Azure CLI használatával

A szerepkör-hozzárendelés a legtöbb esetben megadja az Azure-erőforrásokhoz szükséges engedélyeket. Előfordulhat azonban, hogy egy szerepkör-hozzárendelési feltétel hozzáadásával részletesebb hozzáférés-vezérlést szeretne biztosítani.

Ebben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • Feltétel hozzáadása szerepkör-hozzárendeléshez
  • Blobok hozzáférésének korlátozása blobindexcímke alapján

Fontos

Az Azure attribútumalapú hozzáférés-vezérlés (Azure ABAC) általánosan elérhető (GA) az Azure Blob Storage, az Azure Data Lake Storage Gen2 és az Azure Queues szolgáltatáshoz requestvaló hozzáférés szabályozásához a resourceenvironmentstandard és principal a prémium szintű tárfiókok teljesítményszintjeiben egyaránt. Jelenleg a tároló metaadat-erőforrásattribútuma és a listablobok kérelemattribútuma előzetes verzióban érhető el. Az Azure Storage-hoz készült ABAC szolgáltatásállapotával kapcsolatos teljes információkért tekintse meg az Azure Storage feltételfunkcióinak állapotát.

A bétaverziójú, előzetes verziójú vagy másként még általánosan nem elérhető Azure-szolgáltatások jogi feltételeit lásd: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Előfeltételek

A szerepkör-hozzárendelési feltételek hozzáadásának vagy szerkesztésének előfeltételeiről további információt a Feltételek előfeltételei című témakörben talál.

Feltétel

Ebben az oktatóanyagban egy adott címkével korlátozza a blobokhoz való hozzáférést. Hozzáadhat például egy feltételt egy szerepkör-hozzárendeléshez, hogy a Chandra csak a Project=Cascade címkével rendelkező fájlokat tudja olvasni.

Egy feltétellel rendelkező szerepkör-hozzárendelés diagramja.

Ha Chandra a Project=Cascade címke nélkül próbál egy blobot olvasni, a hozzáférés nem engedélyezett.

A Blobok olvasási hozzáférését bemutató ábra a Project=Cascade címkével.

Így néz ki a feltétel a kódban:

(
    (
        !(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'
    )
)

1. lépés: Bejelentkezés az Azure-ba

  1. Használja az az login parancsot, és kövesse a megjelenő utasításokat, hogy felhasználói hozzáférés Rendszergazda istratorként vagy tulajdonosként jelentkezzen be a címtárba.

    az login
    
  2. Az az account show használatával lekérheti az előfizetések azonosítóját.

    az account show
    
  3. Határozza meg az előfizetés azonosítóját, és inicializálja a változót.

    subscriptionId="<subscriptionId>"
    

2. lépés: Felhasználó létrehozása

  1. Az az ad user create használatával hozzon létre egy felhasználót, vagy keressen egy meglévő felhasználót. Ez az oktatóanyag a Chandrát használja példaként.

  2. Inicializálja a felhasználó objektumazonosítójának változóját.

    userObjectId="<userObjectId>"
    

3. lépés: Tároló beállítása

A Blob Storage-hoz való hozzáférést az Azure CLI-ből engedélyezheti a Microsoft Entra hitelesítő adataival vagy a tárfiók hozzáférési kulcsával. Ez a cikk bemutatja, hogyan engedélyezheti a Blob Storage-műveleteket a Microsoft Entra ID azonosítójával. További információ : Rövid útmutató: Blobok létrehozása, letöltése és listázása az Azure CLI-vel

  1. Az az storage account használatával hozzon létre egy olyan tárfiókot, amely kompatibilis a blobindex szolgáltatással. További információ: Azure Blob-adatok kezelése és megkeresése blobindexcímkékkel.

  2. Az az storage container használatával hozzon létre egy új blobtárolót a tárfiókon belül, és állítsa a névtelen hozzáférési szintet privátra (névtelen hozzáférés nélkül).

  3. Az az storage blobfeltöltéssel szöveges fájlt tölthet fel a tárolóba.

  4. Adja hozzá a következő blobindexcímkét a szövegfájlhoz. További információ: Blobindexcímkék használata adatok kezeléséhez és kereséséhez az Azure Blob Storage-ban.

    Feljegyzés

    A blobok emellett támogatják a felhasználó által meghatározott kulcs-érték metaadatok tárolását is. Bár a metaadatok hasonlóak a blobindex-címkékhez, a blobindex-címkéket feltételekkel kell használnia.

    Kulcs Érték
    Project Cascade
  5. Töltsön fel egy második szöveges fájlt a tárolóba.

  6. Adja hozzá a következő blobindexcímkét a második szövegfájlhoz.

    Kulcs Érték
    Project Baker
  7. Inicializálja a következő változókat a használt névvel.

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

4. lépés: Szerepkör hozzárendelése feltétellel

  1. Inicializálja a Storage Blob Adatolvasó szerepkör változóit.

    roleDefinitionName="Storage Blob Data Reader"
    roleDefinitionId="2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
    
  2. Inicializálja az erőforráscsoport hatókörét.

    scope="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
    
  3. Inicializálja a feltételt.

    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'))"
    

    A Bashben, ha az előzménybővítés engedélyezve van, előfordulhat, hogy a felkiáltójel (!) miatt jelenik meg az üzenet bash: !: event not found . Ebben az esetben letilthatja az előzménybővítést a paranccsal set +H. Az előzménybővítés újbóli engedélyezéséhez használja a következőt set -H: .

    A Bashben a dollárjelnek ($) különleges jelentése van a bővítéshez. Ha a feltétel dollárjelet ($) tartalmaz, előfordulhat, hogy egy fordított perjellel (\) kell előtaggal előtagolnia. Ez a feltétel például dollárjelekkel tagozza a címkekulcs nevét. A Bash idézőjelekre vonatkozó szabályairól további információt a Dupla idézőjelek című témakörben talál.

  4. Inicializálja a feltétel verzióját és leírását.

    conditionVersion="2.0"
    description="Read access to blobs with the tag Project=Cascade"
    
  5. Az az role assignment create használatával hozzárendelheti a Storage Blob-adatolvasó szerepkört egy feltétellel a felhasználóhoz egy erőforráscsoport hatókörében.

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

    A kimenet például a következő lehet:

    {
      "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"
    }
    

5. lépés: (Nem kötelező) A feltétel megtekintése az Azure Portalon

  1. Az Azure Portalon nyissa meg az erőforráscsoportot.

  2. Válassza a Hozzáférés-vezérlés (IAM) lehetőséget.

  3. A Szerepkör-hozzárendelések lapon keresse meg a szerepkör-hozzárendelést.

  4. A Feltétel oszlopban válassza a Nézet/Szerkesztés lehetőséget a feltétel megtekintéséhez.

Képernyőkép az Azure Portal szerepkör-hozzárendelési feltételének hozzáadásáról.

6. lépés: A feltétel tesztelése

  1. Nyisson meg egy új parancsablakot.

  2. Az az login használatával jelentkezzen be Chandra néven.

    az login
    
  3. Inicializálja a következő változókat a használt névvel.

    storageAccountName="<storageAccountName>"
    containerName="<containerName>"
    blobNameBaker="<blobNameBaker>"
    blobNameCascade="<blobNameCascade>"
    
  4. Az az storage blob show használatával próbálja meg beolvasni a Baker-projekt fájljának tulajdonságait.

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

    Íme egy példa a kimenetre. Figyelje meg, hogy a hozzáadott feltétel miatt nem tudja olvasni a fájlt.

    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. Olvassa el a Cascade-projekt fájljának tulajdonságait.

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

    Íme egy példa a kimenetre. Figyelje meg, hogy elolvashatja a fájl tulajdonságait, mert a címkéje Project=Cascade.

    {
      "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,
    
      ...
    
    }
    

7. lépés: (Nem kötelező) A feltétel szerkesztése

  1. A másik parancsablakban használja az az szerepkör-hozzárendelési listát a hozzáadott szerepkör-hozzárendelés lekéréséhez.

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

    A kimenet hasonlóképpen fog kinézni:

    [
      {
        "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. Hozzon létre egy JSON-fájlt a következő formátumban, és frissítse a condition tulajdonságokat.description

    {
        "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. A szerepkör-hozzárendelés feltételének frissítéséhez használja az az szerepkör-hozzárendelés frissítését .

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

8. lépés: Erőforrások törlése

  1. A szerepkör-hozzárendelés törlésével eltávolíthatja a hozzáadott szerepkör-hozzárendelést és feltételt.

    az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroup
    
  2. Törölje a létrehozott tárfiókot.

  3. Törölje a létrehozott felhasználót.

Következő lépések