> For the complete documentation index, see [llms.txt](https://docs.scepman.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.scepman.com/pt/configuracao-do-azure/split-tenancy.md).

# Tenancy dividida

{% hint style="warning" %}
Apenas a edição Enterprise do SCEPman
{% 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 split-tenancy, é especialmente **útil para MSPs** que queiram consolidar os custos de infraestrutura Azure entre os seus clientes, mantendo, ao mesmo tempo, um backend dedicado e uma CA única para cada um desses clientes.

A split-tenancy traz consigo uma **grande desvantagem**: [Identidades Geridas](/pt/implementacao-do-scepman/permissions/post-installation-config.md) já não podem ser usadas. Isto significa que a autenticação contra a Graph API (Azure AD e Intune) é tratada usando um registo de aplicação e um segredo de cliente, que tem de ser gerido (pelo MSP) à medida que expira.

A seguir, referimo-nos ao tenant de alojamento como **tenant de origem,** enquanto ao tenant do cliente como **tenant de destino**. Os recursos do SCEPman existirão no **tenant de origem**, e os dispositivos geridos no **tenant de destino** 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&amp;token=edb7ed01-20e3-4a88-9927-01275e510d01" alt=""><figcaption></figcaption></figure>

## Passos de configuração

1. Em **tenant de origem**, efetue uma implementação padrão do SCEPman/Certificate Master conforme descrito no nosso [Guia de Introdução](/pt/implementacao-do-scepman/deployment-guides.md).

### No SCEPman (Tenant de origem)

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 seus 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 **registo de aplicação** no **tenant de destino** como descrito aqui: [Registo de aplicação do Azure](/pt/implementacao-do-scepman/permissions/azure-app-registration.md). Isto **registo de aplicação** permitirá ao SCEPman aceder aos diretórios Azure AD e Intune no **tenant de destino**.

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

**Crie** as seguintes novas variáveis de ambiente, caso ainda não o tenha feito durante a criação do registo de aplicação:

<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>registo de aplicação</strong> que foi criado anteriormente <strong>(tenant de destino).</strong></td></tr><tr><td><code>AppConfig:AuthConfig:TenantId</code></td><td>Tenant ID do <strong>tenant de destino</strong>.</td></tr><tr><td><code>AppConfig:AuthConfig:ApplicationKey</code></td><td><strong>Valor</strong> do <strong>segredo de cliente</strong> que foi criado como parte do <strong>registo de aplicação</strong> no <strong>tenant de destino</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 **tenant de origem** iniciem sessão no Certificate Master e emitam certificados, o que inclui utilizadores convidados no seu tenant de origem, por ex., do seu tenant de destino.

<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&amp;token=18945a73-dc3b-416e-85da-a4f8cf267c61" alt=""><figcaption><p>Opção 1: Utilizadores do Tenant de origem iniciam sessão no Certificate Master</p></figcaption></figure>

Se for esse o caso, **renomeie** as seguintes definições (**não altere os seus 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. Pretende que utilizadores do seu **tenant de destino** iniciem sessão no Certificate Master e emitam certificados, o que inclui utilizadores convidados no seu tenant de destino, por ex., do seu tenant de origem.

<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&amp;token=ed862008-d054-4a16-8912-07d578bc582c" alt=""><figcaption><p>Opção 2: Utilizadores do Tenant de destino iniciam sessão no Certificate Master</p></figcaption></figure>

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

* Abra um **PowerShell** ou **Azure Cloud Shell** no seu **tenant de destino** e execute os seguintes comandos:

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

Substitua `<url>` pela URL do seu Certificate Master

* O **CMDlet** irá devolver um **Application Id** e um **Tenant Id** (o do **tenant de destino**). Introduza estes dois valores como
  * `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>registo de aplicação</strong> que foi criado anteriormente.</td></tr><tr><td><code>AppConfig:AuthConfig:TenantId</code></td><td>Tenant ID do <strong>tenant de destino</strong>.</td></tr><tr><td><code>AppConfig:AuthConfig:ApplicationKey</code></td><td><strong>Valor</strong> do <strong>segredo de cliente</strong> que foi criado como parte do <strong>registo de aplicação</strong> anteriormente.<br>Se quiser, pode criar um segredo de cliente novo e separado para o Certificate Master.</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](/pt/implementacao-do-scepman/permissions/post-installation-config.md#granting-the-rights-to-request-certificates-via-the-certificate-master-website).

Em resumo, 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 aplicação com App ID de `ApplicationId`     | O Certificate Master acede ao Microsoft Graph neste contexto para ver quais certificados foram inscritos via Intune                                                                                                  | Se `ApplicationKey` não estiver presente, a Identidade Gerida é usada em alternativa. |
| Registo de aplicação com App ID de `HomeApplicationId` | Os utilizadores autenticam-se **em** 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` é usada em alternativa.  |

Agora a configuração de Split-Tenancy está concluída, pode avançar e configurar os seus perfis SCEP com base no seu MDM.

## Considerações ao ter vários tenants de destino

Se quiser ter várias instâncias do SCEPman para emitir certificados para diferentes tenants de destino, deverá 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 App Services do SCEPman. 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
* Deverá criar Registos de aplicação 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 do SCEPman fornecem certificados aos tenants da Contoso e da Tailwind:

```mermaid
graph LR
  subgraph t0[Tenant de gestão]
  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[Tenant da Contoso]
    i1[Intune]
    e1[Entra ID]
  end

  subgraph t2[Tenant da Tailwind]
    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 --fornece--> app1
  asp --fornece--> app2

  app1 --> appreg1
  appreg1 -- lê dados--> i1
  appreg1 -- lê dados--> e1
  i1 --solicita certificados--> app1

  app2 --> appreg2
  appreg2 --lê dados--> i2
  appreg2 --lê dados--> e2
  i2 --solicita certificados--> app2
```

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

Ao implementar uma nova instância do 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&amp;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&amp;token=f7304314-93f5-4c50-8ae9-b8809407adeb" alt=""><figcaption></figcaption></figure>

### Criar registos de aplicação específicos do cliente

Para isolar as permissões das aplicações, terá de ajustar o comando pós-implementação para especificar Registos de aplicação personalizados:

{% 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 e isolada das instâncias anteriores. Agora pode avançar para configurar a split-tenancy desta 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.


---

# 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.scepman.com/pt/configuracao-do-azure/split-tenancy.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.
