Integrieren von Azure Key Vault in einen GitHub-Aktionsworkflow

Integrieren Sie Azure Key Vault in Ihren GitHub-Aktionen-Workflow, um vertrauliche Anmeldeinformationen an einem zentralen Ort sicher zu verwalten. Dieser Ansatz reduziert das Risiko einer versehentlichen Exposition oder unbefugten Zugriff auf vertrauliche Daten.

Dieser GitHub Actions-Beispielworkflow veranschaulicht, wie geheime Schlüssel mithilfe der OpenID Connect(OIDC)-Authentifizierung sicher aus Azure Key Vault abgerufen werden.

Voraussetzungen

  • Konfigurieren Sie Anmeldedaten für eine Verbundidentität in einer Microsoft Entra-Anwendung oder einer vom Benutzer zugewiesenen verwalteten Identität. Erfahren Sie, wie Sie sich in Azure über GitHub Actions mittels OpenID Connect authentifizieren können. Wenn Sie Ihre Verbundanmeldeinformationen einrichten, speichern Sie diese geheimen Schlüssel in GitHub:
    • AZURE_CLIENT_ID: Die Client-ID Ihres Azure-Dienstprinzipals.
    • AZURE_TENANT_ID: Ihre Azure AD-Mandanten-ID.
    • AZURE_SUBSCRIPTION_ID: Die ID Ihres Azure-Abonnements.
    • KEYVAULT_NAME: Ihr Key Vault-Name.
  • Erteilen von Berechtigungen: Stellen Sie sicher, dass der Dienstprinzipal über einen geeigneten Zugriff auf den Key Vault verfügt (z. B. die Rolle "Key Vault Secrets User").
  • Ersetzen Sie <SECRET_NAME> durch den Namen Ihres Key Vault-Secrets.

GitHub Actions-Workflowbeispiel

Funktionsweise des Workflows:

  • Trigger bei Pushes an den Main-Branch
  • Verwendet die OIDC-Authentifizierung zum Herstellen einer Verbindung mit Azure (keine in GitHub gespeicherten Kennwörter)
  • Ruft einen geheimen Schlüssel aus Azure Key Vault ab.
  • Maskiert den geheimen Wert, ::add-mask:: um zu verhindern, dass er in Protokollen angezeigt wird.
  • Stellt den geheimen Schlüssel als Umgebungsvariable für nachfolgende Schritte zur Verfügung.
name: Access Azure Key Vault and pass secret to workflow

on:
  push:
    branches:
      - main

permissions:
  id-token: write
  contents: read

jobs:
  get-secret:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Azure Login
        uses: azure/login@v1
        with:
          client-id: ${{ secrets.AZURE_CLIENT_ID }}
          tenant-id: ${{ secrets.AZURE_TENANT_ID }}
          subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

      - name: Retrieve secret from Key Vault
        id: keyvault
        uses: azure/CLI@v1
        with:
          inlineScript: |
            SECRET_VALUE=$(az keyvault secret show --name <SECRET_NAME> --vault-name ${{ secrets.KEYVAULT_NAME }} --query value -o tsv)
            echo "::add-mask::$SECRET_VALUE"
            echo "SECRET_VALUE=$SECRET_VALUE" >> $GITHUB_ENV
      - name: Use retrieved secret
        run: echo "The secret is successfully retrieved!"

      - name: Use SECRET_VALUE in deployment
        run: |
          ./deploy.sh
        env:
          SECRET_VALUE: ${{ env.SECRET_VALUE }}

Weitere Ressourcen