Partager via


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.

Prerequisites

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

Étapes d’attribution d’un rôle Azure

Attribuer un rôle consiste en trois éléments : le principal de sécurité, la définition de rôle et l'é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 suivant : 11111111-1111-1111-1111-111111111111. Vous pouvez obtenir 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 ou l’ID d’objet utilisateur. Pour obtenir l’ID d’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 obtenir l’ID d’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é managée

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

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

Pour simplement répertorier 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 en rôles. Vous pouvez sélectionner dans une liste de plusieurs rôles intégrés Azure ou utiliser vos propres rôles personnalisés. Il est recommandé d’accorder l’accès avec le privilège le moins nécessaire, afin d’éviter d’attribuer un rôle plus large.

Pour répertorier les rôles et obtenir 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 Lister 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. Il est recommandé d’accorder l’accès avec le privilège minimal nécessaire. Évitez donc d’attribuer un rôle à une portée trop 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 ressource pour la ressource. Vous trouverez 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 dans le portail Azure ou vous pouvez utiliser az group list.

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

Étendue de l’abonnement

Pour l’étendue de l’abonnement, vous avez besoin de l’ID d’abonnement. Vous trouverez l’ID dans la page Abonnements du portail Azure ou vous pouvez utiliser la liste des comptes az.

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

Étendue du groupe d’administration

Pour l’étendue du groupe d’administration, vous avez besoin du nom du groupe d’administration. Vous trouverez le nom sur la page Groupes d’administration dans le portail Azure ou vous pouvez utiliser la commande 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 . Selon l’étendue, la commande comporte 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 du 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ôle

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 de stockage à un principal de service avec l’ID d’objet 55555555-5555-5555-5555-555555555555 dans l’étendue d’une ressource 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 une étendue de ressource de réseau virtuel spécifique

Attribue le rôle Contributeur de machine virtuelle au groupe Ann Mack Team avec l’ID 22222222-2222-2222-2222-222222222222, dans le périmètre d’une ressource pour 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 pour un utilisateur dans une étendue de groupe de ressources

Attribue le rôle Contributeur de machine virtuelle à patlong@contoso.com utilisateur au niveau 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 à un utilisateur à l’aide de l’ID de rôle unique dans une étendue de groupe de ressources

Il existe plusieurs fois où un nom de rôle peut changer, par exemple :

  • Vous utilisez votre propre rôle personnalisé et vous décidez de modifier le nom.
  • Vous utilisez un rôle de préversion dans lequel (préversion) apparaît dans le nom. Lorsque le rôle est libéré, 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 affecte le rôle Contributeur de machine virtuelle à l’utilisateur dans l’étendue patlong@contoso.com 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 à tous les conteneurs blob à l'échelle 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 une étendue de groupe de ressources

Affecte le rôle Contributeur de machine virtuelle à une application avec l’ID d’objet principal de service 4444444-4444-4444-4444444444444 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 une étendue de groupe de ressources

Si vous créez un principal de service et essayez immédiatement d’attribuer un rôle à ce principal de service, cette attribution de rôle peut échouer dans certains cas. Par exemple, si vous utilisez un script pour créer une identité managée, puis essayez d’attribuer un rôle à ce principal de service, l’attribution de rôle peut échouer. La raison de cet échec est probablement un délai de réplication. Le principal de service est créé dans une région ; Toutefois, l’attribution de rôle peut se produire dans une autre région qui n’a pas encore répliqué le principal de service. Pour résoudre ce scénario, vous devez spécifier le type de principal lors de la création de l’attribution de rôle.

Pour affecter un rôle, utilisez az role assignment create, spécifiez une valeur pour --assignee-object-id, puis définissez --assignee-principal-type à 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 une étendue d’abonnement

Attribue le rôle Lecteur à l’utilisateur annm@example.com au niveau du périmètre d'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 à l'échelle 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 de 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 à un utilisateur dans une étendue de groupe d’administration

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

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

Étapes suivantes