Partager via


Ajouter ou modifier des conditions d’attribution de rôle Azure à l’aide d’Azure PowerShell

Une condition d’attribution de rôle Azure est une vérification supplémentaire que vous pouvez éventuellement ajouter à votre attribution de rôle pour fournir un contrôle d’accès plus précis. Par exemple, vous pouvez ajouter une condition qui nécessite qu’un objet ait une balise spécifique pour lire l’objet. Cet article explique comment ajouter, modifier, lister ou supprimer des conditions pour vos attributions de rôles à l’aide d’Azure PowerShell.

Prerequisites

Pour plus d’informations sur les conditions préalables à l’ajout ou à la modification des conditions d’attribution de rôle, consultez Conditions préalables.

Ajouter une condition

Pour ajouter une condition d’attribution de rôle, utilisez New-AzRoleAssignment. La commande New-AzRoleAssignment inclut les paramètres suivants liés aux conditions.

Paramètre Type Descriptif
Condition Chaîne Condition sous laquelle l’utilisateur peut recevoir l’autorisation.
ConditionVersion Chaîne Version de la syntaxe de condition. Doit être défini sur 2.0. Si Condition est spécifié, ConditionVersion doit également être spécifié.

L’exemple suivant montre comment initialiser les variables pour affecter le rôle Lecteur de données Blob de stockage avec une condition. La condition vérifie si le nom du conteneur est égal à « 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"

Utilisez New-AzRoleAssignment pour attribuer le rôle avec une condition.

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

Voici un exemple de sortie :

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

Dans PowerShell, si votre condition comprend un symbole dollar ($), vous devez le faire précéder d’un guillemet inversé (`). Par exemple, la condition suivante utilise des signes dollar pour délimiter le nom de clé de balise. Pour plus d’informations sur les règles de guillemets dans PowerShell, consultez À propos des règles de guillemets.

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

Modifier une condition

Pour modifier une condition d’attribution de rôle existante, utilisez Set-AzRoleAssignment. Seules les propriétés Condition, ConditionVersion, et Description peuvent être modifiées. Le -PassThru paramètre amène Set-AzRoleAssignment à retourner l’attribution de rôle mise à jour, ce qui permet la visualisation ou le stockage dans une variable pour une utilisation ultérieure.

Il existe deux façons de modifier une condition. Vous pouvez utiliser l’objet PSRoleAssignment ou un fichier JSON.

Modifier une condition à l’aide de l’objet PSRoleAssignment

  1. Utilisez Get-AzRoleAssignment pour obtenir l’attribution de rôle existante avec une condition en tant qu’objet PSRoleAssignment .

    $testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
    
  2. Modifiez la condition.

    $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. Initialisez la condition et la description.

    $testRa.Condition = $condition
    $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
    
  4. Utilisez Set-AzRoleAssignment pour mettre à jour la condition de l’attribution de rôle.

    Set-AzRoleAssignment -InputObject $testRa -PassThru
    

    Voici un exemple de sortie :

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

Modifier une condition à l’aide d’un fichier JSON

Pour modifier une condition, vous pouvez également fournir un fichier JSON en tant qu’entrée. Voici un exemple de fichier JSON où Condition et Description sont mis à jour. Vous devez spécifier toutes les propriétés du fichier JSON pour mettre à jour une condition.

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

Utilisez Set-AzRoleAssignment pour mettre à jour la condition de l’attribution de rôle.

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

Voici un exemple de sortie :

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

Modifier les conditions dans plusieurs attributions de rôles

Si vous devez effectuer la même mise à jour vers plusieurs attributions de rôles, vous pouvez utiliser une boucle. Les commandes suivantes effectuent la tâche suivante :

  • Recherche les attributions de rôles dans un abonnement avec les chaînes <find-condition-string-1> ou <find-condition-string-2> dans la condition.

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

Les commandes suivantes effectuent les tâches suivantes :

  • Remplace <condition-string> par <replace-condition-string> dans les conditions des attributions de rôles trouvées.

  • Met à jour les attributions de rôles avec les modifications.

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

Si les chaînes incluent des caractères spéciaux, tels que des crochets ([ ]), vous devez placer ces caractères dans une séquence d’échappement avec une barre oblique inverse (\).

Répertorier une condition

Pour répertorier une condition d’attribution de rôle, utilisez Get-AzRoleAssignment. Pour plus d’informations, consultez Répertorier les attributions de rôles Azure à l’aide d’Azure PowerShell.

Supprimer une condition

Pour supprimer une condition d’attribution de rôle, modifiez la condition d’attribution de rôle et définissez les propriétés Condition et ConditionVersion sur une chaîne vide ("") ou $null.

Sinon, si vous souhaitez supprimer à la fois l’attribution de rôle et la condition, vous pouvez utiliser la commande Remove-AzRoleAssignment . Pour plus d’informations, consultez Supprimer des attributions de rôles Azure.

Étapes suivantes