# Permisos de runbooks

{% embed url="<https://www.youtube.com/watch?v=bLi_k_Yzhyw>" %}

## Ámbito

Esto aborda cómo conceder/denegar acceso a ciertos runbooks en un tenant de Azure. Si busca respuestas sobre qué permisos de la API de MS Graph se necesitan para ejecutar una determinada acción como runbook, consulte nuestros [requisitos](https://docs.realmjoin.com/es/automatizacion/connecting-azure-automation/azure-ad-roles-and-permissions).

## Información general

"Runbook Permissions" define la visibilidad de los runbooks para ciertos usuarios. Algunos runbooks también pueden bloquearse/ocultarse globalmente.

Al igual que las [Runbook Customizations](https://docs.realmjoin.com/es/automatizacion/runbooks/runbook-customization), la definición de estos permisos se realiza proporcionando una configuración en formato JSON como administrador de RealmJoin en el portal web de RealmJoin en <https://portal.realmjoin.com/settings/runbooks-permissions> .

### Acerca de esta guía

Daremos una breve descripción de la sintaxis y luego construiremos un ejemplo completo paso a paso. No dude en ir directamente al ejemplo completo y empezar desde [allí](#targetentitygroups).

## Sintaxis de configuración

### Nombres de runbook

Los runbooks se referencian por sus nombres tal como se ven en la Azure Automation Account, p. ej. `rjgit-group_general_remove-group`.

Se pueden usar comodines ('\*') para coincidir con varios runbooks. Se pueden usar varios comodines en la misma cadena, p. ej. `rjgit-*_security_*`. Esto coincidiría con todos los siguientes ejemplos:

* `rjgit-org_security_list-inactive-users`
* `rjgit-device_security_enable-or-disable-device`

El prefijo `prefijo rjgit-` denota runbooks que se importan desde nuestro repositorio público de GitHub. Los runbooks específicos del cliente no tienen prefijo, p. ej. `user_userinfo_custom-runbook`

### Entra ID Groups

Los grupos de Entra ID se referenciarán usando su Object ID, como `91688d11-9a34-42cd-8d1e-ce617d6c1234`. Actualmente, solo se pueden usar grupos de seguridad.

## Estructura JSON y ejemplo

Construiremos un ejemplo completo de configuración paso a paso.

Una configuración JSON consta de varias secciones, pero todas son opcionales y pueden omitirse.

Se permite añadir comentarios usando el prefijo "//".

### EnabledRunbookPatterns

Esta sección contiene una lista de runbooks que se permite usar. Si se omite esta sección, todos los runbooks están habilitados/permitidos de forma predeterminada.

Si define esta sección, entonces solo los runbooks mencionados en ella podrán ser usados por cualquier rol / soporte y administrador.

#### Ejemplo

* Permitir solo ciertos runbooks individuales proporcionando su nombre completo

  `rjgit-group_general_remove-group`
* Permitir todos los runbooks relacionados con dispositivos de nuestro repositorio compartido

  `rjgit-device_*`
* Permitir todos los runbooks compartidos de usuario

  `rjgit-user_*`
* Permitir todos los runbooks locales específicos del cliente relacionados con usuarios

  `user_*`

Esto deja fuera implícitamente muchos runbooks basados en grupos y todos los basados en org. Téngalo en cuenta.

```
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ]
}
```

### DisabledRunbookPatterns

Una lista de runbooks que están deshabilitados / prohibidos globalmente. Si se omite esta sección o está vacía, todos los runbooks habilitados (proporcionados mediante [EnabledRunbookPatterns](#enabledrunbookpatterns)) son utilizables.

Las entradas de esta sección tienen prioridad sobre las entradas en [EnabledRunbookPatterns ](#enabledrunbookpatterns)- los runbooks se ocultarán/no podrán ser usados por nadie en este tenant.

#### Ejemplo

Reutilizaremos la `EnabledRunbookPatterns` sección de antes.

* Deshabilitar todos los runbooks compartidos (`prefijo rjgit-`) en la categoría `security` .

```
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ]
}
```

### Roles

En esta sección puede asignar una lista de runbooks a un grupo de Entra ID. Esto permite definir varios roles de soporte/operador en su tenant.

Si se omite esta sección, todo el soporte y administradores de RealmJoin tendrán acceso a todos los runbooks dados en las secciones anteriores.

{% hint style="warning" %}
Si está habilitado, todos los usuarios que no pertenezcan a un rol no verán ningún runbook.
{% endhint %}

#### Ejemplo

Continuando con lo que tenemos, vamos a crear un rol de soporte de dispositivos `DeviceAdmin` y un rol de soporte de usuarios `UserAdmin`.

Aplicaremos esos roles a varios grupos de Entra ID y, para cada rol, daremos una lista de runbooks permitidos. Tenga en cuenta que esto restringirá el rol de soporte de usuarios a solo un pequeño conjunto de runbooks.

Añadamos comentarios ("//") junto al object id del grupo que ayuden al lector proporcionando los nombres de los grupos de Entra ID.

```json
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ],
  "Roles": {
    "DeviceAdmin": {
      "Groups": [
        "9cbfc0af-c217-41e9-b790-3043788f1234", // 1.er grupo AAD de soporte de dispositivos
        "5555c0af-c217-41e9-b790-3043788f1234"  // 2.º grupo AAD de soporte de dispositivos - otro equipo
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234" // Grupo AAD de soporte de usuarios
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  }
}
```

Ahora el `UserAdmin` rol puede:

* asignar licencias a todos los usuarios de su tenant
* modificar las direcciones de correo electrónico de todos los usuarios de su tenant

El `DeviceAdmin` el rol puede

* borrar cualquier dispositivo de su tenant

### TargetEntityGroups

Quizás tenga algunos usuarios VIP cruciales. No debería ser posible que cualquier miembro del personal de soporte borre el dispositivo de un VIP o modifique la dirección de correo electrónico de un VIP. Podemos usar el "targeting" para restringir roles sobre usuarios críticos a equipos dedicados.

Los "Devices" serán objetivo mediante su usuario principal/asignado, pero no mediante el objeto de dispositivo en Entra ID. Esto permite mantener un modelo de grupos puramente basado en usuarios.

Suponemos que existen grupos de Entra ID que contienen usuarios VIP críticos. Usando esta sección, podemos delimitar cuidadosamente algunos roles y runbooks más críticos para estos grupos de Entra ID específicos (objetivos).

Obviamente, si omite esta sección, todos los usuarios/grupos/dispositivos de su tenant se tratan por igual.

Si define TargetEntityGroups, no debería tener ningún impacto en ningún otro grupo no mencionado en la sección.

#### Ejemplo completo

Supongamos que el grupo `0000c0af-c217-41e9-b790-3043788f0000` es nuestro grupo de usuarios VIP.

Introducimos un nuevo grupo de Entra ID `4444c0af-c217-41e9-b790-3043788f4444` que contiene personal de soporte que ha sido aprobado para administrar usuarios VIP. Este personal de soporte también debería tener todos los demás permisos básicos de soporte, así que los añadiremos a los roles existentes.

"Restringir" un rol no otorgará nuevos roles a un soporte.

```json
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ],
  "Roles": {
    "DeviceAdmin": {
      "Groups": [
        "9cbfc0af-c217-41e9-b790-3043788f1234", // 1.er grupo AAD de soporte de dispositivos
        "5555c0af-c217-41e9-b790-3043788f1234", // 2.º grupo AAD de soporte de dispositivos - otro equipo
        "4444c0af-c217-41e9-b790-3043788f4444"  // Equipo de soporte VIP
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234", // Grupo AAD de soporte de usuarios
        "4444c0af-c217-41e9-b790-3043788f4444"  // Equipo de soporte VIP
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  },
  "TargetEntityGroups": {
    "0000c0af-c217-41e9-b790-3043788f0000": {  // Usuarios VIP - ¡Tratar con cuidado!
      "RestrictRoles": {
        "UserAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // Soporte VIP
        ],
        "DeviceAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // Soporte VIP
        ]
      }
    }
  }
}
```

#### **Ejemplo: restringir al personal de soporte de EE. UU. para que administre solo usuarios de EE. UU.**

En este escenario, tenemos personal de soporte con sede en EE. UU. que solo debería administrar usuarios ubicados en EE. UU. Para aplicar esta restricción:

* Cree una regla de permisos que explícitamente **deniegue** a los agentes de soporte de EE. UU. la capacidad de ejecutar runbooks sobre **todos los usuarios**.
* Añada una regla de excepción que específicamente **permita** la ejecución de runbooks solo para **usuarios de EE. UU.**.

Esto garantiza que los agentes de soporte de EE. UU. tengan permisos limitados estrictamente a su público objetivo previsto (usuarios de EE. UU.) y evita interacciones accidentales con usuarios fuera de este ámbito.

**Implementación**

1. Un grupo Entra de ejecutores de runbooks debe asignarse en Realm Join Portal
   1. Settings > Permissions > Runbook Runner Permissions
   2. El grupo Entra de agentes de soporte de EE. UU. debe ser miembro del grupo Runbook Runners para permitir la operación general de runbooks en el portal de RealmJoin.
2. Añadir un nuevo rol en Settings > Runbook Permissions
   1. En la sección Roles, añada el rol USSupporters con su grupo Entra (object ID del grupo)
   2. Añada AllowedRunbookPatterns para los USSupporters
3. Modifique los TargetEntityGroups
   1. El grupo All-Users debe Restrict el rol USSupporters con un valor vacío (aquí no se añade ningún object ID de grupo Entra). ¡Esto es una denegación implícita!
   2. El grupo US Users debe Restrict el rol USSupporters al object ID del grupo Entra de los US Supporters

<figure><img src="https://3832142177-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MkrcM7cKOpXKri1kVrh%2Fuploads%2FZ56Ipx6VuZDjIeZO2MTC%2Fimage.png?alt=media&#x26;token=e3f5fe54-0d17-46f0-a106-f51d548bde64" alt=""><figcaption><p>Restringir al personal de soporte de EE. UU. para que administre solo usuarios de EE. UU.</p></figcaption></figure>

A continuación, el ejemplo completo de este escenario:

```json
{
  // Permiso del portal:
  // Rol de Runbook Runner: US Supporters

  // Pertenencias a grupos:
  // 3e1e7540-7f0c-483c-b9bf-500342e2467c: All-Users
  // c603278c-cc36-4661-bb7a-eecb7ab079f9: US Supporters
  // 0f76d01e-cc6b-4553-bf1d-e4ccedd9c824: US Users

  "EnabledRunbookPatterns": [ // Habilitación general de runbooks de correo y seguridad
    "rjgit-*_mail_*",
    "rjgit-*security*"
  ],
  "DisabledRunbookPatterns": [
    "*password*"
  ],

  "Roles": {
    "USSupporters": {
      "Groups": [
        "c603278c-cc36-4661-bb7a-eecb7ab079f9" // US Supporters
      ],
      "AllowedRunbookPatterns": [ // runbooks permitidos para este rol - US Supporters
        "rjgit-user_*",
        "rjgit-device_*",
        "rjgit-group_*"
      ]
    }
  },
  
  "TargetEntityGroups": {
    "3e1e7540-7f0c-483c-b9bf-500342e2467c": { // All-Users
      "RestrictRoles": {
        "USSupporters": [
          // en general, no permitir runbooks para ningún US Supporters
        ]
      }
    },
    "0f76d01e-cc6b-4553-bf1d-e4ccedd9c824": { // US Users
      "RestrictRoles": {
        "USSupporters": [
          "c603278c-cc36-4661-bb7a-eecb7ab079f9" // US Supporters
        ]
      }
    }
  }
}
```

### SchedulingEnabledRunbookPatterns

Esta sección contiene una lista de runbooks que se marcarán como "programables". RealmJoin Port permitirá asignar / gestionar programaciones para estos runbooks. Consulte [scheduling](https://docs.realmjoin.com/es/automatizacion/runbooks/scheduling "mention").

El siguiente ejemplo describe el comportamiento predeterminado si no se definen SchedulingEnabledRunbookPatterns:

```json
{
  "SchedulingEnabledRunbookPatterns": [
    "*_scheduled"
  ]
}
```

### SchedulingDisabledRunbookPatterns

Esta sección contiene una lista de runbooks que serán incluidos en la lista negra para evitar que se marquen como "programables". RealmJoin Port no permitirá asignar / gestionar programaciones para estos runbooks. Consulte [scheduling](https://docs.realmjoin.com/es/automatizacion/runbooks/scheduling "mention").

Un runbook presente tanto en SchedulingEnabledRunbookPatterns como en SchedulingDisabledRunbookPatterns **no** será programable.&#x20;

De forma predeterminada, ningún runbook está en la lista negra. El siguiente ejemplo solo demuestra la sintaxis:

```json
{
  "SchedulingDisabledRunbookPatterns": [
    "rjgit-user_*"
  ]
}
```
