通过


将 Azure Key Vault 集成到 GitHub Actions 工作流中

Azure Key Vault 集成到 GitHub Actions 工作流中,在一个位置安全地管理敏感凭据。 此方法可降低意外泄露或未经授权访问敏感数据的风险。

此 GitHub Actions 示例工作流演示如何使用 OpenID Connect (OIDC) 身份验证从 Azure Key Vault 安全地检索机密。

先决条件

  • 在 Microsoft Entra 应用程序或用户分配的托管标识上配置联合标识凭据。 了解如何 通过 OpenID Connect 从 GitHub Actions 向 Azure 进行身份验证。 设置联合凭据时,将这些机密存储在 GitHub 中:
    • AZURE_CLIENT_ID:Azure 服务主体的客户端 ID。
    • AZURE_TENANT_ID:Azure AD 租户 ID。
    • AZURE_SUBSCRIPTION_ID:Azure 订阅 ID。
    • KEYVAULT_NAME:密钥保管库名称。
  • 授予权限:确保服务主体具有对 Key Vault 的适当访问权限(例如,“Key Vault 机密用户”角色)。
  • <SECRET_NAME> 替换为你的 Key Vault 机密名称。

GitHub Actions 工作流示例

工作流的作用:

  • 在推送到主分支时触发
  • 使用 OIDC 身份验证连接到 Azure(GitHub 中未存储任何密码)
  • 从 Azure 密钥保管库检索机密
  • 掩码机密值 ::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 }}

其他资源