Kurz: Přidání podmínky přiřazení role pro omezení přístupu k objektům blob pomocí Azure PowerShellu
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: Instalace požadavků
Otevřete okno PowerShellu.
Pomocí modulu Get-InstalledModule zkontrolujte verze nainstalovaných modulů.
Get-InstalledModule -Name Az Get-InstalledModule -Name Az.Resources Get-InstalledModule -Name Az.Storage
V případě potřeby nainstalujte požadované verze modulů Az, Az.Resources a Az.Storage pomocí modulu Install-Module.
Install-Module -Name Az -RequiredVersion 5.5.0 Install-Module -Name Az.Resources -RequiredVersion 3.2.1 Install-Module -Name Az.Storage -RequiredVersion 2.5.2-preview -AllowPrerelease
Zavřete a znovu otevřete PowerShell, aby se aktualizovala relace.
Krok 2: Přihlášení k Azure
Použijte příkaz Připojení-AzAccount a postupujte podle pokynů, které se zobrazí pro přihlášení k adresáři jako uživatelský přístup Správa istrator nebo vlastník.
Connect-AzAccount
Pomocí rutiny Get-AzSubscription můžete zobrazit seznam všech vašich předplatných.
Get-AzSubscription
Určete ID předplatného a inicializujete proměnnou.
$subscriptionId = "<subscriptionId>"
Nastavte předplatné jako aktivní předplatné.
$context = Get-AzSubscription -SubscriptionId $subscriptionId Set-AzContext $context
Krok 3: Vytvoření uživatele
Pomocí rutiny New-MgUser 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 4: Nastavení úložiště
Pomocí rutiny New-AzStorageAccount 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í rutiny New-AzStorageContainer vytvořte nový kontejner objektů blob v rámci účtu úložiště a nastavte úroveň anonymního přístupu na Private (bez anonymního přístupu).
K nahrání textového souboru do kontejneru použijte Set-AzStorageBlobContent .
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 5: 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 vaše podmínka v PowerShellu obsahuje znak dolaru ($), musíte ho předponovat pomocí zpětného znaménka ('). Tato podmínka například používá znak dolaru k označení názvu klíče značky.
Inicializace verze podmínky a popisu
$conditionVersion = "2.0" $description = "Read access to blobs with the tag Project=Cascade"
Pomocí rutiny New-AzRoleAssignment přiřaďte roli Čtenář dat objektů blob služby Storage s podmínkou uživateli v oboru skupiny prostředků.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
Tady je příklad výstupu:
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso ft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : Chandra SignInName : chandra@contoso.com RoleDefinitionName : Storage Blob Data Reader RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1 ObjectId : <userObjectId> ObjectType : User CanDelegate : False Description : Read access to blobs with the tag Project=Cascade ConditionVersion : 2.0 Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/co ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'))
Krok 6: (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 7: Otestování podmínky
Otevřete nové okno PowerShellu.
Pomocí Připojení-AzAccount se přihlaste jako Chandra.
Connect-AzAccount
Inicializovat následující proměnné s názvy, které jste použili.
$storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameBaker = "<blobNameBaker>" $blobNameCascade = "<blobNameCascade>"
Pomocí rutiny New-AzStorageContext vytvořte konkrétní kontext pro snadnější přístup k účtu úložiště.
$bearerCtx = New-AzStorageContext -StorageAccountName $storageAccountName
Pomocí rutiny Get-AzStorageBlob se pokuste přečíst soubor pro projekt Baker.
Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtx
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.
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. ErrorCode: AuthorizationPermissionMismatch ErrorMessage: This request is not authorized to perform this operation using this permission. RequestId: <requestId> Time: Sat, 24 Apr 2021 13:26:25 GMT At line:1 char:1 + Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Con ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : CloseError: (:) [Get-AzStorageBlob], StorageException + FullyQualifiedErrorId : StorageException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.GetAzureStorageBlob Command
Přečtěte si soubor pro kaskádový projekt.
Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtx
Tady je příklad výstupu. Všimněte si, že soubor můžete přečíst, protože obsahuje značku Project=Cascade.
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
Krok 8: (Volitelné) Úprava podmínky
V druhém okně PowerShellu pomocí rutiny Get-AzRoleAssignment získejte přiřazení role, které jste přidali.
$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
Upravte 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' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Baker'))"
Inicializuje podmínku a popis.
$testRa.Condition = $condition $testRa.Description = "Read access to blobs with the tag Project=Cascade or Project=Baker"
K aktualizaci podmínky přiřazení role použijte Set-AzRoleAssignment .
Set-AzRoleAssignment -InputObject $testRa -PassThru
Tady je příklad výstupu:
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microso ft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : Chandra SignInName : chandra@contoso.com RoleDefinitionName : Storage Blob Data Reader RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1 ObjectId : <userObjectId> ObjectType : User CanDelegate : False Description : Read access to blobs with the tag Project=Cascade or Project=Baker ConditionVersion : 2.0 Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/co ntainers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' OR @Resource[Microsoft.S torage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Baker'))
Krok 9: Vyčištění prostředků
Pomocí remove-AzRoleAssignment odeberte přiřazení a podmínku role, kterou jste přidali.
Remove-AzRoleAssignment -ObjectId $userObjectId -RoleDefinitionName $roleDefinitionName -ResourceGroupName $resourceGroup
Odstraňte účet úložiště, který jste vytvořili.
Odstraňte uživatele, který jste vytvořili.