# Geteilte Mandantenfähigkeit

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

## Überblick <a href="#overview" id="overview"></a>

SCEPman kann so eingerichtet werden, dass es von einem Azure-Tenant aus betrieben wird, der vom Azure-/Intune-Tenant getrennt ist, für den es Zertifikate an Benutzer und/oder Geräte ausstellt. Diese Konfiguration, bekannt als Split-Tenancy, ist besonders **für MSPs hilfreich** die die Azure-Infrastrukturkosten über ihre Kunden hinweg konsolidieren möchten, während sie für jeden dieser Kunden ein dediziertes Backend und eine eindeutige CA beibehalten.

Split-Tenancy bringt einen **erheblichen Nachteil**: [Artikel zu verwalteten Identitäten](https://docs.scepman.com/de/scepman-bereitstellung/permissions/post-installation-config) kann nicht mehr verwendet werden. Das bedeutet, dass die Authentifizierung gegen die Graph API (Azure AD und Intune) über eine App-Registrierung und ein Client Secret erfolgt, das verwaltet werden muss (vom MSP), da es abläuft.

Im Folgenden bezeichnen wir den Hosting-Tenant als **Home Tenant,** während wir den Kunden-Tenant als **Target Tenant**bezeichnen. SCEPman-Ressourcen befinden sich im **Home Tenant**, und die verwalteten Geräte im **Target Tenant** wie in der Grafik unten:

<figure><img src="https://2075553437-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>

## Konfigurationsschritte

1. Im **Home Tenant**führen Sie eine Standardbereitstellung von SCEPman/Certificate Master durch, wie in unserem [Getting Started Guide](https://docs.scepman.com/de/scepman-bereitstellung/deployment-guides).

### In SCEPman (Home Tenant)

2. Navigieren Sie zu SCEPman **App service** und dann zu "Settings" --> "Environment variables". Suchen Sie die folgenden Parameter und **löschen** Sie sie:

| Environment Variables                                           |
| --------------------------------------------------------------- |
| `AppConfig:AuthConfig:ManagedIdentityEnabledForWebsiteHostname` |
| `AppConfig:AuthConfig:ManagedIdentityEnabledOnUnixTime`         |
| `AppConfig:AuthConfig:ManagedIdentityPermissionLevel`           |

3. **Benennen Sie** die folgenden Einstellungen um (**ändern Sie ihre Werte nicht**):

<table><thead><tr><th width="384">Ursprünglicher Name</th><th>Neuer Name</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. Erstellen Sie eine **App registration** im **Target Tenant** wie hier beschrieben: [Azure App Registration](https://docs.scepman.com/de/scepman-bereitstellung/permissions/azure-app-registration). Dies **App registration** ermöglicht es SCEPman, auf die Azure AD- und Intune-Verzeichnisse im **Target Tenant**.

{% hint style="warning" %}
Das **Client Secret** das im Rahmen dieser **App registration** erstellt wird, läuft ab und muss vor Ablauf erneuert werden. Bitte setzen Sie eine Erinnerung für die Erneuerung.
{% endhint %}

**Erstellen** die folgenden neuen Umgebungsvariablen, falls Sie dies nicht bereits bei der Erstellung der App-Registrierung getan haben:

<table><thead><tr><th width="395">Name</th><th>Wert</th></tr></thead><tbody><tr><td><code>AppConfig:AuthConfig:ApplicationId</code></td><td>GUID der <strong>App registration</strong> die zuvor erstellt wurde <strong>(Target Tenant).</strong></td></tr><tr><td><code>AppConfig:AuthConfig:TenantId</code></td><td>Tenant ID der <strong>Target Tenant</strong>.</td></tr><tr><td><code>AppConfig:AuthConfig:ApplicationKey</code></td><td><strong>Wert</strong> des <strong>Client Secret</strong> das im Rahmen der <strong>App registration</strong> im <strong>Target Tenant</strong>.</td></tr></tbody></table>

5. Wenden Sie die Änderungen an.
6. Starten Sie SCEPman neu **App service**.

### Certificate Master

7. Navigieren Sie zum Certificate Master **App service** und dann zu "Settings" > "Environment variables".
8. Jetzt haben Sie zwei Optionen:
   1. Wenn Benutzer aus Ihrem **Home Tenant** sich beim Certificate Master anmelden und Zertifikate ausstellen sollen, einschließlich Gastbenutzer in Ihrem Home Tenant, z. B. aus Ihrem Target Tenant.&#x20;

<figure><img src="https://2075553437-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>Option 1: Benutzer aus dem Home Tenant melden sich beim Certificate Master an</p></figcaption></figure>

Wenn das der Fall ist, **benennen Sie um** die folgenden Einstellungen um (**ändern Sie ihre Werte nicht**):

<table><thead><tr><th width="385">Ursprünglicher Name</th><th>Neuer Name</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. Sie möchten, dass Benutzer aus Ihrem **Target Tenant** sich beim Certificate Master anmelden und Zertifikate ausstellen, einschließlich Gastbenutzer in Ihrem Target Tenant, z. B. aus Ihrem Home Tenant.&#x20;

<figure><img src="https://2075553437-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>Option 2: Benutzer aus dem Target Tenant melden sich beim Certificate Master an</p></figcaption></figure>

Wenn das der Fall ist, gehen Sie wie folgt vor:

* Öffnen Sie eine **PowerShell** oder **Azure Cloud Shell** in Ihrem **Target Tenant** und führen Sie die folgenden Befehle aus:

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

Ersetzen Sie `<url>` mit Ihrer Certificate Master-URL

* Das **CMDlet** gibt eine **Application Id** und eine **Tenant Id** (die des **Target Tenant**) aus. Geben Sie diese beiden Werte als&#x20;
  * `AppConfig:AuthConfig:HomeApplicationId` und
  * `AppConfig:AuthConfig:HomeTenantId` in Ihren Certificate Master-Einstellungen ein.
* Jetzt **erstellen** die folgenden neuen Anwendungseinstellungen und überschreiben Sie dabei möglicherweise die vorhandenen mit denselben Werten wie in SCEPman:

<table><thead><tr><th width="393">Name</th><th>Wert</th></tr></thead><tbody><tr><td><code>AppConfig:AuthConfig:ApplicationId</code></td><td>GUID der <strong>App registration</strong> das zuvor erstellt wurde.</td></tr><tr><td><code>AppConfig:AuthConfig:TenantId</code></td><td>Tenant ID der <strong>Target Tenant</strong>.</td></tr><tr><td><code>AppConfig:AuthConfig:ApplicationKey</code></td><td><strong>Wert</strong> des <strong>Client Secret</strong> das im Rahmen der <strong>App registration</strong> Sie können bei Bedarf ein separates neues Client Secret für Certificate Master erstellen.</td></tr></tbody></table>

9. Speichern Sie die Änderungen
10. Starten Sie den SCEPman Certificate Master neu **App service**.
11. Gewähren Sie die Rechte zum Anfordern von Zertifikaten über die **Certificate Master** Web-App, siehe [hier](https://docs.scepman.com/de/scepman-bereitstellung/permissions/post-installation-config#granting-the-rights-to-request-certificates-via-the-certificate-master-website)

Zur Übersicht sind hier die Konten aufgeführt, die von **Certificate Master** verwendet werden, und wofür sie verwendet werden:

| Konto                                               | Wofür wird es verwendet?                                                                                                                                                                                                                   | Hinweise                                                                                    |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- |
| Managed Identity                                    | <ul><li>Autorisieren von an SCEPman übermittelten CSRs</li><li>Zugriff auf das Storage Account</li></ul>                                                                                                                                   | N/V                                                                                         |
| App Registration mit App ID von `ApplicationId`     | Certificate Master greift in diesem Kontext auf Microsoft Graph zu, um zu sehen, welche Zertifikate über Intune ausgestellt wurden                                                                                                         | Wenn `ApplicationKey` nicht vorhanden ist, wird stattdessen die Managed Identity verwendet. |
| App Registration mit App ID von `HomeApplicationId` | Benutzer authentifizieren **nach** diese Anwendung. Sie sollte sich in dem Tenant befinden, in dem die Benutzer liegen, die auf Certificate Master zugreifen (Gastbenutzer aus anderen Tenants können jedoch ebenfalls autorisiert werden) | Wenn `HomeApplicationId` nicht vorhanden ist, `ApplicationId` wird stattdessen verwendet.   |

Nun ist die Split-Tenancy-Konfiguration abgeschlossen, und Sie können Ihre SCEP-Profile basierend auf Ihrem MDM konfigurieren, siehe [hier](https://docs.scepman.com/advanced-configuration/split-tenancy)

## Überlegungen bei mehreren Target Tenants

Wenn Sie mehrere SCEPman-Instanzen haben möchten, die Zertifikate für verschiedene Target Tenants ausstellen, müssen Sie zusätzliche Konfigurationsschritte durchführen, um diese Instanzen voneinander zu isolieren.

Ein mögliches Konzept könnte eine Management-Ressourcengruppe umfassen, die einen einzigen App Service Plan enthält, der die Rechenressourcen für alle Ihre SCEPman App Services bereitstellt. Folgende Punkte sollten berücksichtigt werden, wenn dies für mehrere Tenants umgesetzt wird:

* Jede Instanz sollte ihre eigene Ressourcengruppe haben, um sie voneinander zu unterscheiden
* Sie sollten für jede Instanz App Registrations erstellen, um die Berechtigungen zu isolieren
* Der App Service Plan sollte in einer unabhängigen Management-Ressourcengruppe erstellt werden, da er mehrere Instanzen bedient

In diesem Diagramm stellen ein Management-Tenant und seine zwei SCEPman-Instanzen Zertifikate für die Tenants von Contoso und Tailwind bereit:

{% @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" %}

### Eine neue SCEPman-Instanz zu einem vorhandenen App Service Plan hinzufügen

Beim Bereitstellen einer neuen SCEPman-Instanz mit der [Enterprise-Bereitstellungsmethode](https://docs.scepman.com/scepman-deployment/deployment-options/enterprise-deployment) haben Sie die Möglichkeit, die Ressourcen-ID eines vorhandenen App Service Plan einzugeben, zu dem diese Instanz hinzugefügt werden soll.

<figure><img src="https://2075553437-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>

Diese Ressourcen-ID finden Sie in den Eigenschaften des vorhandenen App Service Plan:

<figure><img src="https://2075553437-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>

### Kundenspezifische App Registrations erstellen

Um die Berechtigungen der Apps zu isolieren, müssen Sie den Post-Deployment-Befehl anpassen, um benutzerdefinierte App Registrations anzugeben:

{% code overflow="wrap" %}

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

{% endcode %}

Dieser Befehl führt zu einer vollständig konfigurierten SCEPman-Instanz, die von den vorherigen Instanzen isoliert ist. Sie können nun mit der Konfiguration der Split-Tenancy für diese Instanz fortfahren.

Der obige Abschnitt zum Certificate Master kann nun optional angewendet werden, wenn dieser Dienst aus dem Kunden-Tenant erreichbar sein soll.
