Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
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 $userObjectIdModifiez 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 -PassThruVoici 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.