Integracja Azure Key Vault z przepływem pracy GitHub Actions

Zintegruj usługę Azure Key Vault z przepływem pracy funkcji GitHub Actions, aby bezpiecznie zarządzać poufnymi poświadczeniami w jednym miejscu. Takie podejście zmniejsza ryzyko przypadkowego ujawnienia lub nieautoryzowanego dostępu do poufnych danych.

Ten przykładowy przepływ pracy GitHub Actions pokazuje, jak bezpiecznie pobierać wpisy tajne z Azure Key Vault przy użyciu uwierzytelniania OpenID Connect (OIDC).

Wymagania wstępne

  • Skonfiguruj poświadczenie tożsamości federacyjnej w aplikacji Microsoft Entra lub przypisanej przez użytkownika tożsamości zarządzanej. Dowiedz się, jak uwierzytelniać się na platformie Azure z funkcji GitHub Actions firmy OpenID Connect. Po skonfigurowaniu poświadczeń federacyjnych, zapisz te sekrety w GitHub.
    • AZURE_CLIENT_ID: identyfikator klienta jednostki usługi platformy Azure.
    • AZURE_TENANT_ID: Identyfikator dzierżawcy usługi Azure AD.
    • AZURE_SUBSCRIPTION_ID: Identyfikator subskrypcji platformy Azure.
    • KEYVAULT_NAME: Nazwa usługi Key Vault.
  • Udziel uprawnień: upewnij się, że jednostka usługi ma odpowiedni dostęp do Key Vault (na przykład rola "Użytkownik sekretów Key Vault").
  • Zastąp <SECRET_NAME> nazwą tajnego w Key Vault.

Przykład przepływu pracy funkcji GitHub Actions

Co robi przepływ pracy:

  • Wyzwalacze wypychania do gałęzi głównej
  • Używa uwierzytelniania OIDC do nawiązywania połączenia z platformą Azure (bez haseł przechowywanych w usłudze GitHub)
  • Pobiera tajemnicę z usługi Azure Key Vault
  • Maskuje tajną wartość przy użyciu ::add-mask::, aby uniemożliwić jej pojawienie się w dziennikach
  • Ustawia tajemnicę jako zmienną środowiskową dla kolejnych kroków.
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 }}

Dodatkowe zasoby