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.
Podmínka přiřazení role Azure je další kontrola, kterou můžete volitelně přidat do přiřazení role, abyste zajistili podrobnější řízení přístupu. Můžete například přidat podmínku, která vyžaduje, aby objekt měl ke čtení objektu určitou značku. Tento článek popisuje, jak přidat, upravit, vypsat nebo odstranit podmínky pro přiřazení rolí pomocí Azure PowerShellu.
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.
Přidat podmínku
Pokud chcete přidat podmínku přiřazení role, použijte New-AzRoleAssignment. Příkaz New-AzRoleAssignment obsahuje následující parametry související s podmínkami.
| Parameter | Typ | Description |
|---|---|---|
Condition |
String | Podmínka, pod kterou může uživatel udělit oprávnění. |
ConditionVersion |
String | Verze syntaxe podmínky Musí být nastavená na hodnotu 2.0. Je-li Condition zadán, ConditionVersion musí být zadán také. |
Následující příklad ukazuje, jak inicializovat proměnné pro přiřazení role Čtenář dat objektu blob služby Storage s podmínkou. Podmínka zkontroluje, jestli se název kontejneru rovná objektu blobs-example-container.
$subscriptionId = "<subscriptionId>"
$resourceGroup = "<resourceGroup>"
$roleDefinitionName = "Storage Blob Data Reader"
$roleDefinitionId = "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"
$userObjectId = "<userObjectId>"
$scope = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup"
$description = "Read access if container name equals blobs-example-container"
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))"
$conditionVersion = "2.0"
Pomocí rutiny New-AzRoleAssignment přiřaďte roli s podmínkou.
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/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
DisplayName : User1
SignInName : user1@contoso.com
RoleDefinitionName : Storage Blob Data Reader
RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
ObjectId : <userObjectId>
ObjectType : User
CanDelegate : False
Description : Read access if container name equals blobs-example-container
ConditionVersion : 2.0
Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))
Pokud vaše podmínka v PowerShellu obsahuje znak dolaru ($), musíte ho předponovat pomocí zpětného znaménka ('). Například následující podmínka používá znak dolaru k vymezení názvu klíče tagu. Další informace o pravidlech uvozovek v PowerShellu najdete v tématu O pravidlech uvozovek.
$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'))"
Úprava podmínky
Pokud chcete upravit existující podmínku přiřazení role, použijte Set-AzRoleAssignment. Lze upravit pouze vlastnosti Condition, ConditionVersion a Description. Parametr -PassThru způsobí vrácení aktualizovaného přiřazení role pomocí Set-AzRoleAssignment, což umožňuje vizualizaci nebo uložení do proměnné k dalšímu použití.
Podmínku můžete upravit dvěma způsoby. Můžete použít PSRoleAssignment objekt nebo soubor JSON.
Úprava podmínky pomocí objektu PSRoleAssignment
Pomocí Get-AzRoleAssignment získejte existující přiřazení role jako objekt s podmínkou
PSRoleAssignment.$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectIdUpravte podmínku.
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))"Inicializujte podmínku a popis.
$testRa.Condition = $condition $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"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/Microsoft.Authorization/roleAssignments/<roleAssignmentId> Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup> DisplayName : User1 SignInName : user1@contoso.com RoleDefinitionName : Storage Blob Data Reader RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1 ObjectId : <userObjectId> ObjectType : User CanDelegate : False Description : Read access if container name equals blobs-example-container or blobs-example-container2 ConditionVersion : 2.0 Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))
Úprava podmínky pomocí souboru JSON
Pokud chcete upravit podmínku, můžete jako vstup zadat také soubor JSON. Následuje příklad souboru JSON, kde Condition a Description jsou aktualizovány. Chcete-li aktualizovat podmínku, musíte zadat všechny vlastnosti v souboru JSON.
{
"RoleDefinitionId": "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
"ObjectId": "<userObjectId>",
"ObjectType": "User",
"Scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>",
"Condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))",
"ConditionVersion": "2.0",
"CanDelegate": false,
"Description": "Read access if container name equals blobs-example-container or blobs-example-container2",
"RoleAssignmentId": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>"
}
K aktualizaci podmínky přiřazení role použijte Set-AzRoleAssignment .
Set-AzRoleAssignment -InputFile "C:\path\roleassignment.json" -PassThru
Tady je příklad výstupu:
RoleAssignmentId : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
Scope : /subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>
DisplayName : User1
SignInName : user1@contoso.com
RoleDefinitionName : Storage Blob Data Reader
RoleDefinitionId : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
ObjectId : <userObjectId>
ObjectType : User
CanDelegate : False
Description : Read access if container name equals blobs-example-container or blobs-example-container2
ConditionVersion : 2.0
Condition : ((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))
Úprava podmínek v několika přiřazeních rolí
Pokud potřebujete provést stejnou změnu přiřazení rolí opakovaně, můžete použít smyčku. Následující příkazy provádějí následující úlohu:
Najde přiřazení rolí v předplatném s podmínkou obsahující řetězce
<find-condition-string-1>nebo<find-condition-string-2>.$tenantId = "<your-tenant-id>" $subscriptionId = "<your-subscription-id>"; $scope = "/subscriptions/$subscriptionId" $findConditionString1 = "<find-condition-string-1>" $findConditionString2 = "<find-condition-string-2>" Connect-AzAccount -TenantId $tenantId -SubscriptionId $subscriptionId $roleAssignments = Get-AzRoleAssignment -Scope $scope $foundRoleAssignments = $roleAssignments | Where-Object { ($_.Condition -Match $findConditionString1) -Or ($_.Condition -Match $findConditionString2) }
Následující příkazy provádějí následující úlohy:
V podmínce nalezených přiřazení rolí nahradí
<condition-string>za<replace-condition-string>.Aktualizuje přiřazení rolí na základě provedených změn.
$conditionString = "<condition-string>" $conditionStringReplacement = "<condition-string-replacement>" $updatedRoleAssignments = $foundRoleAssignments | ForEach-Object { $_.Condition = $_.Condition -replace $conditionString, $conditionStringReplacement; $_ } $updatedRoleAssignments | ForEach-Object { Set-AzRoleAssignment -InputObject $_ -PassThru }
Pokud řetězce obsahují speciální znaky, jako například hranaté závorky ([ ]), budete muset tyto znaky zaznakovat pomocí zpětného lomítka (\).
Výpis podmínky
Pokud chcete vypsat podmínku přiřazení role, použijte Get-AzRoleAssignment. Další informace najdete v tématu Výpis přiřazení rolí Azure pomocí Azure PowerShellu.
Odstranění podmínky
Chcete-li odstranit podmínku přiřazení role, upravte podmínku přiřazení role a nastavte obě Condition vlastnosti na prázdný řetězec (ConditionVersion) nebo ""$null .
Případně pokud chcete odstranit přiřazení role i podmínku, můžete použít příkaz Remove-AzRoleAssignment . Další informace najdete v tématu věnovaném odebrání přiřazení rolí v Azure.