Delen via


Voorwaarden voor Azure-roltoewijzing toevoegen of bewerken met behulp van Azure PowerShell

Een voorwaarde voor azure-roltoewijzing is een extra controle dat u desgewenst aan uw roltoewijzing kunt toevoegen om nauwkeuriger toegangsbeheer te bieden. U kunt bijvoorbeeld een voorwaarde toevoegen waarvoor een object een specifieke tag moet hebben om het object te lezen. In dit artikel wordt beschreven hoe u voorwaarden voor uw roltoewijzingen toevoegt, bewerkt, vermeldt of verwijdert met behulp van Azure PowerShell.

Vereisten

Zie Voorwaarden voor informatie over de vereisten voor het toevoegen of bewerken van voorwaarden voor roltoewijzing.

Een voorwaarde toevoegen

Als u een voorwaarde voor roltoewijzing wilt toevoegen, gebruikt u New-AzRoleAssignment. De opdracht New-AzRoleAssignment bevat de volgende parameters met betrekking tot voorwaarden.

Parameter Type Omschrijving
Condition String Voorwaarde waaronder de gebruiker toestemming kan krijgen.
ConditionVersion String Versie van de voorwaardesyntaxis. Moet worden ingesteld op 2.0. Als Condition dit is opgegeven, ConditionVersion moet ook worden opgegeven.

In het volgende voorbeeld ziet u hoe u de variabelen initialiseert om de rol Opslagblobgegevenslezer met een voorwaarde toe te wijzen. De voorwaarde controleert of de containernaam gelijk is aan '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"

Gebruik New-AzRoleAssignment om de rol met een voorwaarde toe te wijzen.

New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion

Hier is een voorbeeld van de uitvoer:

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'))

Als uw voorwaarde in PowerShell een dollarteken ($) bevat, moet u het voorvoegsel voorzien van een backtick ('). In de volgende voorwaarde worden bijvoorbeeld dollartekens gebruikt om de naam van de tagsleutel af te bakenen. Zie Over quotingsregels voor regels voor aanhalingstekens in PowerShell voor meer informatie over regels voor aanhalingstekens.

$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'))"

Een voorwaarde bewerken

Als u een bestaande voorwaarde voor roltoewijzing wilt bewerken, gebruikt u Set-AzRoleAssignment. Alleen de Condition, ConditionVersionen Description eigenschappen kunnen worden bewerkt. De -PassThru parameter zorgt ervoor dat Set-AzRoleAssignment de bijgewerkte roltoewijzing retourneert , waardoor visualisatie of opslag in een variabele mogelijk is voor verder gebruik.

Er zijn twee manieren om een voorwaarde te bewerken. U kunt het PSRoleAssignment object of een JSON-bestand gebruiken.

Een voorwaarde bewerken met behulp van het PSRoleAssignment-object

  1. Gebruik Get-AzRoleAssignment om de bestaande roltoewijzing met een voorwaarde als object PSRoleAssignment op te halen.

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Bewerk de voorwaarde.

    $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. Initialiseer de voorwaarde en beschrijving.

    $testRa.Condition = $condition
    $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
    
  4. Gebruik Set-AzRoleAssignment om de voorwaarde voor de roltoewijzing bij te werken.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Hier is een voorbeeld van de uitvoer:

    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'))
    

Een voorwaarde bewerken met behulp van een JSON-bestand

Als u een voorwaarde wilt bewerken, kunt u ook een JSON-bestand opgeven als invoer. Hieronder ziet u een voorbeeld van een JSON-bestand waarin Condition en Description worden bijgewerkt. U moet alle eigenschappen in het JSON-bestand opgeven om een voorwaarde bij te werken.

{
    "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>"
}

Gebruik Set-AzRoleAssignment om de voorwaarde voor de roltoewijzing bij te werken.

Set-AzRoleAssignment -InputFile "C:\path\roleassignment.json" -PassThru

Hier is een voorbeeld van de uitvoer:

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'))

Voorwaarden bewerken in meerdere roltoewijzingen

Als u dezelfde update wilt uitvoeren voor meerdere roltoewijzingen, kunt u een lus gebruiken. Met de volgende opdrachten voert u de volgende taak uit:

  • Hiermee vindt u roltoewijzingen in een abonnement met <find-condition-string-1> of <find-condition-string-2> tekenreeksen in de voorwaarde.

    $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) }
    

Met de volgende opdrachten worden de volgende taken uitgevoerd:

  • Vervang in de voorwaarde van de gevonden roltoewijzingen door <condition-string> <replace-condition-string>.

  • Hiermee worden de roltoewijzingen bijgewerkt met de wijzigingen.

    $conditionString = "<condition-string>"
    $conditionStringReplacement = "<condition-string-replacement>"
    $updatedRoleAssignments = $foundRoleAssignments | ForEach-Object { $_.Condition = $_.Condition -replace $conditionString, $conditionStringReplacement; $_ }
    $updatedRoleAssignments | ForEach-Object { Set-AzRoleAssignment -InputObject $_ -PassThru }
    

Als tekenreeksen speciale tekens bevatten, zoals vierkante haken ([ ]), moet u deze tekens escapen met een backslash (\).

Een voorwaarde weergeven

Als u een voorwaarde voor roltoewijzing wilt weergeven, gebruikt u Get-AzRoleAssignment. Zie Azure-roltoewijzingen weergeven met behulp van Azure PowerShell voor meer informatie.

Een voorwaarde verwijderen

Als u een voorwaarde voor roltoewijzing wilt verwijderen, bewerkt u de voorwaarde voor roltoewijzing en stelt u zowel de als de Condition eigenschappen in op een lege tekenreeks ("") of $null.ConditionVersion

Als u zowel de roltoewijzing als de voorwaarde wilt verwijderen, kunt u ook de opdracht Remove-AzRoleAssignment gebruiken. Zie Azure-roltoewijzingen verwijderen voor meer informatie.

Volgende stappen