Workload Identity Federation: Deploya till Azure från GitHub Actions utan hemligheter

Problemet med klienthemligheter i CI/CD

Det traditionella sättet att autentisera GitHub Actions mot Azure innebär att skapa en service principal, generera en klienthemlighet och lagra den i GitHub Secrets. Det fungerar, men det har verkliga problem:

Workload identity federation löser allt detta. Istället för en lagrad hemlighet presenterar GitHub Actions en kortlivad OIDC-token som Azure verifierar direkt. Inga hemligheter lagras någonstans.

Hur OIDC-federation fungerar

Flödet har tre deltagare:

Token är kortlivad (giltig under workflow-jobbets längd), begränsad till det specifika repot/branchen, och lagras aldrig någonstans.

Steg 1: Skapa appregistrering och federerad credential

Du kan konfigurera detta med Azure CLI:

Subject-claimet styr vilka workflows som kan autentisera. Några vanliga mönster:

Steg 2: Tilldela Azure-roller

Begränsa rollen till så smal nivå som möjligt. Contributor på en specifik resursgrupp är bättre än Contributor på hela prenumerationen.

Steg 3: Konfigurera GitHub Actions-workflowet

Lägg till tre secrets i ditt GitHub-repository (Settings > Secrets > Actions): AZURE_CLIENT_ID, AZURE_TENANT_ID och AZURE_SUBSCRIPTION_ID. Observera: ingen av dessa är faktiska hemligheter. De är bara identifierare.

De viktigaste delarna:

Terraform med OIDC

Om du föredrar att hantera appregistreringen och den federerade credentialen som infrastruktur, här är Terraform-motsvarigheten:

Gamla sättet vs nya sättet

Här är vad du kan ta bort från din uppsattning efter migrering till OIDC:

Migreringen är enkel: skapa den federerade credentialen, uppdatera workflow-filen, ta bort den gamla AZURE_CREDENTIALS-hemligheten från GitHub och radera klienthemligheten från appregistreringen.

Vidare läsning

För mer detaljer, se dokumentationen för workload identity federation och GitHub Actions OIDC med Azure.

Daniel Moquist

Författare

augusti 05, 2025

Daniel Moquist

Cloud Architect & DevOps Expert