Aggiungere o modificare condizioni di assegnazione di ruolo di Azure con Azure PowerShell
Una condizione di assegnazione di ruolo di Azure è un controllo aggiuntivo che è possibile aggiungere facoltativamente all'assegnazione di ruolo per fornire un controllo di accesso più granulare. Ad esempio, è possibile aggiungere una condizione che richiede che un oggetto abbia un tag specifico per leggere l'oggetto. Questo articolo descrive come aggiungere, modificare, elencare o eliminare condizioni per le assegnazioni di ruolo usando Azure PowerShell.
Prerequisiti
Per informazioni sui prerequisiti per aggiungere o modificare condizioni di assegnazione di ruolo, vedere Prerequisiti delle condizioni.
Aggiungi una condizione
Per aggiungere una condizione di assegnazione di ruolo, usare New-AzRoleAssignment. Il comando New-AzRoleAssignment include i parametri seguenti correlati alle condizioni.
Parametro | Tipo | Descrzione |
---|---|---|
Condition |
Stringa | Condizione con cui l'utente può essere concessa l'autorizzazione. |
ConditionVersion |
String | Versione della sintassi della condizione. Deve essere impostato su 2.0. Se Condition è specificato, ConditionVersion è necessario specificare anche . |
Nell'esempio seguente viene illustrato come inizializzare le variabili per assegnare il ruolo lettore di dati BLOB Archiviazione con una condizione. La condizione controlla se il nome del contenitore è uguale a "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"
Usare New-AzRoleAssignment per assegnare il ruolo con una condizione.
New-AzRoleAssignment -ObjectId $userObjectId -Scope $scope -RoleDefinitionId $roleDefinitionId -Description $description -Condition $condition -ConditionVersion $conditionVersion
Ecco un esempio di output:
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'))
In PowerShell, se la condizione include un segno di dollaro ($), è necessario anteporre un prefisso ('). Ad esempio, la condizione seguente usa segni di dollaro per delineare il nome della chiave del tag. Per altre informazioni sulle regole per le virgolette in PowerShell, vedere Informazioni sulle regole di virgolette.
$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'))"
Modificare una condizione
Per modificare una condizione di assegnazione di ruolo esistente, usare Set-AzRoleAssignment. È possibile modificare solo le Condition
proprietà , ConditionVersion
e Description
. Il -PassThru
parametro fa sì che Set-AzRoleAssignment restituisca l'assegnazione di ruolo aggiornata, che consente la visualizzazione o l'archiviazione in una variabile per un ulteriore uso.
Esistono due modi per modificare una condizione. È possibile usare l'oggetto PSRoleAssignment
o un file JSON.
Modificare una condizione usando l'oggetto PSRoleAssignment
Usare Get-AzRoleAssignment per ottenere l'assegnazione di ruolo esistente con una condizione come
PSRoleAssignment
oggetto .$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
Modificare la condizione.
$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'))"
Inizializzare la condizione e la descrizione.
$testRa.Condition = $condition $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
Usare Set-AzRoleAssignment per aggiornare la condizione per l'assegnazione di ruolo.
Set-AzRoleAssignment -InputObject $testRa -PassThru
Ecco un esempio di output:
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'))
Modificare una condizione usando un file JSON
Per modificare una condizione, è anche possibile fornire un file JSON come input. Di seguito viene illustrato un file JSON di esempio in cui Condition
e Description
vengono aggiornati. È necessario specificare tutte le proprietà nel file JSON per aggiornare una condizione.
{
"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>"
}
Usare Set-AzRoleAssignment per aggiornare la condizione per l'assegnazione di ruolo.
Set-AzRoleAssignment -InputFile "C:\path\roleassignment.json" -PassThru
Ecco un esempio di output:
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'))
Modificare le condizioni in più assegnazioni di ruolo
Se è necessario eseguire lo stesso aggiornamento a più assegnazioni di ruolo, è possibile usare un ciclo. I comandi seguenti eseguono l'attività seguente:
Trova le assegnazioni di ruolo in una sottoscrizione con
<find-condition-string-1>
o<find-condition-string-2>
stringhe nella condizione.$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) }
I comandi seguenti eseguono le attività seguenti:
Nella condizione delle assegnazioni di ruolo trovate, sostituisce
<condition-string>
con<replace-condition-string>
.Aggiornamenti le assegnazioni di ruolo con le modifiche.
$conditionString = "<condition-string>" $conditionStringReplacement = "<condition-string-replacement>" $updatedRoleAssignments = $foundRoleAssignments | ForEach-Object { $_.Condition = $_.Condition -replace $conditionString, $conditionStringReplacement; $_ } $updatedRoleAssignments | ForEach-Object { Set-AzRoleAssignment -InputObject $_ -PassThru }
Se le stringhe includono caratteri speciali, ad esempio parentesi quadre ([ ]), sarà necessario eseguire l'escape di questi caratteri con una barra rovesciata (\).
Elencare una condizione
Per elencare una condizione di assegnazione di ruolo, usare Get-AzRoleAssignment. Per altre informazioni, vedere Elencare le assegnazioni di ruolo di Azure con Azure PowerShell.
Eliminare una condizione
Per eliminare una condizione di assegnazione di ruolo, modificare la condizione di assegnazione di ruolo e impostare entrambe le Condition
proprietà e ConditionVersion
su una stringa vuota (""
) o $null
.
In alternativa, se si desidera eliminare sia l'assegnazione di ruolo che la condizione, è possibile usare il comando Remove-AzRoleAssignment . Per altre informazioni, vedere Rimuovere le assegnazioni di ruolo di Azure.