Интеграция Azure Key Vault в рабочий процесс GitHub Actions

Интеграция Azure Key Vault в рабочий процесс GitHub Actions для безопасного управления конфиденциальными учетными данными в одном месте. Такой подход снижает риск случайного воздействия или несанкционированного доступа к конфиденциальным данным.

В этом примере рабочего процесса GitHub Actions показано, как безопасно извлекать секреты из Azure Key Vault с помощью проверки подлинности OpenID Connect (OIDC).

Предпосылки

  • Настройте учетные данные федеративного удостоверения в приложении Microsoft Entra или управляемом удостоверении, назначаемом пользователем. Узнайте, как аутентифицироваться в Azure из GitHub Actions с помощью OpenID Connect. При настройке федеративных учетных данных сохраните эти секреты в GitHub:
    • AZURE_CLIENT_ID: идентификатор клиента субъекта-службы Azure.
    • 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 }}

Дополнительные ресурсы