Azure Key Vault'un GitHub Actions iş akışıyla tümleştirilmesi

Hassas kimlik bilgilerini tek bir yerde güvenli bir şekilde yönetmek için Azure Key Vault'ı GitHub Actions iş akışınızla tümleştirin. Bu yaklaşım, hassas verilere yanlışlıkla maruz kalma veya yetkisiz erişim riskini azaltır.

Bu GitHub Actions örnek iş akışı, OpenID Connect (OIDC) kimlik doğrulamasını kullanarak Azure Key Vault'tan gizli dizilerin nasıl güvenli bir şekilde alınduğunu gösterir.

Önkoşullar

  • Microsoft Entra uygulamasında veya kullanıcı tarafından atanan yönetilen kimlikte federasyon kimlik bilgisini yapılandırın. OpenID Connect ile GitHub Actions'tan Azure'da kimlik doğrulaması yapmayı öğrenin. Federasyon kimlik bilgilerinizi oluştururken bu gizli anahtarları GitHub'da depolayın.
    • AZURE_CLIENT_ID: Azure hizmet sorumlunuzun istemci kimliği.
    • AZURE_TENANT_ID: Azure AD kiracı kimliğiniz.
    • AZURE_SUBSCRIPTION_ID: Azure abonelik kimliğiniz.
    • KEYVAULT_NAME: Key Vault adınız.
  • İzin verin: Hizmet sorumlusuna Key Vault'a uygun erişime sahip olup olmadığını kontrol edin (örneğin, "Key Vault Secrets User" rolü).
  • "<SECRET_NAME>" ifadesini Key Vault gizli dizi adınızla değiştirin.

GitHub Actions iş akışı örneği

İş akışı ne yapar:

  • Ana dala göndermelerde tetikleyiciler
  • Azure'a bağlanmak için OIDC kimlik doğrulamasını kullanır (GitHub'da parola depolanmaz)
  • Azure Key Vault'tan bir sır alır
  • Gizli değerin günlüklerde görünmesini önlemek için ::add-mask:: ile maskeler
  • Sonraki adımlar için gizli diziyi ortam değişkeni olarak kullanılabilir hale getirir
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 }}

Ek kaynaklar