Ga naar inhoud

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/main
    Eén per omgeving in environments repo:<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