# Requisitos

## Módulos do PowerShell

{% hint style="info" %}
A seção de Módulos do PowerShell é atualizada automaticamente com base no [repositório público](https://github.com/realmjoin/realmjoin-runbooks).
{% endhint %}

Os runbooks partilhados disponíveis em [GitHub](https://github.com/realmjoin/realmjoin-runbooks) esperam/usam os seguintes módulos do Windows PowerShell:

| Módulo                           | Versão mínima nos runbooks |
| -------------------------------- | -------------------------- |
| `Az.Accounts`                    | 5.3.2                      |
| `Az.Compute`                     | 5.1.1                      |
| `Az.DesktopVirtualization`       | 5.4.1                      |
| `Az.ManagementPartner`           | 0.7.5                      |
| `Az.Resources`                   | 9.0.1                      |
| `Az.Storage`                     | 9.6.0                      |
| `ExchangeOnlineManagement`       | 3.9.2                      |
| `Microsoft.Graph.Authentication` | 2.35.1                     |
| `MicrosoftTeams`                 | 7.6.0                      |
| `RealmJoin.RunbookHelper`        | 0.8.5                      |

O RealmJoin Portal irá importar e instalar automaticamente estes módulos se forem referenciados de dentro de um runbook. Esta importação também respeitará as versões mínimas especificadas para os módulos.

## Permissões

{% hint style="info" %}
A seção de Permissões é atualizada automaticamente com base no [repositório público](https://github.com/realmjoin/realmjoin-runbooks).
{% endhint %}

Os runbooks partilhados do RealmJoin usam a [identidade gerida atribuída pelo sistema](https://learn.microsoft.com/en-us/azure/automation/enable-managed-identity-for-automation) do Azure Automation para interagir com Entra ID, MS Graph API etc.

A seguinte lista de funções e permissões permitirá que você use todos os runbooks atualmente disponíveis no nosso repositório partilhado.

Não é recomendável reduzir estas funções/permissões, pois os runbooks são testados apenas com este conjunto de permissões. Se reduzir o conjunto de funções/permissões, alguns runbooks deixarão de funcionar.

### Funções do Entra ID

Atribua as seguintes funções do Entra ID à identidade gerida

* Desenvolvedor de Aplicações
* Administrador de Dispositivos na Nuvem
* Administrador do Exchange
* Administrador do Teams
* Administrador de Utilizadores

### Permissões da API Graph

Conceda as seguintes permissões da API Graph à identidade gerida

* `Application.Read.All`
* `Application.ReadWrite.OwnedBy`
* `AuditLog.Read.All`
* `BitlockerKey.Read.All`
* `CloudPC.ReadWrite.All`
* `Device.ReadWrite.All`
* `DeviceLocalCredential.Read.All`
* `DeviceManagementApps.ReadWrite.All`
* `DeviceManagementConfiguration.ReadWrite.All`
* `DeviceManagementManagedDevices.PrivilegedOperations.All`
* `DeviceManagementManagedDevices.ReadWrite.All`
* `DeviceManagementServiceConfig.ReadWrite.All`
* `Directory.Read.All`
* `Group.Create`
* `Group.ReadWrite.All`
* `GroupMember.ReadWrite.All`
* `IdentityRiskyUser.ReadWrite.All`
* `InformationProtectionPolicy.Read.All`
* `Mail.Send`
* `Organization.Read.All`
* `Place.Read.All`
* `Policy.Read.All`
* `Reports.Read.All`
* `RoleAssignmentSchedule.Read.Directory`
* `RoleManagement.Read.All`
* `RoleManagement.Read.Directory`
* `Team.Create`
* `TeamSettings.ReadWrite.All`
* `User.ReadWrite.All`
* `UserAuthenticationMethod.ReadWrite.All`
* `WindowsUpdates.ReadWrite.All`

### Permissões de outras APIs de aplicações

Conceda as seguintes permissões da API do Office 365 Exchange Online à identidade gerida

* `Exchange.ManageAsApp`

Conceda as seguintes permissões da API WindowsDefenderATP à identidade gerida

* `Machine.Read.All`
* `Machine.Isolate`
* `Machine.RestrictExecution`
* `Ti.ReadWrite.All`

Conceda as seguintes permissões da API SharePoint à identidade gerida

* `User.Read.All`
* `Sites.Read.All`
* `Sites.FullControl.All`

### Concessão de funções e permissões

Atualmente, não é possível conceder permissões às Identidades Geridas usando o Azure Portal. Recomendamos usar scripts do MS Graph / PowerShell para isso.

Pode encontrar um exemplo para este processo [aqui](https://github.com/Workplace-Foundation/approle-and-directoryrole-granter).

### Permissões de Recursos do Azure

Conceda pelo menos acesso de "Contribuidor" à subscrição ou ao grupo de recursos que hospeda a Conta de Automação do Azure para os runbooks

Alguns runbooks usarão uma Conta de Armazenamento do Azure para armazenar relatórios ou backups. Conceda pelo menos acesso de "Contribuidor" à subscrição ou ao grupo de recursos correspondente. A maioria dos runbooks poderá então criar os recursos dentro do grupo de recursos por conta própria.

## Métodos de autenticação

### Identidades geridas

O Azure Automation suporta [Identidades geridas](https://docs.microsoft.com/en-us/azure/automation/enable-managed-identity-for-automation) (atribuída pelo sistema) como a principal forma de autenticação. Isto substitui as contas RunAs descontinuadas.

Os Runbooks do RealmJoin atualmente suportam contas RunAs se nenhuma identidade gerida estiver configurada.

{% hint style="warning" %}
Se uma Identidade Gerida e uma Conta RunAs estiverem configuradas ao mesmo tempo, os runbooks do repositório partilhado do RealmJoin irão preferir automaticamente usar a Identidade Gerida ao usar versões mais recentes do nosso `RealmJoin.RunbookHelper` Módulo a partir da v0.8.0.

Versões mais antigas do módulo não conseguiam utilizar totalmente as Identidades Geridas e preferiam a Conta RunAs.

Certifique-se de conceder as permissões necessárias à Identidade Gerida ou desative-a completamente para usar apenas a Conta RunAs.
{% endhint %}

### Segredo do cliente

Alguns runbooks privados podem precisar de autenticação no estilo ClientID/Secret. Atualmente, não há runbooks partilhados que exijam ClientID e Secret.

Se necessário, um ClientID e Secret podem ser armazenados nas credenciais geridas chamadas "realmjoin-automation-cred" na Conta de Automação do Azure.

Atualmente, a "realmjoin-automation-cred" na conta de automação é criada por predefinição pelo RJ-Wizard, mas preenchida com valores aleatórios - teria de ser preenchida com valores corretos.
