Spoke-integraties: Azure DevOps en GitHub¶
Een spoke kan de resources aanmaken die zijn team nodig heeft om een workload te deployen: een Azure DevOps-repository en service connection, of een GitHub-repository met federated credentials. Beide zijn optioneel. Deze pagina beschrijft de blokken in het spoke-bestand en wat de deployment ermee doet. De eenmalige voorbereiding (permissies, GitHub App, pipelineinstellingen) staat in Spoke-integraties voorbereiden.
Ontbreekt een blok in het spoke-bestand, dan wordt er niets aangemaakt en is er geen voorbereiding nodig.
Hoe de service principal aan zijn credentials komt¶
Elke spoke heeft een service principal. Hoe die authenticeert, hangt af van de integratie die je kiest:
| Configuratie | Credential |
|---|---|
Azure DevOps-blok met useFederatedCredentials: true, of de GitHub-extensie ingeschakeld |
Geen secret. De service connection of workflow gebruikt workload identity federation (OIDC). |
Azure DevOps-blok zonder useFederatedCredentials (standaard) |
Er wordt een secret gegenereerd en samen met de client ID in de Key Vault van de spoke opgeslagen. |
| Geen van beide integraties, Key Vault gedeployd | Er wordt een secret gegenereerd en in de Key Vault opgeslagen. |
| Geen van beide integraties, Key Vault niet gedeployd | De service principal heeft geen credentials. Het team stelt ze buiten de spoke-deployment in. |
Geef de voorkeur aan federated credentials. Er hoeft geen secret te worden opgeslagen, geroteerd of gelekt.
Azure DevOps¶
"azdo": {
"projectName": "<existing project>",
"repoName": "repo-##wlshortname##-##environment##",
"serviceConnectionName": "sc-sub-##wlshortname##-##environment##",
"useFederatedCredentials": true
}
| Veld | Beschrijving |
|---|---|
projectName |
Naam van het bestaande Azure DevOps-project waarin de resources worden aangemaakt. |
repoName |
Aan te maken repository. De repository wordt één keer aangemaakt, als hij nog niet bestaat. Er is één repository, niet één per lifecycle-omgeving. |
serviceConnectionName |
Aan te maken Azure Resource Manager service connection, voor de service principal van de spoke. |
useFederatedCredentials |
true: workload identity federation, geen secret. false (standaard): op basis van een secret. Er wordt een federated credential aangemaakt op de app registration van de service principal. |
De placeholders ##wlshortname## en ##environment## worden vervangen.
De pipeline die de spoke-deployment draait, heeft projectinstellingen en permissies nodig om deze resources aan te maken. Die staan in Spoke-integraties voorbereiden.
GitHub-extensie¶
"extensions": {
"github": {
"enabled": true,
"repository": "##wlshortname##-##environment##-repo",
"repository_visibility": "private",
"environments": ["dev", "test", "prod"]
}
}
| Veld | Vereist | Beschrijving |
|---|---|---|
enabled |
ja | Standaard false. |
repository |
ja | Naam van de aan te maken repository. |
organization |
nee | GitHub-organisatie. Standaard: ghinfo.OrganizationName uit de algemene instellingen. |
oidc_issuer |
nee | OIDC-issuer-URL. Standaard: ghinfo.OidcIssuer. |
repository_description |
nee | Standaard: Repository managed by Azure Spoke deployment. |
repository_visibility |
nee | public, private of internal. Standaard private. |
repository_auto_init |
nee | Initialiseren met een README. Standaard true. |
environment |
nee | Eén omgevingsnaam voor de federated credential. Behouden voor achterwaartse compatibiliteit. |
environments |
nee | Lijst met omgevingsnamen. Als die is ingesteld, vervangt hij environment. |
Schema-ondersteuning
Het extensions-blok in het spoke-schema van sommige versies staat alleen apim, acr, servicebus en eventhub toe
(Spoke-JSON-referentie). Weigert de config test extensions.github, dan bevat het schema van de
codeversie die je pint de extensie nog niet. Controleer de versie voordat je een spoke met deze extensie plant.
Wat er wordt aangemaakt¶
- Een repository met de bovenstaande instellingen.
-
Federated identity credentials op de service principal van de spoke, zodat workflows zonder secret bij Azure inloggen:
Credential Subject Main branch repo:<organization>/<repository>:ref:refs/heads/mainEén per omgeving in environmentsrepo:<organization>/<repository>:environment:<environment-name> -
Actions-secrets in de repository voor de Azure-aanmelding.
De secrets die de workflow leest, zijn AZURE_CLIENT_ID, AZURE_TENANT_ID en AZURE_SUBSCRIPTION_ID.
Gebruik het in een workflow¶
Een workflow in de nieuwe repository logt in met de federated credential. Daarvoor is de permissie id-token: write nodig, en
voor een omgevingsspecifieke credential de environment:-sleutel van de job:
permissions:
id-token: write
contents: read
jobs:
deploy:
runs-on: ubuntu-latest
environment: production # must match an environment in the spoke file
steps:
- uses: actions/checkout@v4
- uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Omgevingsnamen
Een workflowjob kan alleen een federated credential gebruiken voor een omgeving die het spoke-bestand vermeldt. Faalt de
aanmelding met een subject mismatch, vergelijk dan de omgevingsnaam van de job met environments.
Varianten¶
| Scenario | Spoke-bestand |
|---|---|
| Standaarden uit de algemene instellingen | enabled, repository, environments |
| Een andere organisatie | voeg organization toe |
| GitHub Enterprise Server | voeg organization en oidc_issuer (https://<github host>/_services/token) toe, of stel beide in ghinfo in |
| Eén omgeving (oudere stijl) | environment in plaats van environments |
Gerelateerde pagina's¶
- Spoke-integraties voorbereiden
- Toegang tot modulebronnen voor GitHub Enterprise
- Spoke-JSON-referentie en Nieuwe spoke