Roles personalizados en los recursos de Azure

Si los roles integrados de Azure no cumplen las necesidades específicas de su organización, puede crear los suyos propios. Al igual que en el caso de los roles integrados, se pueden asignar roles personalizados a usuarios, grupos y entidades de servicio en los ámbitos del grupo de administración, de la suscripción y del grupo de recursos.

Los roles personalizados se pueden compartir entre suscripciones que confían en el mismo inquilino de Microsoft Entra. Hay un límite de 5000 roles personalizados por inquilino. (Para Microsoft Azure operado por 21Vianet, el límite es de 2000 roles personalizados). Los roles personalizados se pueden crear mediante Azure Portal, Azure PowerShell, la CLI de Azure o la API REST.

Pasos para crear un rol personalizado

Estos son los pasos básicos para crear un rol personalizado.

  1. Determinar los permisos que necesita.

    Cuando crea un rol personalizado, debe conocer las acciones que están disponibles para definir los permisos. Por lo general, empiece con un rol integrado existente y, a continuación, modifíquelo según sus necesidades. Agregará las acciones a las propiedades Actions o NotActions de la definición de roles. Si tiene acciones de datos, las agregará a las propiedades DataActions o NotDataActions.

    Para más información, vea la siguiente sección Determinación de los permisos que necesita.

  2. Decidir cómo se quiere crear el rol personalizado.

    Puede crear roles personalizados con Azure Portal, Azure PowerShell, la CLI de Azure o la API REST.

  3. Crear el rol personalizado.

    La manera más fácil es usar Azure Portal. Para conocer los pasos para crear un rol personalizado mediante Azure Portal, consulte Creación o actualización de roles personalizados de Azure mediante Azure Portal.

  4. Probar el rol personalizado.

    Una vez que tenga el rol personalizado, tiene que probarlo para comprobar que funciona según lo esperado. Si tiene que realizar ajustes más adelante, puede actualizar el rol personalizado.

Determinación de los permisos que necesita

Azure tiene miles de permisos que se pueden incluir en el rol personalizado. A continuación, se muestran algunos métodos que pueden ayudarle de determinar los permisos que agregará al rol personalizado:

  • Examine los roles integrados existentes.

    Es posible que quiera modificar un rol existente o combinar los permisos usados en varios roles.

  • Enumere los servicios de Azure a los que quiere conceder acceso.

  • Determine los proveedores de recursos que se asignan a los servicios de Azure.

    Los servicios de Azure exponen su funcionalidad y permisos a través de los proveedores de recursos. Por ejemplo, el proveedor de recursos Microsoft.Compute suministra recursos de máquina virtual y el proveedor de recursos Microsoft.Billing suministra recursos de suscripción y facturación. Conocer los proveedores de recursos puede ayudarle a reducir y determinar los permisos que necesita para el rol personalizado.

    Al crear un rol personalizado mediante Azure Portal, también puede determinar los proveedores de recursos buscando palabras clave. Esta funcionalidad de búsqueda se describe en Creación o actualización de roles personalizados de Azure mediante Azure Portal.

    Add permissions pane with resource provider

  • Busque los permisos disponibles para encontrar los permisos que quiere incluir.

    Al crear un rol personalizado mediante Azure Portal, puede buscar permisos por palabra clave. Por ejemplo, puede buscar permisos de máquina virtual o de facturación. También puede descargar todos los permisos como un archivo CSV y, a continuación, buscar en este archivo. Esta funcionalidad de búsqueda se describe en Creación o actualización de roles personalizados de Azure mediante Azure Portal.

    Add permissions list

Ejemplo de rol personalizado

A continuación se muestra el aspecto de un rol personalizado en formato JSON a través de Azure PowerShell. Este rol personalizado puede usarse para supervisar y reiniciar máquinas virtuales.

{
  "Name": "Virtual Machine Operator",
  "Id": "88888888-8888-8888-8888-888888888888",
  "IsCustom": true,
  "Description": "Can monitor and restart virtual machines.",
  "Actions": [
    "Microsoft.Storage/*/read",
    "Microsoft.Network/*/read",
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/start/action",
    "Microsoft.Compute/virtualMachines/restart/action",
    "Microsoft.Authorization/*/read",
    "Microsoft.ResourceHealth/availabilityStatuses/read",
    "Microsoft.Resources/subscriptions/resourceGroups/read",
    "Microsoft.Insights/alertRules/*",
    "Microsoft.Insights/diagnosticSettings/*",
    "Microsoft.Support/*"
  ],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/subscriptions/{subscriptionId1}",
    "/subscriptions/{subscriptionId2}",
    "/providers/Microsoft.Management/managementGroups/{groupId1}"
  ]
}

A continuación se muestra el mismo rol personalizado mediante la CLI de Azure.

[
  {
    "assignableScopes": [
      "/subscriptions/{subscriptionId1}",
      "/subscriptions/{subscriptionId2}",
      "/providers/Microsoft.Management/managementGroups/{groupId1}"
    ],
    "description": "Can monitor and restart virtual machines.",
    "id": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/88888888-8888-8888-8888-888888888888",
    "name": "88888888-8888-8888-8888-888888888888",
    "permissions": [
      {
        "actions": [
          "Microsoft.Storage/*/read",
          "Microsoft.Network/*/read",
          "Microsoft.Compute/*/read",
          "Microsoft.Compute/virtualMachines/start/action",
          "Microsoft.Compute/virtualMachines/restart/action",
          "Microsoft.Authorization/*/read",
          "Microsoft.ResourceHealth/availabilityStatuses/read",
          "Microsoft.Resources/subscriptions/resourceGroups/read",
          "Microsoft.Insights/alertRules/*",
          "Microsoft.Insights/diagnosticSettings/*",
          "Microsoft.Support/*"
        ],
        "dataActions": [],
        "notActions": [],
        "notDataActions": []
      }
    ],
    "roleName": "Virtual Machine Operator",
    "roleType": "CustomRole",
    "type": "Microsoft.Authorization/roleDefinitions"
  }
]

Propiedades del rol personalizado

En la tabla siguiente se describe el significado de las propiedades de roles personalizadas.

Propiedad Obligatorio Tipo Descripción
Name
roleName
String Nombre para mostrar del rol personalizado. Aunque una definición de rol es un grupo de administración o un recurso de nivel de suscripción, se puede usar una definición de rol en varias suscripciones que comparten el mismo inquilino de Microsoft Entra. Este nombre para mostrar debe ser único en el ámbito del inquilino de Microsoft Entra. Puede incluir letras, números, espacios y caracteres especiales. El número máximo de caracteres es 512.
Id
name
String El identificador exclusivo del rol personalizado. Para Azure PowerShell y la CLI de Azure, este identificador se genera automáticamente cuando se crea un rol.
IsCustom
roleType
String Indica si es un rol personalizado. Se establece en true o CustomRole para los roles personalizados. Se establece en false o BuiltInRole para los roles integrados.
Description
description
String Descripción del rol personalizado. Puede incluir letras, números, espacios y caracteres especiales. El número máximo de caracteres es 2048.
Actions
actions
String[] Matriz de cadenas que especifica las acciones del plano de control que el rol permite realizar. Para obtener más información, consulte Acciones.
NotActions
notActions
No String[] Matriz de cadenas que especifica las acciones del plano de control que se excluyen de la propiedad Actions permitida. Para obtener más información, consulte notActions.
DataActions
dataActions
No String[] Matriz de cadenas que especifica las acciones del plano de datos que el rol permite realizar en los datos dentro de ese objeto. Si crea un rol personalizado con DataActions, ese rol no se puede asignar en el ámbito del grupo de administración. Para más información, vea DataActions.
NotDataActions
notDataActions
No String[] Matriz de cadenas que especifica las acciones del plano de datos que se excluyen de las DataActions permitidas. Para más información, vea NotDataActions.
AssignableScopes
assignableScopes
String[] Matriz de cadenas que especifica los ámbitos en los que el rol personalizado está disponible para la asignación. El número máximo de elementos AssignableScopes es 2000. Para obtener más información, consulte assignableScopes.

Las cadenas de permiso no distinguen mayúsculas de minúsculas. Al crear los roles personalizados, la convención consiste en hacer coincidir las mayúsculas y minúsculas que se ven para los permisos en las operaciones del proveedor de recursos de Azure.

Permisos con caracteres comodín

Actions, NotActions, DataActionsy NotDataActions admiten caracteres comodín (*) para definir los permisos. Los caracteres comodín (*) amplían los permisos a todo aquello que coincida con la cadena de acción que se especifique. Por ejemplo, supongamos que desea agregar todos los permisos relacionados con Azure Cost Management y las exportaciones. Puede agregar todas estas cadenas de acción:

Microsoft.CostManagement/exports/action
Microsoft.CostManagement/exports/read
Microsoft.CostManagement/exports/write
Microsoft.CostManagement/exports/delete
Microsoft.CostManagement/exports/run/action

En lugar de agregar todas estas cadenas, podría agregar únicamente una cadena comodín. Por ejemplo, la siguiente cadena comodín es equivalente a las cinco cadenas anteriores. De esta forma también se incluirían los futuros permisos de exportación que se pudieran agregar.

Microsoft.CostManagement/exports/*

Nota:

Se recomienda especificar Actions y DataActions explícitamente en lugar de usar el carácter comodín (*). Con el comodín puede producirse un comportamiento no deseado en el futuro mediante Actions o DataActions, como concesión de acceso y permiso.

Quién puede crear, eliminar, actualizar o ver un rol personalizado

Al igual que los roles integrados, la propiedad AssignableScopes especifica los ámbitos en los que el rol está disponible para la asignación. La propiedad AssignableScopes de un rol personalizado también controla quién puede crear, eliminar, actualizar o ver dicho rol.

Tarea Acción Descripción
Creación o eliminación de un rol personalizado Microsoft.Authorization/ roleDefinitions/write Los usuarios que tienen acceso a esta acciones en todos los ámbitos AssignableScopes del rol personalizado pueden crear (o eliminar) roles personalizados para usar en esos ámbitos. Por ejemplo, los propietarios y administradores del acceso de los usuarios de los grupos de administración, las suscripciones y los grupos de recursos.
Actualización de un rol personalizado Microsoft.Authorization/ roleDefinitions/write Los usuarios que tienen acceso a esta acción en todos los ámbitos AssignableScopes del rol personalizado pueden actualizar roles personalizados en esos ámbitos. Por ejemplo, los propietarios y administradores del acceso de los usuarios de los grupos de administración, las suscripciones y los grupos de recursos.
Visualización de un rol personalizado Microsoft.Authorization/ roleDefinitions/read Los usuarios que tienen acceso a esta acción en un ámbito pueden ver los roles personalizados que están disponibles para su asignación en ese ámbito. Todos los roles integrados permiten que los roles personalizados estén disponibles para su asignación.

Búsqueda de asignaciones de roles para eliminar un rol personalizado

Para poder eliminar un rol personalizado, debe quitar las asignaciones de roles que usen el rol personalizado. Si intenta eliminar un rol personalizado con asignaciones de roles, recibirá este mensaje: There are existing role assignments referencing role (code: RoleDefinitionHasAssignments).

Estos son los pasos para ayudar a encontrar las asignaciones de roles antes de eliminar un rol personalizado:

Límites de los roles personalizados

En la siguiente lista se describen los límites de los roles personalizados.

  • Cada inquilino puede tener hasta 5000 roles personalizados.
  • Microsoft Azure operado por 21Vianet puede tener hasta 2000 roles personalizados para cada inquilino.
  • AssignableScopes no se puede establecer en el ámbito raíz ("/").
  • No puede usar caracteres comodín (*) en AssignableScopes. Esta restricción de caracteres comodín ayuda a garantizar que un usuario no pueda obtener acceso a un ámbito mediante la actualización de la definición de rol.
  • Solo puede tener un carácter comodín en una cadena de acción.
  • Solo se puede definir un grupo de administración en AssignableScopes de un rol personalizado.
  • Azure Resource Manager no valida la existencia del grupo de administración en el AssignableScopes de la definición de roles.
  • No se pueden asignar roles personalizados con DataActions en el ámbito del grupo de administración.
  • Puede crear un rol personalizado con DataActions y un grupo de administración en AssignableScopes. No se puede asignar el rol personalizado en el propio ámbito del grupo de administración; sin embargo, puede asignar el rol personalizado en el ámbito de las suscripciones dentro del grupo de administración. Esto puede resultar útil si necesita crear un único rol personalizado con DataActions el que se debe asignar en varias suscripciones, en lugar de crear un rol personalizado independiente para cada suscripción.

Para más información sobre los roles personalizados y los grupos de administración, consulte ¿Qué son los grupos de administración de Azure?

Formatos de entrada y salida

Para crear un rol personalizado mediante la línea de comandos, normalmente se usa JSON para especificar las propiedades deseadas para el rol personalizado. En función de las herramientas que use, los formatos de entrada y salida tendrán un aspecto ligeramente diferente. En esta sección se enumeran los formatos de entrada y salida en función de la herramienta.

Azure PowerShell

Para crear un rol personalizado mediante Azure PowerShell, debe proporcionar la siguiente entrada.

{
  "Name": "",
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": []
}

Para actualizar un rol personalizado mediante Azure PowerShell, debe proporcionar la siguiente entrada. Observe que se ha agregado la propiedad Id.

{
  "Name": "",
  "Id": "",
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": []
}

A continuación se muestra un ejemplo de la salida al enumerar un rol personalizado mediante Azure PowerShell y el comando ConvertTo-JSON.

{
  "Name": "",
  "Id": "",
  "IsCustom": true,
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": []
}

CLI de Azure

Para crear o actualizar un rol personalizado mediante la CLI de Azure, debe proporcionar la siguiente entrada. Este es el mismo formato que el usado para crear un rol personalizado mediante Azure PowerShell.

{
  "Name": "",
  "Description": "",
  "Actions": [],
  "NotActions": [],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": []
}

A continuación se muestra un ejemplo de la salida al enumerar un rol personalizado mediante la CLI de Azure.

[
  {
    "assignableScopes": [],
    "description": "",
    "id": "",
    "name": "",
    "permissions": [
      {
        "actions": [],
        "dataActions": [],
        "notActions": [],
        "notDataActions": []
      }
    ],
    "roleName": "",
    "roleType": "CustomRole",
    "type": "Microsoft.Authorization/roleDefinitions"
  }
]

REST API

Para crear o actualizar un rol personalizado mediante la API de REST, debe proporcionar la siguiente entrada. Este es el mismo formato que se genera al crear un rol personalizado mediante Azure Portal.

{
  "properties": {
    "roleName": "",
    "description": "",
    "assignableScopes": [],
    "permissions": [
      {
        "actions": [],
        "notActions": [],
        "dataActions": [],
        "notDataActions": []
      }
    ]
  }
}

A continuación se muestra un ejemplo de la salida al enumerar un rol personalizado mediante la API de REST.

{
    "properties": {
        "roleName": "",
        "type": "CustomRole",
        "description": "",
        "assignableScopes": [],
        "permissions": [
            {
                "actions": [],
                "notActions": [],
                "dataActions": [],
                "notDataActions": []
            }
        ],
        "createdOn": "",
        "updatedOn": "",
        "createdBy": "",
        "updatedBy": ""
    },
    "id": "",
    "type": "Microsoft.Authorization/roleDefinitions",
    "name": ""
}

Pasos siguientes