Spoke extensions: Shared Services konfigurieren¶
Eine spoke extension verbindet einen spoke beim Deployment mit einem Shared Service, etwa einer gemeinsamen API-Management-Instanz oder einer Container-Registry. Das spoke-Deployment gibt den richtigen Identitäten Zugriff und richtet ein, was das workload-Team braucht, sodass das Team den Shared Service direkt nach der Übergabe des spokes nutzen kann. Niemand muss auf eine separate Änderung warten.
Diese Seite ist für das Plattform-Team: wie du die Shared Services konfigurierst, was jede Extension erstellt und wie du eine neue Extension hinzufügst. Die Sicht des workload-Teams steht unter Shared Services.
Herkunft dieser Seite
Spoke extensions wurden mit spoke canvas 2.9.0 eingeführt (Release-Historie). Die Shared Services liegen in einem eigenen spoke, der mit demselben spoke canvas deployt und mit dem hub verbunden wird. Der Traffic dorthin läuft über die Hub-firewall. Prüfe die Bekannten Probleme, bevor du eine Extension aktivierst: Das spoke-Schema akzeptiert nicht jedes Feld, das Terraform liest.
So funktioniert es¶
flowchart LR
spoke["Workload spoke<br/>(spoke JSON: extensions.*.enabled)"] -->|"spoke deployment"| ext["Extension code<br/>(pinned to a version tag)"]
ext -->|"role assignments, groups,<br/>managed identities"| shared["Shared services spoke<br/>APIM, ACR, Service Bus, Event Hub"]
team["Workload team"] -->|"uses the service"| shared
Zwei Dinge steuern das Verhalten:
- Generische Konfiguration, einmal pro Plattform: wo die Shared Services sind.
- Spoke-spezifische Konfiguration, pro spoke: welche Extensions aktiv sind.
1. Generische Konfiguration¶
In der aktuellen Plattform stehen die Shared Services in SpokeCommon.shared_services von mcp.json
(Konfigurationsreferenz). Im älteren eigenständigen spoke canvas stand derselbe Block in
common.tf (Upgrade-Leitfäden). Der Block enthält die
subscription der Shared Services und pro Region die Resource-IDs:
shared_services = {
subscription_id = null # string, subscription of the shared services
weu = { # one block per region
eventhub_resourceid = null # resource ID of the Event Hub namespace
apim_resourceid = null # resource ID of the API Management instance
acr_resourceid = null # resource ID of the container registry
acr_pull_group_object_id = null # object ID of the main AcrPull group (needed for the ACR extension)
acr_push_group_object_id = null # object ID of the main AcrPush group (needed for the ACR extension)
acr_administrative_unit_id = null # optional, administrative unit for the spoke ACR sub-groups
# (default: tenantinfo.AdministrativeUnitId)
servicebus_resourceid = null # resource ID of the Service Bus namespace
acs_resourceid = null # resource ID of the Communication Services resource
}
}
Trage nur die Services ein, die du betreibst. Verwende den Region-Key, den deine Plattform nutzt (im Beispiel weu).
2. Spoke-spezifische Konfiguration¶
Im spoke-JSON wird jede Extension ein- oder ausgeschaltet:
"extensions": {
"apim": { "enabled": false },
"acr": { "enabled": false },
"servicebus": { "enabled": false },
"eventhub": { "enabled": false }
}
Um eine einzuschalten, setze enabled in einem pull request auf true (Spoke ändern) und führe
das spoke-Deployment aus (Spoke-Deployment). Der Extension-Code läuft als Teil dieses
Deployments. Das Feld ist in der Spoke-JSON-Referenz beschrieben.
Was jede Extension erstellt¶
Die Rollen werden den Gruppen des spokes (Owners, Contributors, Readers) und dem Deployment-Principal des spokes zugewiesen.
Siehe das Identitätsmodell.
| Extension | Was sie einrichtet |
|---|---|
| API Management, zentrales Modell (Default) | API Management Service Contributor für den Deployment-Principal des spokes, die Owners-Gruppe und die Contributors-Gruppe. API Management Service Reader für die Readers-Gruppe. |
| API Management, dezentrales Modell | Ein API Management Workspace pro spoke. API Management Workspace Contributor auf dem Workspace für den Deployment-Principal des spokes, Owners und Contributors. API Management Workspace Reader für Readers. |
| Azure Container Registry | Keine Rollenzuweisungen pro spoke auf der Registry. AcrPull und AcrPush werden einmal den Hauptgruppen der gemeinsamen Registry zugewiesen. Pro spoke erstellt die Extension zwei Entra-ID-Untergruppen, <main AcrPull group name>-<spoke> und <main AcrPush group name>-<spoke>, die in den Hauptgruppen verschachtelt sind und dem Service Principal des spokes gehören, sowie zwei Managed Identities, <prefix>-acrpull-mi und <prefix>-acrpush-mi, die Mitglieder der passenden Untergruppe sind. |
| Event Hub | Ein neuer Event Hub im gemeinsamen Namespace. User Access Administrator für den Deployment-Principal des spokes. Azure Event Hub Data Owner und Owner für Owners, Contributor für Contributors, Reader für Readers, alle auf diesem Event Hub. |
| Service Bus | Eine Gruppe für Data Sender and Receiver access to Service Bus messaging entities mit den Rollen Azure Service Bus Data Sender und Azure Service Bus Data Receiver auf dem Namespace. Mitglieder: Owners und Contributors. Eine Gruppe für Reader access to the Service Bus Namespace mit Service Bus Namespace Reader. Mitglieder: Readers und die Sender/Receiver-Gruppe. Der Deployment-Principal des spokes erhält Service Bus Namespace Manager und User Access Administrator, Letzteres beschränkt auf das Zuweisen der beiden Data-Rollen an Gruppen. |
| Communication Services | Derzeit nicht verfügbar. |
Hinweise:
- ACR. Die Gruppen Owners, Contributors und Readers des spokes erhalten über die Extension keinen Registry-Zugriff. Mitglieder, die jemand von Hand zu den Untergruppen hinzufügt, bleiben erhalten. Das Löschen von Images ist bewusst nicht erlaubt, damit Teams die Images anderer nicht löschen können, weder absichtlich noch versehentlich.
- Dedizierte Gruppen. Um allen Team-Gruppen Zugriff auf eine zentrale Ressource zu geben, etwa den Bastion-Host oder eine Registry mit den Managed Templates, nutze eine dedizierte Gruppe statt vieler Rollenzuweisungen. Siehe Dedicated group manager.
Integration Platform
Die Integration Platform baut auf dieser Extension eine Service-Bus-Automatisierung pro Entität auf (Service-Bus-Automatisierung). Ihre Quelle beschreibt die Service-Bus-Rollen anders als die Tabelle oben. Prüfe die Version der Extension, die du einsetzt, bevor du dich auf eines von beiden verlässt.
Eine Extension aktivieren: Checkliste¶
- Der Shared Service existiert und seine Resource-ID steht im Block
shared_servicesder Region. - Für ACR: Die Hauptgruppen
AcrPullundAcrPushexistieren und ihre Object-IDs sind gesetzt. - Das spoke-JSON setzt
enabledfür die Extension auftrue. Führe die Config-Tests aus (Tests lokal ausführen). - Nach dem Review läuft das spoke-Deployment. Lies den Plan: Du erwartest neue Rollenzuweisungen und Gruppen, keine Löschungen.
- Prüfe das Ergebnis in Azure (die Rollenzuweisungen und die Gruppen aus der Tabelle oben) und informiere das workload-Team.
Eine neue Extension beisteuern¶
Eine Extension ist Code, den ein spoke-Deployment einbindet. Um eine hinzuzufügen, stelle sicher, dass:
- die Extension in einem Git-Repository liegt, das das spoke-Deployment lesen kann;
- das Repository Versions-Tags nutzt, damit ein spoke-Deployment eine Version fixieren kann;
- der Shared Service, den du erweiterst, verfügbar ist;
- das Warum und Wie der Extension dokumentiert sind.
Bei einem neuen Shared Service prüfen die Funktionen Architektur, Betrieb und Security die Anfrage zuerst (Service-Typen).