Condividi tramite


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 Conditionproprietà , ConditionVersione 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

  1. 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
    
  2. 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'))"
    
  3. Inizializzare la condizione e la descrizione.

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

Passaggi successivi