將 Azure Key Vault 整合到 GitHub Actions 工作流程

將 Azure Key Vault 整合到您的 GitHub Actions 工作流程中,以一個位置安全地管理敏感性認證。 這種方法可降低意外暴露或未經授權存取敏感數據的風險。

此 GitHub Actions 範例工作流程示範如何使用 OpenID Connect (OIDC) 驗證,安全地從 Azure Key Vault 擷取秘密。

先決條件

  • 在 Microsoft Entra 應用程式或使用者指派的受控識別上設定同盟身分識別認證。 瞭解如何 從 GitHub Actions by OpenID Connect 向 Azure 進行驗證。 當您設定同盟認證時,請將這些秘密儲存在 GitHub 中:
    • AZURE_CLIENT_ID:Azure 服務主體的用戶端 ID。
    • AZURE_TENANT_ID:您的 Azure AD 租用者識別碼。
    • AZURE_SUBSCRIPTION_ID = 您的 Azure 訂用帳戶識別碼。
    • KEYVAULT_NAME:您的 Key Vault 名稱。
  • 授與許可權:請確定服務主體具有密鑰保存庫的適當存取權(例如「Key Vault 秘密使用者」角色)。
  • 將 <SECRET_NAME> 替換為您的 Key Vault 秘密名稱。

GitHub Actions 工作流程範例

工作流程的用途:

  • 推送至主要分支的觸發器
  • 使用 OIDC 驗證來連線到 Azure(GitHub 中未儲存任何密碼)
  • 從 Azure Key Vault 擷取秘密
  • 遮罩秘密值 ::add-mask:: ,以防止它出現在記錄中
  • 讓秘密成為後續步驟的環境變數
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 }}

其他資源