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¶
- Open het project dat de spoke-deploymentpipeline bevat, Project settings, Pipelines, Settings.
- Zet uit:
- Limit job authorization scope to current project for non-release pipelines
- Protect access to repositories in YAML pipelines
- 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):
- 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.
- Sla de app-ID op als organization-variabele
cloud_platform_gh_app_iden de private key als organization-secretcloud_platform_gh_app_private_key. - Beperk toegang tot deze twee tot alleen de configuratierepositories.
- De workflows maken met
actions/create-github-app-tokeneen kortlevend installatietoken en geven dat alsTF_VAR_github_tokenaan 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)