# Tenancy dividida

{% hint style="warning" %}
Apenas SCEPman Enterprise Edition
{% endhint %}

## Visão geral <a href="#overview" id="overview"></a>

O SCEPman pode ser configurado para funcionar a partir de um tenant do Azure separado do tenant do Azure/Intune para o qual emite certificados para utilizadores e/ou dispositivos. Esta configuração, conhecida como tenancy dividida, é especialmente **útil para MSPs** que gostariam de consolidar os custos da infraestrutura do Azure entre os seus clientes, mantendo um backend dedicado e uma CA única para cada um desses clientes.

A tenancy dividida vem com uma **grande desvantagem**: [Identidades gerenciadas](https://docs.scepman.com/pt/implantacao-do-scepman/permissions/post-installation-config) já não pode ser usado. Isto significa que a autenticação contra a Graph API (Azure AD e Intune) é feita usando um registo de app e um segredo de cliente, que tem de ser gerido (pelo MSP) à medida que expira.

A seguir, referimo-nos ao tenant de alojamento como **home tenant,** enquanto ao tenant do cliente como **target tenant**. Os recursos do SCEPman existirão no **home tenant**, e os dispositivos geridos no **target tenant** como no gráfico abaixo:

<figure><img src="https://3802289327-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2Ft8uOQQC6iNXE2XeveTgY%2Fscepman-split-graphic.png?alt=media&#x26;token=edb7ed01-20e3-4a88-9927-01275e510d01" alt=""><figcaption></figcaption></figure>

## Passos de configuração

1. Na **home tenant**, faça uma implementação padrão do SCEPman/Certificate Master conforme descrito no nosso [Getting Started Guide](https://docs.scepman.com/pt/implantacao-do-scepman/deployment-guides).

### No SCEPman (Home Tenant)

2. Navegue até ao SCEPman **App Service** e depois para "Settings" --> "Environment variables". Localize os seguintes parâmetros e **elimine** os:

| Variáveis de ambiente                                           |
| --------------------------------------------------------------- |
| `AppConfig:AuthConfig:ManagedIdentityEnabledForWebsiteHostname` |
| `AppConfig:AuthConfig:ManagedIdentityEnabledOnUnixTime`         |
| `AppConfig:AuthConfig:ManagedIdentityPermissionLevel`           |

3. **Renomeie** as seguintes definições (**não altere os respetivos valores**):

<table><thead><tr><th width="384">Nome original</th><th>Novo nome</th></tr></thead><tbody><tr><td><code>AppConfig:AuthConfig:ApplicationId</code></td><td><code>AppConfig:AuthConfig:HomeApplicationId</code></td></tr><tr><td><code>AppConfig:AuthConfig:TenantId</code></td><td><code>AppConfig:AuthConfig:HomeTenantId</code></td></tr></tbody></table>

4. Crie um **App registration** no **target tenant** como descrito aqui: [Azure App Registration](https://docs.scepman.com/pt/implantacao-do-scepman/permissions/azure-app-registration). Isto **App registration** permitirá ao SCEPman aceder aos diretórios Azure AD e Intune no **target tenant**.

{% hint style="warning" %}
O **segredo de cliente** gerado como parte desta **App registration** tem uma data de expiração e tem de ser renovado antes de expirar. Defina um lembrete para a renovação.
{% endhint %}

**Criar** as seguintes novas variáveis de ambiente, se ainda não o tiver feito durante a criação do registo da app:

<table><thead><tr><th width="395">Nome</th><th>Valor</th></tr></thead><tbody><tr><td><code>AppConfig:AuthConfig:ApplicationId</code></td><td>GUID do <strong>App registration</strong> que foi criado antes <strong>(target tenant).</strong></td></tr><tr><td><code>AppConfig:AuthConfig:TenantId</code></td><td>ID do Tenant do <strong>target tenant</strong>.</td></tr><tr><td><code>AppConfig:AuthConfig:ApplicationKey</code></td><td><strong>Valor</strong> da <strong>Segredo de cliente</strong> que foi criado como parte do <strong>App registration</strong> no <strong>target tenant</strong>.</td></tr></tbody></table>

5. Aplique as alterações.
6. Reinicie o SCEPman **App Service**.

### Certificate Master

7. Navegue até ao Certificate Master **App Service** e depois para "Settings" > "Environment variables".
8. Agora tem duas opções:
   1. Se quiser que utilizadores do seu **home tenant** façam início de sessão no Certificate Master e emitem certificados, o que inclui utilizadores convidados no seu home tenant, por exemplo, do seu target tenant.&#x20;

<figure><img src="https://3802289327-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FXqlVQSz8vRMLpm9ijTb3%2Fscepman-split-graphic2.png?alt=media&#x26;token=18945a73-dc3b-416e-85da-a4f8cf267c61" alt=""><figcaption><p>Opção 1: Utilizadores do Home Tenant fazem início de sessão no Certificate Master</p></figcaption></figure>

Se for esse o caso, **renomeie** as seguintes definições (**não altere os respetivos valores**):

<table><thead><tr><th width="385">Nome original</th><th>Novo nome</th></tr></thead><tbody><tr><td><code>AppConfig:AuthConfig:TenantId</code></td><td><code>AppConfig:AuthConfig:HomeTenantId</code></td></tr><tr><td><code>AppConfig:AuthConfig:ApplicationId</code></td><td><code>AppConfig:AuthConfig:HomeApplicationId</code></td></tr></tbody></table>

b. Quer que utilizadores do seu **target tenant** façam início de sessão no Certificate Master e emitem certificados, o que inclui utilizadores convidados no seu target tenant, por exemplo, do seu home tenant.&#x20;

<figure><img src="https://3802289327-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FOKLaoNuGHkWV7zvScKvi%2Fscepman-split-graphic3.png?alt=media&#x26;token=ed862008-d054-4a16-8912-07d578bc582c" alt=""><figcaption><p>Opção 2: Utilizadores do Target Tenant fazem início de sessão no Certificate Master</p></figcaption></figure>

Se for esse o caso, faça o seguinte:

* Abra uma sessão de **PowerShell** ou **Azure Cloud Shell** no seu **target tenant** e execute os seguintes comandos:

```
Install-Module SCEPman -Scope CurrentUser -Force
Register-SCEPmanCertMaster -CertMasterBaseURL <url>
```

Substitua `<url>` com o URL do seu Certificate Master

* O **CMDlet** irá produzir um **Application Id** e um **Tenant Id** (o do **target tenant**). Introduza estes dois valores como&#x20;
  * `AppConfig:AuthConfig:HomeApplicationId` e
  * `AppConfig:AuthConfig:HomeTenantId` nas definições do seu Certificate Master.
* Agora **crie** as seguintes novas definições de aplicação, possivelmente substituindo as existentes, com os mesmos valores que no SCEPman:

<table><thead><tr><th width="393">Nome</th><th>Valor</th></tr></thead><tbody><tr><td><code>AppConfig:AuthConfig:ApplicationId</code></td><td>GUID do <strong>App registration</strong> que foi criado antes.</td></tr><tr><td><code>AppConfig:AuthConfig:TenantId</code></td><td>ID do Tenant do <strong>target tenant</strong>.</td></tr><tr><td><code>AppConfig:AuthConfig:ApplicationKey</code></td><td><strong>Valor</strong> da <strong>Segredo de cliente</strong> que foi criado como parte do <strong>App registration</strong> antes.<br>Pode criar um novo Client secret separado para o Certificate Master, se quiser.</td></tr></tbody></table>

9. Guarde as alterações
10. Reinicie o SCEPman Certificate Master **App Service**.
11. Conceda os direitos para solicitar certificados através da **Certificate Master** aplicação web, veja [aqui](https://docs.scepman.com/pt/implantacao-do-scepman/permissions/post-installation-config#granting-the-rights-to-request-certificates-via-the-certificate-master-website)

Como visão geral, aqui estão as contas usadas por **Certificate Master** e para que são usadas:

| Conta                                            | Para que é usada?                                                                                                                                                                                                   | Notas                                                                               |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| Identidade Gerida                                | <ul><li>Autorizar CSRs submetidos ao SCEPman</li><li>Acesso ao Storage Account</li></ul>                                                                                                                            | N/A                                                                                 |
| Registo de app com App ID de `ApplicationId`     | O Certificate Master acede ao Microsoft Graph neste contexto para ver que certificados foram inscritos via Intune                                                                                                   | Se `ApplicationKey` não estiver presente, é usada em seu lugar a Identidade Gerida. |
| Registo de app com App ID de `HomeApplicationId` | Os utilizadores autenticam **para** esta aplicação. Deve estar no tenant onde residem os utilizadores que acedem ao Certificate Master (mas utilizadores convidados de outros tenants também podem ser autorizados) | Se `HomeApplicationId` não estiver presente, `ApplicationId` é usado em seu lugar.  |

Agora a configuração de Split-Tenancy está concluída; pode prosseguir e configurar os seus perfis SCEP com base no seu MDM, veja [aqui](https://docs.scepman.com/advanced-configuration/split-tenancy)

## Considerações quando existem vários target tenants

Se quiser ter várias instâncias do SCEPman para emitir certificados para diferentes target tenants, terá de tomar medidas de configuração adicionais para isolar estas instâncias umas das outras.

Um conceito possível poderia incluir um grupo de recursos de gestão que contenha um único App Service Plan que fornecerá o recurso de computação para todos os seus SCEPman App Services. Os seguintes pontos devem ser tidos em consideração ao fazer isto para vários tenants:

* Cada instância deve ter o seu próprio grupo de recursos para as distinguir
* Deve criar App Registrations para cada instância para isolar as permissões
* O App Service Plan deve ser criado num grupo de recursos de gestão independente, uma vez que serve várias instâncias

Neste diagrama, um tenant de gestão e as suas duas instâncias SCEPman fornecem certificados aos tenants da Contoso e da Tailwind:

{% @mermaid/diagram content="graph LR
subgraph t0\[Management Tenant]
subgraph rg0\[rg-scepman-mgmt]
asp\[asp-scepman-mgmt]
end

subgraph rg1\[rg-scepman-contoso]
app1\[app-scepman-contoso]
appreg1\[scepman-api-contoso]
end

subgraph rg2\[rg-scepman-tailwind]
app2\[app-scepman-tailwind]
appreg2\[scepman-api-tailwind]
end
end

subgraph t1\[Contoso Tenant]
i1\[Intune]
e1\[Entra ID]
end

subgraph t2\[Tailwind Tenant]
i2\[Intune]
e2\[Entra ID]
end

classDef rg stroke:#6dc3d1, fill:#d5ecf2
classDef asp stroke:#2962FF, fill:#e0e7ff
classDef app stroke:#fcd116, fill:#FFF8D8
classDef appreg stroke:#6DD185, fill:#ddffd8
classDef tenant stroke:#4d93c0, fill:#d0e2f0
classDef entra color:#ffffff, stroke:#0b58a4, fill:#0078d6
classDef intune stroke:#2ebddd, fill:#d9f4fa

class rg0,rg1,rg2 rg
class asp asp
class app1,app2 app
class appreg1,appreg2 appreg
class t0,t1,t2 tenant
class e1,e2 entra
class i1,i2 intune

asp --serves--> app1
asp --serves--> app2

app1 --> appreg1
appreg1 -- reads data--> i1
appreg1 -- reads data--> e1
i1 --requests certificates--> app1

app2 --> appreg2
appreg2 --reads data--> i2
appreg2 --reads data--> e2
i2 --requests certificates--> app2" fullWidth="true" %}

### Adicionar uma nova instância SCEPman a um App Service Plan existente

Ao implementar uma nova instância SCEPman usando o [método de implementação empresarial](https://docs.scepman.com/scepman-deployment/deployment-options/enterprise-deployment) é-lhe oferecida a possibilidade de introduzir o ID do recurso de um App Service Plan existente ao qual esta instância deve ser adicionada.

<figure><img src="https://3802289327-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FxHUNSYYW9FleCHCmxiGB%2Fimage.png?alt=media&#x26;token=dd7885b4-fe66-444a-b507-eaa0c2d0880d" alt=""><figcaption></figcaption></figure>

Este ID do recurso pode ser encontrado nas propriedades do App Service Plan existente:

<figure><img src="https://3802289327-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LoGejQeUQcw7lqnQ3WX%2Fuploads%2FvfeVKRZqRbm4U4BcRTCE%2Fimage.png?alt=media&#x26;token=f7304314-93f5-4c50-8ae9-b8809407adeb" alt=""><figcaption></figcaption></figure>

### Criar App Registrations específicas para o cliente

Para isolar as permissões das apps, terá de ajustar o comando de pós-implementação para especificar App Registrations personalizadas:

{% code overflow="wrap" %}

```powershell
Complete-SCEPmanInstallation -SCEPmanAppServiceName "app-scepman-contoso" -AzureADAppNameForSCEPman "scepman-api-contoso" -AzureADAppNameForCertMaster "certmaster-contoso" -SearchAllSubscriptions 6>&1
```

{% endcode %}

Este comando resultará numa instância do SCEPman totalmente configurada que está isolada das instâncias anteriores. Pode agora continuar a configurar a tenancy dividida para esta instância.

A secção acima relativa ao Certificate Master pode agora ser aplicada opcionalmente se quiser que este serviço esteja acessível a partir do tenant do cliente.
