Zum Inhalt

Dedicated Group Manager

Teams, die einen spoke bekommen, brauchen außerdem Zugriff auf einige Ressourcen außerhalb des spokes. Beispiele sind der zentrale Bastion-Host, der Zugriff auf ihre virtuellen Maschinen gibt (Verbindung zu virtuellen Maschinen), und eine Registry, die die Images der Managed Templates enthält. Jede Team-Gruppe von Hand zu diesen Ressourcen hinzuzufügen skaliert nicht. Weise stattdessen die Rolle einmal einer dedizierten Gruppe zu und lass eine pipeline die Team-Gruppen in dieser Gruppe pflegen.

Diese Seite beschreibt diese pipeline und ihr Skript, für das Plattform-Team.

Herkunft dieser Seite

Das Skript und die pipeline stammen aus dem spoke canvas früherer Versionen, und die pipeline ist eine Azure-DevOps- pipeline. Namen sind die der Starter-Dateien. Prüfe, was deine Code-Version mitliefert.

Was sie macht

Das Skript liest alle spoke-Dateien, sammelt die Team-Gruppen jedes spokes und hält die dedizierte Gruppe auf dem aktuellen Stand:

  • Team-Gruppen, die noch nicht in der dedizierten Gruppe sind, werden hinzugefügt;
  • Team-Gruppen, die in keiner spoke-Datei mehr vorkommen (der spoke ist weg), werden entfernt;
  • eine optionale Liste von Gruppennamen wird immer hinzugefügt, egal ob ein spoke auf sie verweist (zum Beispiel ein Security-Team).

Die pipeline wird durch einen Commit auf main des Konfigurations-Repositorys ausgelöst, die Gruppe ändert sich also bei Bedarf, sobald ein spoke hinzugefügt oder entfernt wird. Nutzer führen sie nicht aus.

flowchart LR
    c["Commit to main<br/>(spoke file added or removed)"] --> p["Pipeline"]
    p --> s["Script reads all spoke files"]
    s --> g["Dedicated Entra ID group<br/>(in an administrative unit)"]
    g -.->|"role assigned once<br/>on the resource"| r["Bastion, registry, ..."]

Nicht im Umfang enthalten

Das Skript weist der dedizierten Gruppe keine Rollen zu. Weise die Rolle (zum Beispiel die Pull-Rolle der Registry oder das Recht auf dem Bastion-Host) der Gruppe selbst zu, als Code.

Komponenten

Was Wo Anmerkung
DedicatedGroupManager.ps1 Ordner Scripts des Code-Repositorys Teil der Plattform. Ändere es nicht in deiner Kopie.
DedicatedGroupManager.yaml Ordner pipelines des Konfigurations-Repositorys Starter-Datei. Passe sie an.

Die pipeline einrichten

  1. Erstelle im Konfigurations-Repository eine pipeline aus der bestehenden YAML-Datei, mit dem Namen DedicatedGroupManager.
  2. Führe sie einmal von Hand aus, um den Pool, die Variable Group und die service connection zu autorisieren.
  3. Passe die Datei an:
Punkt Erforderlich Was zu tun ist
Variable Group Nur wenn ihr Name abweicht Die pipeline nutzt dieselbe Variable Group wie das spoke-Deployment.
ref des Code-Repositorys Ja Verwende den Tag der Code-Version, die du betreibst. Aktualisiere ihn bei jedem Upgrade.
ScriptArguments Ja Siehe die Parameter unten.

Ein anonymisierter Auszug des Schritts:

trigger:
  branches:
    include:
      - main

steps:
  - task: AzurePowerShell@5
    displayName: "Update group memberships"
    inputs:
      azureSubscription: $(ServiceConnectionName)
      ScriptType: "FilePath"
      ScriptPath: $(System.DefaultWorkingDirectory)/spokedeployment-tf/Scripts/DedicatedGroupManager.ps1
      ScriptArguments: -SpokeFilePath <spoke-folder> -TargetEntraGroup "<group-name>" -TargetEntraGroupAdminUnitId "<administrative-unit-id>" -AlwaysAddGroupsToTargetEntraGroup ""
      pwsh: true
Parameter Bedeutung
SpokeFilePath Wo das Skript mit der Suche nach spoke-Dateien beginnt. Behalte normalerweise den Default.
TargetEntraGroup Name der dedizierten Gruppe, die in der Administrative Unit erstellt wird. Beispiel: AllSpokeTeams.
TargetEntraGroupAdminUnitId ID der Entra-ID-Administrative-Unit, in der die Gruppe erstellt wird.
AlwaysAddGroupsToTargetEntraGroup Kommagetrennte Gruppennamen, die immer Mitglieder sind, zum Beispiel "Security team,VM management". Leer für keine.

Betrieb

  • Die pipeline nutzt die service connection des spoke-Deployments. Sie muss Gruppen in der Administrative Unit der dedizierten Gruppe verwalten dürfen.
  • Nachdem ein spoke entfernt wurde (spoke löschen), entfernt der nächste Lauf auf main seine Team-Gruppen aus der dedizierten Gruppe.
  • Wenn ein Team eine zentrale Ressource nicht erreicht, prüfe zuerst, ob seine Gruppe in der dedizierten Gruppe ist und ob die pipeline nach dem Merge der spoke-Datei gelaufen ist.