Skip to main content

Настройка OpenID Connect в Google Cloud Platform

Использование OpenID Connect в рабочих процессах для проверки подлинности на платформе Google Cloud Platform.

Обзор

OpenID Connect (OIDC) позволяет рабочим процессам GitHub Actions получать доступ к ресурсам в Google Cloud Platform (GCP) без необходимости хранить учетные данные GCP в виде долгосрочных секретов GitHub.

В этом руководстве представлен обзор настройки GCP для доверия OIDC GitHub в качестве федеративного удостоверения, а также есть пример рабочего процесса для действия google-github-actions/auth, использующего токены для аутентификации в GCP и доступа к ресурсам.

Необходимые компоненты

  • Основные понятия о том, как GitHub использует OpenID Connect (OIDC) и его архитектуру и преимущества, см. в разделе OpenID Connect.

  • Прежде чем продолжить, необходимо спланировать стратегию безопасности, чтобы обеспечить выдачу маркеров доступа только предсказуемым способом. Чтобы управлять тем, как поставщик облачных служб выдает маркеры доступа, необходимо определить по крайней мере одно условие, запретив недоверенным репозиториям запрашивать маркеры доступа к облачным ресурсам. Дополнительные сведения см. в разделе OpenID Connect.

  • Если вы используете это руководство по GHE.com, понять, что необходимо заменить определенные значения в следующей документации. См . раздел AUTOTITLE.

Добавление поставщика удостоверений для облачной рабочей нагрузки Google

Чтобы настроить поставщик удостоверений OIDC в GCP, необходимо выполнить описанную ниже настройку. Инструкции по внесению этих изменений см. в документации GCP.

  1. Создайте пул удостоверений.
  2. Настройте сопоставление и добавьте условия.
  3. Подключение новый пул к учетной записи службы.

Дополнительное руководство по настройке поставщика удостоверений:

Обновление рабочего процесса GitHub Actions

Чтобы обновить рабочие процессы для OIDC, необходимо внести два изменения в YAML:

  1. Добавьте параметры разрешений для маркера.
  2. Используйте действие google-github-actions/auth для обмена токена OIDC (JWT) на облачный токен доступа.

Примечание.

Если среды используются в рабочих процессах или политиках OIDC, рекомендуется добавить правила защиты в среду для дополнительной безопасности. Например, можно настроить правила развертывания в среде, чтобы ограничить, какие ветви и теги могут развертываться в среде или получить доступ к секретам среды. Дополнительные сведения см. в разделе Управление средами для развертывания.

Добавление параметров разрешений

Для выполнения задания или рабочего процесса требуется permissions параметр, позволяющий id-token: write поставщику OIDC GitHubсоздать веб-токен JSON для каждого запуска.

Примечание.

Параметр id-token: write в разрешениях рабочего процесса не дает рабочему процессу разрешение на изменение или запись в ресурсы. Вместо этого он позволяет рабочему процессу запрашивать (получить) и использовать (задать) маркер OIDC для действия или шага. Затем этот маркер используется для проверки подлинности с помощью внешних служб с помощью кратковременного маркера доступа.

Подробные сведения о необходимых разрешениях, примерах конфигурации и расширенных сценариях см. в разделе Справочник по OpenID Connect.

Запрос маркера доступа

Действие google-github-actions/auth получает JWT от поставщика OIDC GitHub, а затем запрашивает маркер доступа из GCP. Дополнительные сведения см. в документации по GCP.

В этом примере есть задание Get_OIDC_ID_token, которое использует действия для запроса списка служб из GCP.

  •         `WORKLOAD-IDENTITY-PROVIDER` — замените на путь к поставщику удостоверений в GCP. Например: `projects/example-project-id/locations/global/workloadIdentityPools/name-of-pool/providers/name-of-provider`
    
  •         `SERVICE-ACCOUNT` — замените на имя учетной записи службы в GCP.
    

Это действие обменивает токен OIDC GitHub на маркер доступа Google Cloud с помощью федерации удостоверений рабочей нагрузки.

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
name: List services in GCP
on:
  pull_request:
    branches:
      - main

permissions:
  id-token: write

jobs:
  Get_OIDC_ID_token:
    runs-on: ubuntu-latest
    steps:
    - id: 'auth'
      name: 'Authenticate to GCP'
      uses: 'google-github-actions/auth@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0'
      with:
          create_credentials_file: 'true'
          workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER'
          service_account: 'SERVICE-ACCOUNT'
    - id: 'gcloud'
      name: 'gcloud'
      run: |-
        gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
        gcloud services list

Дополнительные материалы