Compartir a través de


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

El control de acceso basado en rol de Azure (Azure RBAC) es el sistema de autorización que se usa 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 mediante la CLI de Azure.

Prerrequisitos

Para asignar roles, debe tener:

Pasos para asignar un rol de Azure

Asignar un rol consiste en 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.

Usuario

Para un usuario de Microsoft Entra, obtenga el nombre principal de usuario, como patlong@contoso.com o el identificador de objeto de usuario. Para obtener el identificador de objeto, puede usar az ad user show.

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

Grupo

En el caso de los grupos de Microsoft Entra, necesita el identificador del objeto grupo. Para obtener el identificador de objeto, puede usar az ad group show o az ad group list.

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

Entidad de servicio

Para una entidad de servicio de Microsoft Entra (identidad usada por una aplicación), necesita el identificador de objeto de la entidad de servicio. Para obtener el identificador de objeto, puede usar az ad sp list. Para un principal del servicio, emplee el identificador de objeto y no el identificador de aplicación.

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

Identidad administrada

Para una identidad administrada, ya sea asignada por el sistema o por el usuario, necesita el ID del objeto. Para obtener el identificador 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: Seleccionar el rol adecuado

Los permisos se agrupan en roles. Puede seleccionar en una lista de varios roles integrados de Azure o puede usar sus propios roles personalizados. Es un procedimiento recomendado conceder acceso con el privilegio mínimo necesario, por lo que evite asignar un rol más amplio.

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

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

Aquí se muestra cómo enumerar los detalles de un rol determinado.

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

Para más información, consulte Enumeración de definiciones de roles de Azure.

Paso 3: Identificar el ámbito necesario

Azure proporciona cuatro niveles de ámbito: recurso, grupo de recursos, suscripción y grupo de administración. Se recomienda conceder acceso con el privilegio mínimo necesario, por lo que evite asignar un rol en un ámbito más amplio. Para obtener más información sobre el ámbito, consulte Descripción del ámbito.

Ámbito del recurso

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

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

Ámbito del 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 la suscripción

Para el ámbito de la suscripción, necesitará el id. de la suscripción. Puede encontrar el identificador 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 Grupos de administración en 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 roles

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

Ámbito del recurso

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

Ámbito del grupo de recursos

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

Ámbito de la suscripción

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

Á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 al asignar el rol Colaborador de máquina virtual a un usuario en un ámbito de grupo 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"
}

Asignar ejemplos de roles

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

Asigna el rol Colaborador de datos de Storage Blob a una entidad de servicio con el identificador de objeto 55555555-5555-5555-5555-555555555555 dentro de un ámbito de recurso para 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 Colaborador de datos de Storage Blob a una entidad de servicio con el identificador de objeto 55555555-5555-5555-5555-555555555555 en un ámbito de recurso para 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 recurso 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 para un usuario en un ámbito de grupo de recursos

Asigna el rol Colaborador de 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" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

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

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

  • Está usando su propio rol personalizado y decide cambiar el nombre.
  • Usa un rol de vista previa que tiene (versión preliminar) en el nombre. Cuando se libera el rol, se cambia el nombre del rol.

Incluso si se cambia el nombre de un rol, el identificador de rol no cambia. Si usa scripts o automatización para crear las asignaciones de roles, se recomienda usar el identificador de rol único en lugar del nombre del rol. Por lo 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 máquina virtual al patlong@contoso.com usuario en el ámbito del grupo de recursos 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"

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

Asigna el rol Colaborador de datos de Storage Blob 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" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/Example-Storage-rg"

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

Asigna el rol Colaborador de máquina virtual a una aplicación con el ID de objeto principal del servicio 44444444-4444-4444-4444-444444444444 dentro del ámbito del grupo de recursos 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"

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

Si crea una nueva entidad de servicio e intenta asignar inmediatamente un rol a esa entidad de servicio, esa asignación de roles puede producir un error en algunos casos. Por ejemplo, si usa un script para crear una nueva identidad administrada y, a continuación, intenta asignar un rol a esa entidad de servicio, es posible que se produzca un error en la asignación de roles. Es probable que el motivo de este error sea un retraso de replicación. La entidad de servicio se crea en una región; sin embargo, la asignación de roles puede producirse en una región diferente que aún no ha replicado la entidad de servicio. Para solucionar este escenario, debe especificar el tipo principal 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}" \
--scope "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}"

En el ejemplo siguiente se asigna el rol Colaborador de 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" \
--scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/pharma-sales"

Asignación de un rol para un usuario en un ámbito de suscripción

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

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

Asignar un rol a un grupo dentro del á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" \
--scope "/subscriptions/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 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 para un usuario en un ámbito de 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