Přidání nebo úprava podmínek přiřazení rolí Azure pomocí Azure PowerShellu
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.
Parametr | 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 pod 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 označení názvu klíče značky. 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. Condition
Lze upravit pouze objekty , ConditionVersion
a Description
vlastnosti. Parametr -PassThru
způsobí , že Set-AzRoleAssignment vrátí aktualizované přiřazení role, což umožňuje vizualizaci nebo úložiště v proměnné pro další 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í rutiny Get-AzRoleAssignment získejte existující přiřazení role s podmínkou
PSRoleAssignment
jako objekt.$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
Upravte 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'))"
Inicializuje 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 -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í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 aktualizaci více přiřazení rolí, 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
<find-condition-string-1>
podmínkou nebo<find-condition-string-2>
řetězce.$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>
.Aktualizace přiřazení rolí se změnami.
$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, například hranaté závorky ([ ]), budete muset u těchto znaků utéct zpětným lomítkem (\).
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 (""
) nebo $null
ConditionVersion
.
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.