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
, ConditionVersion
en 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
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
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'))"
Initialiseer de voorwaarde en beschrijving.
$testRa.Condition = $condition $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
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.