> For the complete documentation index, see [llms.txt](https://docs.realmjoin.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.realmjoin.com/pt/automacao/runbooks/runbook-permissions.md).

# Permissões de Runbook

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

## Âmbito

Isto aborda como conceder/negar acesso a certos runbooks num Azure tenant. Se procura respostas sobre quais permissões da MS Graph API são necessárias para executar uma determinada ação como runbook, por favor consulte o nosso [requisitos](/pt/automacao/connecting-azure-automation/azure-ad-roles-and-permissions.md).

## Visão geral

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

Tal como as [Runbook Customizations](/pt/automacao/runbooks/runbook-customization.md), definir estas permissões é feito através da introdução de 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 construir um exemplo completo passo a passo. Sinta-se à vontade para ir diretamente para o exemplo completo e começar a partir de [aqui](#targetentitygroups).

## Sintaxe da configuração

### Nomes dos runbooks

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

Podem ser usados wildcards ('\*') para corresponder a vários runbooks. Podem ser usados vários wildcards na mesma string, por exemplo `rjgit-*_security_*`. Isto corresponderia a todos os seguintes exemplos:

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

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

### Entra ID Groups

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

## Estrutura e exemplo JSON

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

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

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

### EnabledRunbookPatterns

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

Se definir esta secção, então apenas os runbooks mencionados nesta secção poderão ser utilizados por qualquer função / suporte e administrador.

#### Exemplo

* Permitir apenas runbooks individuais específicos, dando o nome completo

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

  `rjgit-device_*`
* Permitir todos os runbooks partilhados de utilizador

  `rjgit-user_*`
* Permitir todos os runbooks específicos do cliente (locais), relacionados com utilizadores

  `user_*`

Isto, implicitamente, deixa de fora muitos runbooks baseados em grupos e todos os runbooks baseados em org. Tenha atenção.

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

### DisabledRunbookPatterns

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

As entradas nesta secçã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` secção de antes.

* Desativar todos os runbooks partilhados (`rjgit-`) na categoria `security` .

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

### Funções

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

Se esta secção for omitida, todo o suporte e administradores do RealmJoin têm acesso a todos os runbooks indicados nas secções anteriores.

{% hint style="warning" %}
Se estiver ativado, todos os utilizadores que não pertençam a uma função não verão quaisquer runbooks.
{% endhint %}

#### Exemplo

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

Aplicaremos essas funções a vários grupos do Entra ID e, para cada função, daremos uma lista de runbooks permitidos. Tenha atenção - isto limitará a função de suporte a utilizadores apenas a um pequeno conjunto de runbooks.

Vamos adicionar comentários ("//") ao lado do object id do grupo que ajudem o leitor, indicando 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", // 1.º grupo AAD de suporte a dispositivos
        "5555c0af-c217-41e9-b790-3043788f1234"  // 2.º grupo AAD de suporte a dispositivos - outra equipa
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234" // Grupo AAD de suporte a utilizadores
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  }
}
```

Agora a `UserAdmin` função pode:

* atribuir licenças a todos os utilizadores no seu tenant
* modificar os endereços de email de todos os utilizadores no seu tenant

O `DeviceAdmin` função pode

* apagar qualquer dispositivo no seu tenant

### TargetEntityGroups

Talvez tenha alguns utilizadores VIP cruciais. Não deve ser possível que qualquer membro de suporte apague o dispositivo de um VIP ou modifique o endereço de email de um VIP. Podemos usar o "targeting" para restringir funções em utilizadores críticos a equipas dedicadas.

"Devices" serão alvo pelo respetivo utilizador principal/atribuído, mas não pelo objeto do dispositivo no Entra ID. Isto permite manter um modelo de grupos puramente baseado em utilizadores.

Partimos do princípio de que existem grupos do Entra ID que contêm utilizadores VIP críticos. Usando esta secção, podemos definir cuidadosamente algumas funções e runbooks mais críticos para esses grupos específicos do Entra ID (alvos).

Obviamente, se omitir esta secção, todos os utilizadores/grupos/dispositivos no seu tenant são tratados por igual.

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

#### Exemplo completo

Assuma o grupo `0000c0af-c217-41e9-b790-3043788f0000` é o nosso grupo de utilizadores VIP.

Introduzimos um novo grupo do Entra ID `4444c0af-c217-41e9-b790-3043788f4444` que contém pessoal de suporte aprovado para administrar utilizadores VIP. Este pessoal de suporte também deve ter todas as outras permissões básicas de suporte, por isso vamos adicioná-lo às funções existentes.

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

```json
{
  "EnabledRunbookPatterns": [
    "rjgit-group_general_remove-group",
    "rjgit-device_*",
    "rjgit-user_*",
    "user_*"
  ],
  "DisabledRunbookPatterns": [
    "rjgit-*_security_*"
  ],
  "Roles": {
    "DeviceAdmin": {
      "Groups": [
        "9cbfc0af-c217-41e9-b790-3043788f1234", // 1.º grupo AAD de suporte a dispositivos
        "5555c0af-c217-41e9-b790-3043788f1234", // 2.º grupo AAD de suporte a dispositivos - outra equipa
        "4444c0af-c217-41e9-b790-3043788f4444"  // Equipa de suporte VIP
      ],
      "AllowedRunbookPatterns": [
        "rjgit-device_*"
      ]
    },
    "UserAdmin": {
      "Groups": [
        "1234c0af-c217-41e9-b790-3043788f1234", // Grupo AAD de suporte a utilizadores
        "4444c0af-c217-41e9-b790-3043788f4444"  // Equipa de suporte VIP
      ],
      "AllowedRunbookPatterns": [
        "rjgit-user_general_assign-or-unassign-license",
        "rjgit-user_mail_*",
        "user_*"
      ]
    }
  },
  "TargetEntityGroups": {
    "0000c0af-c217-41e9-b790-3043788f0000": {  // Utilizadores VIP - Trate com cuidado!
      "RestrictRoles": {
        "UserAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // Suporte VIP
        ],
        "DeviceAdmin": [
          "4444c0af-c217-41e9-b790-3043788f4444" // Suporte VIP
        ]
      }
    }
  }
}
```

#### **Exemplo: restringir a equipa de suporte dos EUA para gerir apenas utilizadores dos EUA**

Neste cenário, temos pessoal de suporte sediado nos EUA que deve gerir apenas utilizadores localizados nos EUA. Para impor esta restrição:

* Crie uma regra de permissão que explicitamente **nega** aos suportes dos EUA a capacidade de executar runbooks em **todos os utilizadores**.
* Adicione uma regra de exceção que especificamente **permite** a execução de runbooks apenas para **utilizadores dos EUA**.

Isto garante que os suportes dos EUA têm permissões estritamente limitadas ao público-alvo pretendido (utilizadores dos EUA) e evita interações acidentais com utilizadores fora deste âmbito.

**Implementação**

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

<figure><img src="/files/7fdbf654093beb11ad1c8eeb45357011619ffa00" alt=""><figcaption><p>Restringir o pessoal de suporte dos EUA para gerir apenas utilizadores dos EUA</p></figcaption></figure>

Abaixo, o exemplo completo para este cenário:

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

  // Associações a 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 mail e security
    "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 quaisquer US Supporters
        ]
      }
    },
    "0f76d01e-cc6b-4553-bf1d-e4ccedd9c824": { // US Users
      "RestrictRoles": {
        "USSupporters": [
          "c603278c-cc36-4661-bb7a-eecb7ab079f9" // US Supporters
        ]
      }
    }
  }
}
```

### SchedulingEnabledRunbookPatterns

Esta secção contém uma lista de runbooks que serão marcados como "schedulable". O RealmJoin Port permitirá atribuir / gerir agendamentos para estes runbooks. Veja [Agendamento de runbooks](/pt/automacao/runbooks/scheduling.md).

O exemplo seguinte descreve o comportamento predefinido se SchedulingEnabledRunbookPatterns não estiverem definidos:

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

### SchedulingDisabledRunbookPatterns

Esta secção contém uma lista de runbooks que serão colocados na lista negra para não serem marcados como "schedulable". O RealmJoin Port não permitirá atribuir / gerir agendamentos para estes runbooks. Veja [Agendamento de runbooks](/pt/automacao/runbooks/scheduling.md).

Um runbook presente em SchedulingEnabledRunbookPatterns e SchedulingDisabledRunbookPatterns será **não** schedulable.

Por predefinição, nenhum runbook é colocado na lista negra. O exemplo seguinte demonstra apenas a sintaxe:

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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.realmjoin.com/pt/automacao/runbooks/runbook-permissions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
