Ga naar inhoud

Spoke-integraties voorbereiden (Azure DevOps en GitHub)

Een spoke kan voor zijn team een Azure DevOps-repository en service connection aanmaken, of een GitHub-repository met federated credentials (Spoke-integraties). Beide zijn optioneel. Heeft geen enkel spoke-bestand een azdo-blok of een ingeschakelde GitHub-extensie, sla deze pagina dan over.

Doe de voorbereiding één keer per organisatie, vóór de eerste spoke die de integratie gebruikt.

Azure DevOps

De identiteit die de spoke-pipeline draait, moet repositories en service connections mogen aanmaken in de projecten van de teams.

Pipelineinstellingen

  1. Open het project dat de spoke-deploymentpipeline bevat, Project settings, Pipelines, Settings.
  2. Zet uit:
    • Limit job authorization scope to current project for non-release pipelines
    • Protect access to repositories in YAML pipelines
  3. Zijn de opties grijs, zet ze dan eerst uit in de organization-instellingen. Daarna kunnen de projectinstellingen worden gewijzigd.

Permissies

Het build service account (Project Collection Build Service) heeft permissies nodig op de projecten waar repositories en service connections worden aangemaakt. Geef ze per project op projectniveau, of eenmalig op organisatieniveau met een script.

Projectniveau. In elk project (nieuw en bestaand):

  • Project settings, Repositories, Security, Project Collection Build Service: zet Advanced Security: manage settings en Create repository op Allow.
  • Service connections, het menu van een service connection, Security, Add, Project Collection Build Service: rol Creator.

Organisatieniveau. Granulaire permissies kunnen in de webinterface niet op organisatieniveau worden ingesteld. De coderepository van het spoke canvas bevat een script, Scripts\Configure-AzureDevOpsPermissions.ps1. Het maakt een groep aan in Azure DevOps, geeft die de bovenstaande permissies en voegt het build service account aan de groep toe:

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

Draai het één keer met een account dat permissies in de organisatie mag beheren.

Federated credentials

Met useFederatedCredentials: true gebruikt de service connection workload identity federation. De spoke-deployment maakt de federated credential aan op de app registration van de service principal van de spoke, dus je hebt alleen de permissie van de spoke-identiteit nodig om applicaties te beheren (Identiteit voorbereiden).

GitHub

GitHub App

De spoke-deployment beheert repositories via een GitHub App. Maak er een aan, of hergebruik de app van de platformworkflows (GitHub voorbereiden):

  1. Maak een GitHub App aan of kies er een die in de organisatie is geïnstalleerd (GitHub.com of GitHub Enterprise Server). Geef hem een naam en beschrijving die zeggen dat hij door de platformworkflows wordt gebruikt.
  2. Sla de app-ID op als organization-variabele cloud_platform_gh_app_id en de private key als organization-secret cloud_platform_gh_app_private_key.
  3. Beperk toegang tot deze twee tot alleen de configuratierepositories.
  4. De workflows maken met actions/create-github-app-token een kortlevend installatietoken en geven dat als TF_VAR_github_token aan Terraform mee.

De app heeft deze permissies nodig voor de extensie:

Niveau Permissie
Repository Metadata: Read. Actions, Actions variables, Administration, Code, Environments, Repository hooks, Secrets, Workflows: Read en Write.
Organisatie (als repositories in een organisatie worden aangemaakt) Actions variables: Read. Organization hooks: Read. Organization secrets: Read. Administration: Read en Write.
Repositorytoegang Alleen de configuratierepositories voor de bovenstaande variabele en secret

Meer dan de platformworkflows nodig hebben

GitHub voorbereiden noemt een kleinere set voor de platformworkflows. De extensie maakt repositories, environments, secrets en hooks aan, dus hij heeft de grotere set nodig. Deel je één app, geef hem dan de grotere set. Wil je de kleinere set op de platformapp houden, maak dan een tweede app voor de extensie.

Staat de repository van de spoke in een andere organisatie dan het platform, dan moet de app ook daar geïnstalleerd zijn (de spoke-deployment heeft een aparte installatie-ID-input voor de workloadorganisatie).

GitHub Enterprise Server

Stel voor GitHub Enterprise de instance in bij de algemene instellingen, of per spoke in het spoke-bestand (Algemene spoke-instellingen):

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

Voor GitHub.com is de issuer https://token.actions.githubusercontent.com en de base URL https://github.com/.

De spoke-deployment downloadt ook Terraform-modules uit repositories op GitHub Enterprise. De agent moet zich daarvoor kunnen authenticeren: Toegang tot modulebronnen.

Controle

  • [ ] De organization-variabele en -secret bestaan en zijn beperkt tot de configuratierepositories
  • [ ] De app is geïnstalleerd met de bovenstaande permissies
  • [ ] ghinfo (of de waarden per spoke) wijzen naar de juiste instance en issuer
  • [ ] Een testspoke met de extensie maakt de repository aan, en een workflow erin kan inloggen (Gebruik het in een workflow)