将 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 }}