Sdílet prostřednictvím


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. ConditionLze upravit pouze objekty , ConditionVersiona 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

  1. 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
    
  2. 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'))"
    
  3. Inicializuje podmínku a popis.

    $testRa.Condition = $condition
    $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
    
  4. 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 $nullConditionVersion .

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.

Další kroky