Zum Inhalt

Spoke-Integrationen vorbereiten (Azure DevOps und GitHub)

Ein spoke kann für sein Team ein Azure-DevOps-Repository und eine Service Connection oder ein GitHub-Repository mit Federated Credentials erstellen (Spoke-Integrationen). Beides ist optional. Wenn keine spoke-Datei einen Block azdo oder eine aktivierte GitHub-Extension hat, überspringe diese Seite.

Führe die Vorbereitung einmal pro Organisation durch, vor dem ersten spoke, der die Integration nutzt.

Azure DevOps

Die Identität, die die spoke-pipeline ausführt, muss Repositories und Service Connections in den Projekten der Teams erstellen dürfen.

pipeline-Einstellungen

  1. Öffne das Projekt, das die spoke-Deployment-pipeline enthält, Project settings, Pipelines, Settings.
  2. Schalte aus:
    • Limit job authorization scope to current project for non-release pipelines
    • Protect access to repositories in YAML pipelines
  3. Wenn die Optionen ausgegraut sind, schalte sie zuerst in den Einstellungen der Organisation aus. Danach lassen sich die Projekteinstellungen ändern.

Berechtigungen

Das Build-Service-Konto (Project Collection Build Service) braucht Berechtigungen auf den Projekten, in denen Repositories und Service Connections erstellt werden. Vergib sie auf Projektebene für jedes Projekt, oder einmal auf Organisationsebene mit einem Skript.

Projektebene. In jedem Projekt (neu und bestehend):

  • Project settings, Repositories, Security, Project Collection Build Service: Setze Advanced Security: manage settings und Create repository auf Allow.
  • Service connections, das Menü einer Service Connection, Security, Add, Project Collection Build Service: Rolle Creator.

Organisationsebene. Granulare Berechtigungen lassen sich auf Organisationsebene nicht in der Weboberfläche setzen. Das Code-Repository des Spoke canvas enthält ein Skript, Scripts\Configure-AzureDevOpsPermissions.ps1. Es erstellt eine Gruppe in Azure DevOps, gibt ihr die obigen Berechtigungen und fügt das Build-Service-Konto der Gruppe hinzu:

.\Scripts\Configure-AzureDevOpsPermissions.ps1 -organization_name <organization>

Führe es einmal mit einem Konto aus, das Berechtigungen in der Organisation verwalten darf.

Federated Credentials

Mit useFederatedCredentials: true nutzt die Service Connection Workload Identity Federation. Das spoke-Deployment erstellt das Federated Credential auf der App-Registrierung des Service Principals des Spokes, du brauchst also nur die Berechtigung der spoke-Identität, Anwendungen zu verwalten (Identität vorbereiten).

GitHub

GitHub App

Das spoke-Deployment verwaltet Repositories über eine GitHub App. Erstelle eine, oder verwende die App der Plattform-Workflows weiter (GitHub vorbereiten):

  1. Erstelle oder wähle eine GitHub App, die in der Organisation installiert ist (GitHub.com oder GitHub Enterprise Server). Gib ihr einen Namen und eine Beschreibung, die sagen, dass sie von den Plattform-Workflows verwendet wird.
  2. Speichere die App-ID als Organisationsvariable cloud_platform_gh_app_id und den Private Key als Organisations-Secret cloud_platform_gh_app_private_key.
  3. Beschränke den Zugriff auf diese beiden auf die Konfigurations-Repositories.
  4. Die Workflows erstellen mit actions/create-github-app-token ein kurzlebiges Installations-Token und übergeben es als TF_VAR_github_token an Terraform.

Die App braucht für die Extension diese Berechtigungen:

Ebene Berechtigung
Repository Metadata: Read. Actions, Actions variables, Administration, Code, Environments, Repository hooks, Secrets, Workflows: Read and Write.
Organisation (wenn Repositories in einer Organisation erstellt werden) Actions variables: Read. Organization hooks: Read. Organization secrets: Read. Administration: Read and Write.
Repository-Zugriff Nur die Konfigurations-Repositories für die obige Variable und das obige Secret

Mehr, als die Plattform-Workflows brauchen

GitHub vorbereiten listet für die Plattform-Workflows einen kleineren Satz auf. Die Extension erstellt Repositories, Environments, Secrets und Hooks und braucht deshalb den größeren Satz. Wenn du eine App teilst, gib ihr den größeren Satz. Wenn du auf der Plattform-App den kleineren Satz willst, erstelle für die Extension eine zweite App.

Liegt das Repository des Spokes in einer anderen Organisation als die Plattform, muss die App auch dort installiert sein (das spoke-Deployment hat einen eigenen Input für die Installations-ID der Workload-Organisation).

GitHub Enterprise Server

Für GitHub Enterprise setze die Instanz in den allgemeinen Einstellungen oder pro spoke in der spoke-Datei (Allgemeine spoke-Einstellungen):

locals {
  ghinfo = {
    OrganizationName = "<organization>"
    OidcIssuer       = "https://<github host>/_services/token"
    BaseUrl          = "https://<github host>/"
  }
}

Für GitHub.com ist der Issuer https://token.actions.githubusercontent.com und die Base-URL https://github.com/.

Das spoke-Deployment lädt außerdem Terraform-Module aus Repositories auf GitHub Enterprise herunter. Der Agent muss sich dafür authentifizieren können: Zugriff auf Modulquellen.

Prüfen

  • [ ] Die Organisationsvariable und das Secret existieren und sind auf die Konfigurations-Repositories beschränkt
  • [ ] Die App ist mit den obigen Berechtigungen installiert
  • [ ] ghinfo (oder die Werte pro spoke) zeigen auf die richtige Instanz und den richtigen Issuer
  • [ ] Ein Test-spoke mit der Extension erstellt das Repository, und ein Workflow darin meldet sich an (In einem Workflow verwenden)