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 request
való hozzáférés szabályozásához a resource
environment
standard é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.
Ha Chandra a Project=Cascade címke nélkül próbál egy blobot olvasni, a hozzáférés nem engedélyezett.
Í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
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
Az az account show használatával lekérheti az előfizetések azonosítóját.
az account show
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
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.
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
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.
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).
Az az storage blobfeltöltéssel szöveges fájlt tölthet fel a tárolóba.
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 Töltsön fel egy második szöveges fájlt a tárolóba.
Adja hozzá a következő blobindexcímkét a második szövegfájlhoz.
Kulcs Érték Project Baker 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
Inicializálja a Storage Blob Adatolvasó szerepkör változóit.
roleDefinitionName="Storage Blob Data Reader" roleDefinitionId="2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
Inicializálja az erőforráscsoport hatókörét.
scope="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
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 paranccsalset +H
. Az előzménybővítés újbóli engedélyezéséhez használja a következőtset -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.
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"
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
Az Azure Portalon nyissa meg az erőforráscsoportot.
Válassza a Hozzáférés-vezérlés (IAM) lehetőséget.
A Szerepkör-hozzárendelések lapon keresse meg a szerepkör-hozzárendelést.
A Feltétel oszlopban válassza a Nézet/Szerkesztés lehetőséget a feltétel megtekintéséhez.
6. lépés: A feltétel tesztelése
Nyisson meg egy új parancsablakot.
Az az login használatával jelentkezzen be Chandra néven.
az login
Inicializálja a következő változókat a használt névvel.
storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameBaker="<blobNameBaker>" blobNameCascade="<blobNameCascade>"
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.
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
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" } ]
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" }
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
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
Törölje a létrehozott tárfiókot.
Törölje a létrehozott felhasználót.