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 oblige un objet à porter une étiquette spécifique pour être lu. Cet article explique comment ajouter, modifier, lister ou supprimer des conditions pour vos attributions de rôles à l’aide d’Azure PowerShell.
Prérequis
Pour plus d’informations sur les prérequis à l’ajout ou à la modification des conditions d’attribution de rôle, consultez Prérequis aux conditions.
Ajouter une condition
Pour ajouter une condition d’attribution de rôle, utilisez New-AzRoleAssignment. La commande New-AzRoleAssignment comprend les paramètres suivants liés aux conditions.
Paramètre | Type | Description |
---|---|---|
Condition |
Chaîne | Condition sous laquelle l’utilisateur peut se voir accorder une 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 attribuer le rôle Lecteur des données Blob du stockage avec une condition. La condition vérifie si le nom du conteneur correspond à « 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 signe 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é d’étiquette. Pour plus d’informations sur les règles de liées aux guillemets dans PowerShell, consultez À propos des règles liées aux 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. Si vous spécifiez le paramètre -PassThru
, Set-AzRoleAssignment retourne 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
Utilisez Get-AzRoleAssignment pour obtenir l’attribution de rôle existante avec une condition comme objet
PSRoleAssignment
.$testRa = Get-AzRoleAssignment -Scope $scope -RoleDefinitionName $roleDefinitionName -ObjectId $userObjectId
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'))"
Initialisez la condition et la description.
$testRa.Condition = $condition $testRa.Description = "Read access if container name equals blobs-example-container or blobs-example-container2"
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 comme entrée. Le code suivant montre un exemple de fichier JSON où Condition
et Description
sont mis à jour. Vous devez spécifier toutes les propriétés dans le 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 :
Dans la condition des attributions de rôles trouvées, remplace
<condition-string>
par<replace-condition-string>
.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 échapper à ces caractères avec une barre oblique inverse (\).
Lister une condition
Pour lister une condition d’attribution de rôle, utilisez Get-AzRoleAssignment. Pour plus d’informations, consultez Lister les attributions de rôles Azure avec Azure PowerShell.
Supprimer une condition
Pour supprimer une condition d’attribution de rôle, modifiez-la en définissant les deux propriétés Condition
et ConditionVersion
sur une chaîne vide (""
) ou $null
.
Si vous voulez supprimer à la fois l’attribution de rôle et la condition, vous pouvez également utiliser la commande Remove-AzRoleAssignment. Pour plus d’informations, consultez Supprimer des attributions de rôles Azure.