# Permissões do Runbook

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

## Âmbito

Isto aborda como conceder/negar acesso a determinados runbooks num tenant Azure. Se você está procurando respostas sobre quais permissões da API MS Graph são necessárias para executar uma determinada ação como um runbook, dê uma olhada nos nossos [requisitos](https://docs.realmjoin.com/pt/automacao/connecting-azure-automation/azure-ad-roles-and-permissions).

## Vista geral

"Runbook Permissions" definem a visibilidade dos runbooks para determinados usuários. Certos runbooks também podem ser bloqueados/ocultados globalmente.

Assim como as [Runbook Customizations](https://docs.realmjoin.com/pt/automacao/runbooks/runbook-customization), definir essas permissões é feito fornecendo uma configuração em formato JSON como administrador do RealmJoin no portal web do RealmJoin em <https://portal.realmjoin.com/settings/runbooks-permissions> .

### Sobre este guia

Vamos dar uma breve descrição da sintaxe e depois montar um exemplo completo passo a passo. Sinta-se à vontade para ir diretamente ao exemplo completo e começar a partir de [lá](#targetentitygroups).

## Sintaxe da configuração

### Nomes dos runbooks

Os runbooks são referenciados pelos seus nomes, como visto na Azure Automation Account, por exemplo `rjgit-group_general_remove-group`.

Coringas ('\*') podem ser usados para corresponder a vários runbooks. Vários coringas podem ser usados na mesma string, por exemplo `rjgit-*_security_*`. Isso corresponderia a todos os seguintes exemplos:

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

O prefixo `prefixo rjgit-` denota runbooks que são importados do nosso repositório GitHub público. Runbooks específicos de clientes não têm prefixo, por exemplo `user_userinfo_custom-runbook`

### Entra ID Groups

Os grupos do Entra ID serão referenciados usando o seu Object ID, como `91688d11-9a34-42cd-8d1e-ce617d6c1234`. Atualmente, apenas grupos de segurança podem ser usados.

## Estrutura JSON e Exemplo

Vamos construir um exemplo completo de configuração passo a passo.

Uma configuração JSON consiste em várias seções, mas todas as seções são opcionais e podem ser omitidas.

É permitido adicionar comentários usando o prefixo "//".

### EnabledRunbookPatterns

Esta seção contém uma lista de runbooks permitidos para uso. Se esta seção for omitida, todos os runbooks ficam ativados/permitidos por padrão.

Se você definir esta seção, então apenas os runbooks mencionados nesta seção poderão ser usados por qualquer função / suporte e administrador.

#### Exemplo

* Permitir apenas certos runbooks individuais fornecendo o nome completo deles

  `rjgit-group_general_remove-group`
* Permitir todos os runbooks relacionados a dispositivos do nosso repositório partilhado

  `rjgit-device_*`
* Permitir todos os runbooks partilhados de usuário

  `rjgit-user_*`
* Permitir todos os runbooks locais específicos do cliente relacionados a usuário

  `user_*`

Isso implicitamente exclui muitos runbooks baseados em grupo e todos os baseados em organização. Tenha isso em mente.

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

### DisabledRunbookPatterns

Uma lista de runbooks que são globalmente desativados / proibidos. Se esta seção for omitida ou estiver vazia, todos os runbooks ativados (fornecidos via [EnabledRunbookPatterns](#enabledrunbookpatterns)) podem ser usados.

As entradas nesta seção têm prioridade sobre as entradas em [EnabledRunbookPatterns ](#enabledrunbookpatterns)- os runbooks ficarão ocultos/não poderão ser usados por ninguém neste tenant.

#### Exemplo

Vamos reutilizar a `EnabledRunbookPatterns` seção de antes.

* Desative todos os runbooks partilhados (`prefixo rjgit-`) no `segurança` categoria.

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

### Funções

Nesta seção você pode atribuir uma lista de runbooks a um grupo do Entra ID. Isso permite definir várias funções de suporte/operador no seu tenant.

Se esta seção for omitida, todo o suporte e administradores do RealmJoin terão acesso a todos os runbooks fornecidos nas seções anteriores.

{% hint style="warning" %}
Se ativado, todos os usuários que não pertencerem a uma função não verão nenhum runbook.
{% endhint %}

#### Exemplo

Continuando com o que temos, vamos criar uma função de suporte a dispositivos `DeviceAdmin` e uma função de suporte a usuários `UserAdmin`.

Aplicaremos essas funções a vários grupos do Entra ID e, para cada função, forneceremos uma lista de runbooks permitidos. Tenha cuidado - isso restringirá a função de suporte a usuários a apenas um pequeno conjunto de runbooks.

Vamos adicionar comentários ("//") ao lado do object id do grupo que ajudem o leitor fornecendo os nomes dos grupos do 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", // 1st Device Support AAD Group
        "5555c0af-c217-41e9-b790-3043788f1234"  // 2nd Device Support AAD Group - other team
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234" // User Support AAD Group
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  }
}
```

Agora a `UserAdmin` função pode:

* atribuir licenças a todos os usuários no seu tenant
* modificar os endereços de e-mail de todos os usuários no seu tenant

O `DeviceAdmin` função pode

* apagar qualquer dispositivo no seu tenant

### TargetEntityGroups

Talvez você tenha alguns usuários VIP cruciais. Não deveria ser possível que qualquer membro do suporte apagasse o dispositivo de um VIP ou modificasse o endereço de e-mail de um VIP. Podemos usar "targeting" para restringir funções em usuários críticos a equipes dedicadas.

"Devices" serão alvo pelo seu usuário principal/atribuído, mas não pelo objeto de dispositivo no Entra ID. Isso permite manter um modelo de grupo puramente baseado em usuários.

Assumimos que existem grupos do Entra ID que contêm usuários VIP críticos. Usando esta seção, podemos delimitar com cuidado algumas funções e runbooks mais críticos para esses grupos específicos do Entra ID (alvos).

Obviamente, se você omitir esta seção, todos os usuários/grupos/dispositivos no seu tenant serão tratados como iguais.

Se você definir TargetEntityGroups, isso não deverá ter qualquer impacto em qualquer outro grupo não mencionado na seção.

#### Exemplo Completo

Suponha o grupo `0000c0af-c217-41e9-b790-3043788f0000` é o nosso grupo de usuários VIP.

Introduzimos um novo grupo do Entra ID `4444c0af-c217-41e9-b790-3043788f4444` contendo pessoal de suporte que foi aprovado para administrar usuários VIP. Esse pessoal de suporte também deve ter todas as outras permissões básicas de suporte, então vamos adicioná-lo às funções existentes.

"Restringir" uma função não concederá novas funções a um membro do suporte.

```json
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ],
  "Roles": {
    "DeviceAdmin": {
      "Groups": [
        "9cbfc0af-c217-41e9-b790-3043788f1234", // 1st Device Support AAD Group
        "5555c0af-c217-41e9-b790-3043788f1234", // 2nd Device Support AAD Group - other team
        "4444c0af-c217-41e9-b790-3043788f4444"  // VIP Support Crew
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234", // User Support AAD Group
        "4444c0af-c217-41e9-b790-3043788f4444"  // VIP Support Crew
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  },
  "TargetEntityGroups": {
    "0000c0af-c217-41e9-b790-3043788f0000": {  // VIP Users - Treat with care!
      "RestrictRoles": {
        "UserAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // VIP Support
        ],
        "DeviceAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // VIP Support
        ]
      }
    }
  }
}
```

#### **Exemplo: restringindo o suporte dos EUA para gerir apenas usuários dos EUA**

Neste cenário, temos pessoal de suporte baseado nos EUA que deve gerir apenas usuários localizados nos EUA. Para aplicar esta restrição:

* Crie uma regra de permissão que explicitamente **nega** aos suporte dos EUA a capacidade de executar Runbooks em **todos os usuários**.
* Adicione uma regra de exceção que especificamente **permite** a execução de Runbooks apenas para **usuários dos EUA**.

Isso garante que os membros do suporte dos EUA tenham permissões estritamente limitadas ao público-alvo pretendido (usuários dos EUA) e evita interações acidentais com usuários fora desse escopo.

**Implementação**

1. Um grupo Entra de Runbook Runners deve ser atribuído no Realm Join Portal
   1. Settings > Permissions > Runbook Runner Permissions
   2. O grupo Entra dos US Supporters deve ser membro do grupo Runbook Runners para permitir a operação geral de Runbooks no RealmJoin Portal.
2. Adicionando uma nova função em Settings > Runbook Permissions
   1. Na seção Roles, adicione a função USSupporters com o respetivo grupo Entra (group object ID)
   2. Adicione AllowedRunbookPatterns para os USSupporters
3. Modifique o TargetEntityGroups
   1. O grupo All-Users deve restringir a função USSupporters com um valor vazio (nenhum group object ID do Entra é adicionado aqui). Isto é uma negação implícita!
   2. O grupo US Users deve restringir a função USSupporters ao object ID do grupo Entra US Supporters

<figure><img src="https://686519968-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>Restringindo o pessoal de suporte dos EUA a gerir apenas usuários dos EUA</p></figcaption></figure>

Abaixo, o exemplo completo para este cenário:

```json
{
  // Permissão do Portal:
  // Função Runbook Runner: US Supporters

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

  "EnabledRunbookPatterns": [ // Ativação geral de Runbooks de e-mail e segurança
    "rjgit-*_mail_*",
    "rjgit-*security*"
  ],
  "DisabledRunbookPatterns": [
    "*password*"
  ],

  "Roles": {
    "USSupporters": {
      "Groups": [
        "c603278c-cc36-4661-bb7a-eecb7ab079f9" // US Supporters
      ],
      "AllowedRunbookPatterns": [ // Runbooks permitidos para esta função - US Supporters
        "rjgit-user_*",
        "rjgit-device_*",
        "rjgit-group_*"
      ]
    }
  },
  
  "TargetEntityGroups": {
    "3e1e7540-7f0c-483c-b9bf-500342e2467c": { // All-Users
      "RestrictRoles": {
        "USSupporters": [
          // em geral, não permitir Runbooks para nenhum US Supporters
        ]
      }
    },
    "0f76d01e-cc6b-4553-bf1d-e4ccedd9c824": { // US Users
      "RestrictRoles": {
        "USSupporters": [
          "c603278c-cc36-4661-bb7a-eecb7ab079f9" // US Supporters
        ]
      }
    }
  }
}
```

### SchedulingEnabledRunbookPatterns

Esta seção contém uma lista de runbooks que serão marcados como "agendáveis". O RealmJoin Port permitirá atribuir / gerir agendas para esses runbooks. Veja [scheduling](https://docs.realmjoin.com/pt/automacao/runbooks/scheduling "mention").

O exemplo a seguir descreve o comportamento padrão se SchedulingEnabledRunbookPatterns não estiver definido:

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

### SchedulingDisabledRunbookPatterns

Esta seção contém uma lista de runbooks que serão colocados na lista negra para não serem marcados como "agendáveis". O RealmJoin Port não permitirá atribuir / gerir agendas para esses runbooks. Veja [scheduling](https://docs.realmjoin.com/pt/automacao/runbooks/scheduling "mention").

Um runbook presente tanto em SchedulingEnabledRunbookPatterns quanto em SchedulingDisabledRunbookPatterns **irá** poderá ser agendado.&#x20;

Por padrão, nenhum runbook está na lista negra. O exemplo a seguir apenas demonstra a sintaxe:

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