Mengintegrasikan Azure Key Vault ke dalam alur kerja GitHub Actions

Integrasikan Azure Key Vault ke dalam alur kerja GitHub Actions Anda untuk mengelola kredensial sensitif dengan aman di satu tempat. Pendekatan ini mengurangi risiko paparan yang tidak disengaja atau akses tidak sah ke data sensitif.

Alur kerja sampel GitHub Actions ini menunjukkan cara mengambil rahasia dengan aman dari Azure Key Vault menggunakan autentikasi OpenID Connect (OIDC).

Prasyarat

  • Konfigurasikan kredensial identitas gabungan pada aplikasi Microsoft Entra atau identitas terkelola yang ditetapkan pengguna. Pelajari cara mengautentikasi ke Azure dari GitHub Actions by OpenID Connect. Saat Anda menyiapkan kredensial federasi Anda, simpan rahasia ini di GitHub:
    • AZURE_CLIENT_ID: ID klien perwakilan layanan Azure Anda.
    • AZURE_TENANT_ID: ID penyewa Azure Active Directory Anda.
    • AZURE_SUBSCRIPTION_ID: ID langganan Azure Anda.
    • KEYVAULT_NAME: Nama Key Vault Anda.
  • Memberikan izin: Pastikan perwakilan layanan memiliki akses yang sesuai ke Key Vault (misalnya, peran "Pengguna Rahasia Key Vault").
  • Ganti <SECRET_NAME> dengan nama rahasia Key Vault Anda.

Sampel alur kerja GitHub Actions

Apa fungsi alur kerja:

  • Pemicu pada dorongan ke cabang utama
  • Menggunakan autentikasi OIDC untuk menyambungkan ke Azure (tidak ada kata sandi yang disimpan di GitHub)
  • Mengambil rahasia dari Azure Key Vault
  • Menutupi nilai rahasia dengan ::add-mask:: untuk mencegahnya muncul di log
  • Membuat rahasia tersedia sebagai variabel lingkungan untuk langkah-langkah berikutnya
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 }}

Sumber daya tambahan