Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 návodu se naučíte, jak:
- Přidání podmínky k přiřazení role
- Omezení přístupu k blobům na základě indexové značky blobu
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í atributů request, resource, environment a principal v úrovních výkonu standardních a prémiových účtů služby Azure Storage. Objekt blob seznamu v současné době obsahuje atribut požadavku a atribut požadavku snímku pro hierarchický obor názvů ve verzi PREVIEW. Úplné informace o stavu funkcí ABAC pro Azure Storage najdete v tématu Stav funkcí podmínky ve službě Azure Storage.
Podívejte se na doplňkové podmínky užívání služby Microsoft Azure Preview pro právní podmínky, které se vztahují na funkce Azure, jež jsou ve verzi beta, Preview nebo jinak ještě nejsou obecně dostupné.
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ý.
Takto vypadá podmínka 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.StorageV 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 -AllowPrereleaseZavřete a znovu otevřete PowerShell pro aktualizaci session.
Krok 2: Přihlášení k Azure
Použijte příkaz Connect-AzAccount a postupujte podle pokynů, které se zobrazí pro přihlášení k adresáři jako správce uživatelských přístupů nebo vlastníka.
Connect-AzAccountPomocí rutiny Get-AzSubscription můžete zobrazit seznam všech vašich předplatných.
Get-AzSubscriptionUrč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 naleznete v článku Správa a vyhledávání dat Azure Blob 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.
Klíč Hodnota Projekt Kaskáda Nahrajte do kontejneru druhý textový soubor.
Do druhého textového souboru přidejte následující značku indexu objektu blob.
Klíč Hodnota Projekt Pekař Inicializujte následující proměnné podle názvů, které jste použili.
$resourceGroup = "<resourceGroup>" $storageAccountName = "<storageAccountName>" $containerName = "<containerName>" $blobNameCascade = "<blobNameCascade>" $blobNameBaker = "<blobNameBaker>"
Krok 5: Přiřazení role s podmínkou
Inicializovat proměnné role Storage Blob Data Reader.
$roleDefinitionName = "Storage Blob Data Reader" $roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"Inicializovat obor pro skupinu prostředků.
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"Inicializujte 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á znaky dolaru k odlišení názvu klíče značky.
Inicializujte verzi podmínky a popis.
$conditionVersion = "2.0" $description = "Read access to blobs with the tag Project=Cascade"Pomocí příkazu New-AzRoleAssignment přiřaďte roli Čtenář dat objektů blob služby Storage s podmínkou uživateli v rámci skupiny prostředků.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersionTady 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 záložce 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í Connect-AzAccount se přihlaste jako Chandra.
Connect-AzAccountInicializujte následující proměnné podle názvů, 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 $storageAccountNamePomocí rutiny Get-AzStorageBlob se pokuste přečíst soubor pro projekt Baker.
Get-AzStorageBlob -Container $containerName -Blob $blobNameBaker -Context $bearerCtxTady 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 CommandPřečtěte si soubor pro projekt Cascade.
Get-AzStorageBlob -Container $containerName -Blob $blobNameCascade -Context $bearerCtxTady 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 $userObjectIdUpravte 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'))"Inicializuj 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 -PassThruTady 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 $resourceGroupOdstraňte účet úložiště, který jste vytvořili.
Odstraňte uživatele, který jste vytvořili.