Asignación de roles de Azure mediante la CLI de Azure

El control de acceso basado en rol (RBAC) de Azure es el sistema de autorización que puede utilizar para administrar el acceso a los recursos de Azure. Para conceder acceso, debe asignar roles a usuarios, grupos, entidades de servicio o identidades administradas en un ámbito determinado. En este artículo se describe cómo asignar roles con la CLI de Azure.

Prerrequisitos

Para asignar roles, debe tener:

Pasos para asignar un rol de Azure

Para asignar un rol, se necesitan tres elementos: entidad de seguridad, definición de rol y ámbito.

Paso 1: determinar quién necesita acceso

Puede asignar un rol a un usuario, grupo, entidad de servicio o identidad administrada. Para asignar un rol, es posible que tenga que especificar el identificador único del objeto. El identificador tiene el formato: 11111111-1111-1111-1111-111111111111. Puede obtener el identificador mediante Azure Portal o la CLI de Azure.

User

Para un usuario Azure AD, obtenga el nombre principal de usuario, como patlong@contoso.com o el id. de objeto del usuario. Para obtener el id. de objeto, puede usar az ad user show.

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

Grupo

Para un grupo de Azure AD, necesita el id. de objeto de grupo. Para obtener el id. de objeto, puede usar az ad group show o az ad group list.

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

Entidad de servicio

Para una entidad de servicio de Azure AD (identidad que usa una aplicación), necesita el id. de objeto de la entidad de servicio. Para obtener el id. de objeto, puede usar az ad sp list. Para una entidad de servicio, use el id. de objeto y no el de aplicación.

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

Identidad administrada

Para una identidad administrada que haya asignado el sistema o el usuario, es necesario el id. de objeto. Para obtener el id. de objeto, puede usar az ad sp list.

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

Para enumerar las identidades administradas asignadas por el usuario, puede usar az identity list.

az identity list

Paso 2: seleccione el rol apropiado

Los permisos se agrupan en roles. Puede seleccionarlos de una lista de varios roles integrados de Azure o puede utilizar sus propios roles personalizados. Es recomendable conceder acceso con el menor privilegio necesario, así que evite asignar un rol más amplio.

Para enumerar los roles y obtener el id. de rol único, puede usar az role definition list.

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

Aquí verá cómo mostrar los detalles de un rol determinado.

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

Para obtener más información, consulte la Lista de definiciones de roles de Azure.

Paso 3: identificar el ámbito necesario

Azure proporciona cuatro niveles de ámbito: recursos, grupo de recursos, suscripción y grupo de administración. Es recomendable conceder acceso con el menor privilegio necesario, así que evite asignar un rol a un ámbito más amplio. Para obtener más información sobre el ámbito, vea Comprensión del ámbito.

Ámbito de recursos

Para el ámbito de recursos, necesitará el id. de recurso. Puede buscar el id. de recurso examinando las propiedades del recurso en Azure Portal. El id. de recurso tiene el formato siguiente.

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

Ámbito de grupo de recursos

Para el ámbito del grupo de recursos, necesita el nombre del grupo de recursos. Puede encontrar el nombre en la página Grupos de recursos de Azure Portal o puede usar az group list.

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

Ámbito de suscripción

Para el ámbito de la suscripción, necesitará el id. de la suscripción. Puede encontrar el id. en la página Suscripciones de Azure Portal o puede usar az account list.

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

Ámbito del grupo de administración

Para el ámbito del grupo de administración, necesita el nombre del grupo de administración. Puede encontrar el nombre en la página de Grupos de administración de Azure Portal o puede usar az account management-group list.

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

Paso 4: Asignación de un rol

Para asignar un rol, use el comando az role assignment create. Dependiendo del ámbito, el comando normalmente tiene uno de los siguientes formatos.

Ámbito de recursos

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

Ámbito de grupo de recursos

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--resource-group "{resourceGroupName}"

Ámbito de suscripción

az role assignment create --assignee "{assignee}" \
--role "{roleNameOrId}" \
--subscription "{subscriptionNameOrId}"

Ámbito del grupo de administración

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

A continuación se muestra un ejemplo de la salida cuando se asigna el rol de Colaborador de la máquina virtual a un usuario en un ámbito de grupos de recursos.

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

Ejemplos de asignación de roles

Asignación de un rol a todos los contenedores de blobs en un ámbito de recursos de la cuenta de almacenamiento

Asigna el rol de Colaborador de datos de Blob Storage a una entidad de servicio con el id. de objeto 55555555-5555-5555-5555-555555555555 en el ámbito de recursos de una cuenta de almacenamiento denominada 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"

Asignación de un rol para un ámbito de recursos de un contenedor de blobs específico

Asigna el rol de Colaborador de datos de Blob Storage a una entidad de servicio con el id. de objeto 55555555-5555-5555-5555-555555555555 en el ámbito de recursos de un contenedor de blobs denominado 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"

Asignación de un rol para un grupo en un ámbito de recursos de red virtual específico

Asigna el rol Colaborador de la máquina virtual al grupo Ann Mack Team con el id. 22222222-2222-2222-2222-222222222222 en un ámbito de recurso de una red virtual denominada 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"

Asignación de un rol a un usuario en el ámbito de un grupo de recursos

Asigna el rol Colaborador de la máquina virtual al usuario patlong@contoso.com en el ámbito del grupo de recursos pharma-sales.

az role assignment create --assignee "patlong@contoso.com" \
--role "Virtual Machine Contributor" \
--resource-group "pharma-sales"

Asignación de un rol a un usuario con el identificador de rol único en el ámbito de un grupo de recursos

Hay un par de veces en las que el nombre de un rol puede cambiar, por ejemplo:

  • Utiliza su propio rol personalizado y decide cambiar el nombre.
  • Utiliza una rol de versión preliminar que tiene (Versión preliminar) en el nombre. Cuando se libera el rol, se cambia su nombre.

Incluso si se cambia el nombre de un rol, su identificador no cambia. Si utiliza scripts o automatización para crear las asignaciones de roles, se recomienda utilizar el identificador de rol único en lugar del nombre del rol. Por tanto, si se cambia el nombre de un rol, es más probable que los scripts funcionen.

En el ejemplo siguiente, se asigna el rol Colaborador de la máquina virtual al usuario patlong@contoso.com en el ámbito del grupo de recursos pharma-sales.

az role assignment create --assignee "patlong@contoso.com" \
--role "9980e02c-c2be-4d73-94e8-173b1dc7cf3c" \
--resource-group "pharma-sales"

Asignación de un rol para todos los contenedores de blobs en el ámbito de un grupo de recursos

Asigna el rol de Colaborador de datos de Blob Storage a una entidad de servicio con el id. de objeto 55555555-5555-5555-5555-555555555555 en el ámbito del grupo de recursos Example-Storage-rg.

az role assignment create --assignee "55555555-5555-5555-5555-555555555555" \
--role "Storage Blob Data Contributor" \
--resource-group "Example-Storage-rg"

Como alternativa, puede especificar el grupo de recursos completo con el parámetro --scope:

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"

Asignación de un rol a una aplicación en el ámbito de un grupo de recursos

Asigna el rol Colaborador de la máquina virtual a una aplicación con el id. de objeto de entidad de servicio 44444444-4444-4444-4444-444444444444 en el ámbito del grupo de recursos pharma-sales.

az role assignment create --assignee "44444444-4444-4444-4444-444444444444" \
--role "Virtual Machine Contributor" \
--resource-group "pharma-sales"

Asignación de un rol a una nueva entidad de servicio en el ámbito de un grupo de recursos

Si crea una entidad de servicio e inmediatamente intenta asignarle un rol, esa asignación de roles puede producir un error en algunos casos. Por ejemplo, si usa un script para crear una identidad administrada y luego intenta asignarle un rol a esa entidad de servicio, la asignación de roles podría producir un error. Es probable que el motivo de este error sea un retraso en la replicación. La entidad de servicio se crea en una región; sin embargo, la asignación de roles puede tener lugar en una región distinta que todavía no haya replicado la entidad de servicio. Para abordar este escenario, debe especificar el tipo de entidad de seguridad al crear la asignación de roles.

Para asignar un rol, use az role assignment create, especifique un valor para --assignee-object-id y establezca --assignee-principal-type en ServicePrincipal.

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

En el ejemplo siguiente, se asigna el rol Colaborador de la máquina virtual a la identidad administrada msi-test en el ámbito del grupo de recursos pharma-sales:

az role assignment create --assignee-object-id "33333333-3333-3333-3333-333333333333" \
--assignee-principal-type "ServicePrincipal" \
--role "Virtual Machine Contributor" \
--resource-group "pharma-sales"

Asignación de un rol a un usuario en el ámbito de una suscripción

Asigna el rol de Lector al usuario annm@example.com en el ámbito de una suscripción.

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

Asignación de un rol a un grupo en el ámbito de una suscripción

Asigna el rol Lector al grupo Ann Mack Team con el id. 22222222-2222-2222-2222-222222222222 en el ámbito de suscripción.

az role assignment create --assignee "22222222-2222-2222-2222-222222222222" \
--role "Reader" \
--subscription "00000000-0000-0000-0000-000000000000"

Asignación de un rol a todos los contenedores de blobs en el ámbito de una suscripción

Asigna el rol de Lector de datos de Blob Storage al usuario alain@example.com en el ámbito de una suscripción.

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

Asignación de un rol a un usuario en el ámbito de un grupo de administración

Asigna el rol Lector de facturación al usuario alain@example.com en un ámbito de grupo de administración.

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

Pasos siguientes