Kurz: Přidání podmínky přiřazení role pro omezení přístupu k objektům blob pomocí Azure CLI
Ve většině případů přiřazení role uděluje oprávnění, která potřebujete k prostředkům Azure. V některých případech ale můžete chtít poskytnout podrobnější řízení přístupu přidáním podmínky přiřazení role.
V tomto kurzu se naučíte:
- Přidání podmínky k přiřazení role
- Omezení přístupu k objektům blob na základě značky indexu objektů blob
Důležité
Řízení přístupu na základě atributů Azure (Azure ABAC) je obecně dostupné (GA) pro řízení přístupu ke službě Azure Blob Storage, Azure Data Lake Storage Gen2 a Frontám Azure pomocí request
resource
environment
, a atributů v úrovních výkonu účtu služby Azure Storage úrovně Standard i principal
Premium Storage. Atribut prostředku metadat kontejneru a objekt blob seznamu obsahují atribut požadavku v náhledu. Úplné informace o stavu funkcí ABAC pro Azure Storage najdete v tématu Stav funkcí podmínky ve službě Azure Storage.
Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.
Požadavky
Informace o požadavcích pro přidání nebo úpravu podmínek přiřazení role naleznete v tématu Požadavky na podmínky.
Podmínka
V tomto kurzu omezíte přístup k objektům blob s konkrétní značkou. Například přidáte podmínku k přiřazení role, aby Chandra mohl číst pouze soubory se značkou Project=Cascade.
Pokud se Chandra pokusí přečíst objekt blob bez značky Project=Cascade, přístup není povolený.
Tady je postup, jak podmínka vypadá v kódu:
(
(
!(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'
)
)
Krok 1: Přihlášení k Azure
Použijte příkaz az login a postupujte podle pokynů, které se zobrazí pro přihlášení k adresáři jako user Access Správa istrator nebo Owner.
az login
Pomocí příkazu az account show získejte ID vašich předplatných.
az account show
Určete ID předplatného a inicializujete proměnnou.
subscriptionId="<subscriptionId>"
Krok 2: Vytvoření uživatele
Pomocí příkazu az ad user create vytvořte uživatele nebo vyhledejte existujícího uživatele. V tomto kurzu se jako příklad používá Chandra.
Inicializuje proměnnou pro ID objektu uživatele.
userObjectId="<userObjectId>"
Krok 3: Nastavení úložiště
Přístup k úložišti objektů blob můžete autorizovat z Azure CLI pomocí přihlašovacích údajů Microsoft Entra nebo pomocí přístupového klíče účtu úložiště. Tento článek ukazuje, jak autorizovat operace úložiště objektů blob pomocí ID Microsoft Entra. Další informace najdete v tématu Rychlý start: Vytvoření, stažení a výpis objektů blob pomocí Azure CLI
Pomocí příkazu az storage account vytvořte účet úložiště, který je kompatibilní s funkcí indexu objektů blob. Další informace najdete v tématu Správa a vyhledání dat objektů blob Azure pomocí značek indexu objektů blob.
Pomocí příkazu az storage container vytvořte nový kontejner objektů blob v rámci účtu úložiště a nastavte úroveň anonymního přístupu na Privátní (bez anonymního přístupu).
K nahrání textového souboru do kontejneru použijte příkaz az storage blob upload .
Do textového souboru přidejte následující značku indexu objektu blob. Další informace najdete v tématu Použití značek indexu objektů blob ke správě a hledání dat ve službě Azure Blob Storage.
Poznámka:
Objekty blob také podporují možnost ukládat libovolná uživatelsky definovaná metadata klíč-hodnota. I když jsou metadata podobná značkě indexu objektů blob, musíte použít značky indexu objektů blob s podmínkami.
Key Hodnota Projekt Cascade Nahrajte do kontejneru druhý textový soubor.
Do druhého textového souboru přidejte následující značku indexu objektu blob.
Key Hodnota Projekt Baker Inicializovat následující proměnné s názvy, které jste použili.
resourceGroup="<resourceGroup>" storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameCascade="<blobNameCascade>" blobNameBaker="<blobNameBaker>"
Krok 4: Přiřazení role s podmínkou
Inicializuje proměnné role Čtenář dat v objektu blob služby Storage.
roleDefinitionName="Storage Blob Data Reader" roleDefinitionId="2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
Inicializuje obor pro skupinu prostředků.
scope="/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
Inicializuje podmínku.
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'))"
Pokud je v Bash povolené rozšíření historie, může se zpráva
bash: !: event not found
zobrazit kvůli vykřičníku (!). V tomto případě můžete zakázat rozšíření historie pomocí příkazuset +H
. K opětovnému povolení rozšíření historie použijteset -H
.V Bash má znak dolaru ($) zvláštní význam pro rozšíření. Pokud vaše podmínka obsahuje znak dolaru ($), možná ho budete muset předponovat zpětným lomítkem (\). Tato podmínka například používá znak dolaru k označení názvu klíče značky. Další informace opravidlech
Inicializace verze podmínky a popisu
conditionVersion="2.0" description="Read access to blobs with the tag Project=Cascade"
Pomocí příkazu az role assignment create přiřaďte uživateli roli Čtenář dat objektů blob služby Storage s podmínkou v oboru skupiny prostředků.
az role assignment create --assignee-object-id $userObjectId --scope $scope --role $roleDefinitionId --description "$description" --condition "$condition" --condition-version $conditionVersion
Tady je příklad výstupu:
{ "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" }
Krok 5: (Volitelné) Zobrazení podmínky na webu Azure Portal
Na webu Azure Portal otevřete skupinu prostředků.
Vyberte Řízení přístupu (IAM) .
Na kartě Přiřazení rolí vyhledejte přiřazení role.
Ve sloupci Podmínka vyberte Zobrazit/Upravit a zobrazte podmínku.
Krok 6: Otestování podmínky
Otevřete nové příkazové okno.
Pomocí příkazu az login se přihlaste jako Chandra.
az login
Inicializovat následující proměnné s názvy, které jste použili.
storageAccountName="<storageAccountName>" containerName="<containerName>" blobNameBaker="<blobNameBaker>" blobNameCascade="<blobNameCascade>"
Pomocí příkazu az storage blob show se pokuste přečíst vlastnosti souboru pro projekt Baker.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameBaker --auth-mode login
Tady je příklad výstupu. Všimněte si, že soubor nemůžete přečíst z důvodu podmínky, kterou jste přidali.
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.
Přečtěte si vlastnosti souboru pro kaskádový projekt.
az storage blob show --account-name $storageAccountName --container-name $containerName --name $blobNameCascade --auth-mode login
Tady je příklad výstupu. Všimněte si, že můžete číst vlastnosti souboru, protože má značku 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, ... }
Krok 7: (Volitelné) Úprava podmínky
V druhém příkazovém okně získejte přiřazení role, které jste přidali, pomocí příkazu az role assignment list .
az role assignment list --assignee $userObjectId --resource-group $resourceGroup
Výstup je podobný tomuto:
[ { "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" } ]
Vytvořte soubor JSON s následujícím formátem a aktualizujte
condition
vlastnosti.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" }
Pomocí příkazu az role assignment update aktualizujte podmínku přiřazení role.
az role assignment update --role-assignment "./path/roleassignment.json"
Krok 8: Vyčištění prostředků
Pomocí příkazu az role assignment delete odeberte přiřazení role a podmínku, kterou jste přidali.
az role assignment delete --assignee $userObjectId --role "$roleDefinitionName" --resource-group $resourceGroup
Odstraňte účet úložiště, který jste vytvořili.
Odstraňte uživatele, který jste vytvořili.