Attribuer des rôles Azure à l’aide d’Azure CLI

Le contrôle d’accès en fonction du rôle Azure (Azure RBAC) est le système d’autorisation que vous utilisez pour gérer l’accès aux ressources Azure. Pour accorder l’accès, vous devez attribuer des rôles aux utilisateurs, aux groupes, aux principaux de service ou aux identités managées avec une étendue particulière. Cet article explique comment attribuer des rôles à l’aide d’Azure CLI.

Prérequis

Pour attribuer des rôles, vous devez disposer des éléments suivants :

Procédure d’attribution d’un rôle Azure

L’attribution d’un rôle se compose de trois éléments : un principal de sécurité, une définition de rôle et une étendue.

Étape 1 : Déterminer qui a besoin d’un accès

Vous pouvez attribuer un rôle à un utilisateur, à un groupe, à un principal de service ou à une identité managée. Pour attribuer un rôle, vous devrez peut-être spécifier l’ID unique de l’objet. L’ID a le format : 11111111-1111-1111-1111-111111111111. Vous pouvez récupérer l’ID à l’aide du Portail Azure ou d’Azure CLI.

Utilisateur

Pour un utilisateur Microsoft Entra, obtenez le nom d’utilisateur principal, tel que patlong@contoso.com l’ID d’objet utilisateur. Pour récupérer l’ID de l’objet, vous pouvez utiliser az ad user show.

az ad user show --id "{principalName}" --query "id" --output tsv

Groupe

Pour un groupe Microsoft Entra, vous avez besoin de l’ID d’objet de groupe. Pour obtenir l’ID d’objet, vous pouvez utiliser az ad group show ou az ad group list.

az ad group show --group "{groupName}" --query "id" --output tsv

Principal du service

Pour un principal de service Microsoft Entra (identité utilisée par une application), vous avez besoin de l’ID d’objet du principal de service. Pour récupérer l’ID de l’objet, vous pouvez utiliser az ad sp list. Pour un principal de service, utilisez l’ID d’objet et non l’ID d’application.

az ad sp list --all --query "[].{displayName:displayName, id:id}" --output tsv
az ad sp list --display-name "{displayName}"

Identité gérée

Pour une identité managée affectée par le système ou par l’utilisateur, vous avez besoin de l’ID d’objet. Pour récupérer l’ID de l’objet, vous pouvez utiliser az ad sp list.

az ad sp list --all --filter "servicePrincipalType eq 'ManagedIdentity'"

Pour répertorier uniquement les identités managées affectées par l’utilisateur, vous pouvez utiliser az identity list.

az identity list

Étape 2 : Sélectionner le rôle approprié

Les autorisations sont regroupées dans des rôles. Vous pouvez choisir parmi une liste de plusieurs rôles intégrés Azure ou utiliser vos propres rôles personnalisés. Accorder l’accès avec le moindre privilège requis étant recommandé, vous devez éviter d’attribuer un rôle plus large.

Pour répertorier les rôles et récupérer l’ID de rôle unique, vous pouvez utiliser az role definition list.

az role definition list --query "[].{name:name, roleType:roleType, roleName:roleName}" --output tsv

Voici comment répertorier les détails d’un rôle particulier.

az role definition list --name "{roleName}"

Pour plus d’informations, consultez Répertorier les définitions de rôle Azure.

Étape 3 : Identifier l’étendue nécessaire

Azure fournit quatre niveaux d’étendue : ressource, groupe de ressources, abonnement et groupe d’administration. Accorder l’accès avec le moindre privilège requis étant recommandé, vous devez éviter d’attribuer un rôle à une étendue plus large. Pour plus d’informations sur l’étendue, consultez Comprendre l’étendue.

Étendue des ressources

Pour l’étendue des ressources, vous avez besoin de l’ID de la ressource. Vous pouvez trouver l’ID de ressource en examinant les propriétés de la ressource dans le portail Azure. Un ID de ressource a le format suivant.

/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}

Étendue du groupe de ressources

Pour l’étendue du groupe de ressources, vous avez besoin du nom du groupe de ressources. Vous trouverez le nom dans la page Groupes de ressources du portail Azure, ou vous pouvez utiliser az group list.

az group list --query "[].{name:name}" --output tsv

Étendue de l’abonnement

Pour l’étendue d’abonnement, vous avez besoin de l’ID d’abonnement. Vous pouvez trouver l’ID dans la page Abonnements du portail Azure, ou vous pouvez utiliser az account list.

az account list --query "[].{name:name, id:id}" --output tsv

Étendue d’un groupe d’administration

Pour l’étendue d’un groupe d’administration, vous avez besoin du nom du groupe d’administration. Vous pouvez trouver le nom dans la page Groupes d’administration dans le portail Azure, ou vous pouvez utiliser az account management-group list.

az account management-group list --query "[].{name:name, id:id}" --output tsv

Étape 4 : Attribuer un rôle

Pour attribuer un rôle, utilisez la commande az role assignment create. En fonction de l’étendue, la commande a généralement l’un des formats suivants.

Étendue des ressources

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{resourceName}"

Étendue du groupe de ressources

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

Étendue de l’abonnement

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}"

Étendue d’un groupe d’administration

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--scope "/providers/Microsoft.Management/managementGroups/{managementGroupName}"

L’exemple suivant illustre la sortie lorsque vous attribuez le rôle Contributeur de machine virtuelle à un utilisateur dans une étendue de groupe de ressources.

{
  "canDelegate": null,
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
  "name": "{roleAssignmentId}",
  "principalId": "{principalId}",
  "principalType": "User",
  "resourceGroup": "{resourceGroupName}",
  "roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c",
  "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
  "type": "Microsoft.Authorization/roleAssignments"
}

Attribuer des exemples de rôles

Attribuer un rôle pour tous les conteneurs de blobs dans l’étendue d’une ressource de compte de stockage

Attribue le rôle Contributeur aux données Blob du stockage à un principal de service associé à l’ID d’objet 55555555-5555-5555-5555-555555555555 dans l’étendue des ressources d’un compte de stockage nommé storage12345.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345"

Attribuer un rôle pour l’étendue d’une ressource d’un conteneur de blobs spécifique

Attribue le rôle Contributeur aux données Blob du stockage à un principal de service associé à l’ID d’objet 55555555-5555-5555-5555-555555555555 dans l’étendue des ressources d’un conteneur de blobs nommé blob-container-01.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01"

Attribuer un rôle pour un groupe dans l’étendue d’une ressource de réseau virtuel spécifique

Attribue le rôle Contributeur de machine virtuelle au groupe Ann Mack Team associé à l’ID 22222222-2222-2222-2222-222222222222 dans l’étendue des ressources d’un réseau virtuel nommé pharma-sales-project-network.

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales/providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network"

Attribuer un rôle à un utilisateur dans l’étendue d’un groupe de ressources

Attribue le rôle Contributeur de machine virtuelle à l’utilisateur patlong@contoso.com dans l’étendue du groupe de ressources pharma-sales.

az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Attribuer un rôle pour un utilisateur utilisant l’ID de rôle unique dans l’étendue d’un groupe de ressources

Un nom de rôle peut changer dans certaines circonstances, par exemple :

  • Vous utilisez vos propres rôles personnalisés et vous décidez d’en modifier le nom.
  • Vous utilisez un rôle en préversion dont le nom contient (préversion). Lorsque le rôle est publié, le rôle est renommé.

Même si un rôle est renommé, l’ID de rôle ne change pas. Si vous utilisez des scripts ou une automatisation pour créer vos attributions de rôles, il est recommandé d’utiliser l’ID de rôle unique au lieu du nom de rôle. Par conséquent, si un rôle est renommé, vos scripts sont plus susceptibles de fonctionner.

L’exemple suivant attribue le rôle Contributeur de machine virtuelle à l’utilisateur patlong@contoso.com dans l’étendue du groupe de ressources pharma-sales.

az role assignment create --assignee "patlong@contoso.com" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Attribuer un rôle pour tous les conteneurs de blobs dans l’étendue d’un groupe de ressources

Attribue le rôle Contributeur aux données Blob du stockage à un principal de service associé à l’ID d’objet 55555555-5555-5555-5555-555555555555 dans l’étendue du groupe de ressources Example-Storage-rg.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Example-Storage-rg"

Attribuer un rôle pour une application dans l’étendue d’un groupe de ressources

Attribue le rôle Contributeur de machine virtuelle à une application associée à l’ID d’objet de principal de service 44444444-4444-4444-4444-444444444444 dans l’étendue du groupe de ressources pharma-sales.

az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Attribuer un rôle pour un nouveau principal de service dans l’étendue d’un groupe de ressources

Dans certains cas, si vous créez un principal de service et que vous tentez immédiatement de lui attribuer un rôle, cette attribution peut échouer. Par exemple, si vous utilisez un script pour créer une identité managée et que vous tentez d’attribuer un rôle à ce principal de service, l’attribution de rôle peut échouer. Cet échec est souvent lié au délai de réplication. Le principal du service est créé dans une région. Toutefois, l’attribution de rôle peut s’effectuer dans une autre région, qui n’a pas encore répliqué le principal de service. Dans le cadre de ce scénario, vous devez spécifier le type de principal lors de la création de l’attribution de rôle.

Pour attribuer un rôle, utilisez az role assignment create, spécifiez une valeur pour --assignee-object-id, puis définissez --assignee-principal-type sur ServicePrincipal.

az role assignment create --assignee-object-id "{assigneeObjectId}" \
--assignee-principal-type "{assigneePrincipalType}" \
--role "{roleNameOrId}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

Dans l’exemple suivant, le rôle Contributeur de machines virtuelles est attribué à l’identité managée msi-test dans l’étendue du groupe de ressources pharma-sales :

az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Attribuer un rôle pour un utilisateur dans l’étendue d’un abonnement

Attribuez le rôle de Lecteur à l’utilisateur annm@example.com dans l’étendue d’un abonnement.

az role assignment create --assignee "annm@example.com" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Attribuer un rôle pour un groupe dans l’étendue d’un abonnement

Attribue le rôle Lecteur au groupe Ann Mack Team associé à l’ID 22222222-2222-2222-2222-222222222222 dans l’étendue d’un abonnement.

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Attribuer un rôle pour tous les conteneurs de blobs dans l’étendue d’un abonnement

Attribue le rôle Lecteur des données BLOB du stockage à l’utilisateur alain@example.com dans l’étendue d’un abonnement.

az role assignment create --assignee "alain@example.com" \
--role "Storage Blob Data Reader" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000"

Attribuer un rôle pour un utilisateur dans l’étendue d’un groupe d’administration

Attribue le rôle Lecteur de facturation à l’utilisateur alain@example.com dans l’étendue d’un groupe d’administration.

az role assignment create --assignee "alain@example.com" \
--role "Billing Reader" \
--scope "/providers/Microsoft.Management/managementGroups/marketing-group"

Étapes suivantes