Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.
Обзор
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.
Добавление поставщика удостоверений для облачной рабочей нагрузки Google
Чтобы настроить поставщик удостоверений OIDC в GCP, необходимо выполнить описанную ниже настройку. Инструкции по внесению этих изменений см. в документации GCP.
- Создайте пул удостоверений.
- Настройте сопоставление и добавьте условия.
- Подключение новый пул к учетной записи службы.
Дополнительное руководство по настройке поставщика удостоверений:
- Для усиления безопасности убедитесь, что вы ознакомились с параметром Сведения об усилении защиты с помощью OpenID Connect. Пример см. в разделе Сведения об усилении защиты с помощью OpenID Connect.
- Чтобы учетная запись службы была доступна для настройки, ей необходимо назначить роль
roles/iam.workloadIdentityUser
. Дополнительные сведения см. в документации по GCP. - URL-адрес издателя:
https://HOSTNAME/_services/token
Обновление рабочего процесса GitHub Actions
Чтобы обновить рабочие процессы для OIDC, необходимо внести два изменения в YAML:
- Добавьте параметры разрешений для маркера.
- Используйте действие
google-github-actions/auth
для обмена маркера OIDC (JWT) на маркер доступа к облаку.
Добавление параметров разрешений
Для выполнения задания или рабочего процесса требуется параметр permissions
с id-token: write
. Вы не сможете запросить маркер идентификатора JWT OIDC, если permissions
для параметра id-token
задано read
или none
.
Этот параметр id-token: write
позволяет запрашивать JWT у поставщика OIDC GitHub, применяя один из следующих способов:
- использование переменных среды в средстве выполнения (
ACTIONS_ID_TOKEN_REQUEST_URL
иACTIONS_ID_TOKEN_REQUEST_TOKEN
); - использование
getIDToken()
из набора средств Actions.
Если необходимо получить токен OIDC для рабочего процесса, разрешение можно установить на уровне рабочего процесса. Пример:
permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
Если необходимо получить маркер OIDC только для одного задания, такое разрешение можно установить в этом задании. Пример:
permissions:
id-token: write # This is required for requesting the JWT
В зависимости от требований рабочего процесса, возможно, будет необходимо указать здесь дополнительные разрешения.
Для повторно используемых рабочих процессов параметру для id-token
следует задать значение write
на уровне вызывающего рабочего процесса или в конкретном задании, permissions
которое вызывает повторно используемый рабочий процесс. Дополнительные сведения см. в разделе Повторное использование рабочих процессов.
Запрос маркера доступа
Действие google-github-actions/auth
получает JWT от поставщика OIDC GitHub, а затем запрашивает маркер доступа из GCP. Дополнительные сведения см. в документации по GCP.
В этом примере есть задание Get_OIDC_ID_token
, которое использует действия для запроса списка служб из GCP.
<example-workload-identity-provider>
— замените на путь к поставщику удостоверений в GCP. Напримерprojects/<example-project-id>/locations/global/workloadIdentityPools/<name-of-pool/providers/<name-of-provider>
.<example-service-account>
— замените на имя учетной записи службы в GCP.<project-id>
— замените на идентификатор проекта GCP.
Это действие обменивает токен OIDC GitHub на маркер доступа Google Cloud с помощью федерации удостоверений рабочей нагрузки.
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@v0.3.1'
with:
create_credentials_file: 'true'
workload_identity_provider: '<example-workload-identity-provider>'
service_account: '<example-service-account>'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud services list