Примечание. В 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) на маркер доступа к облаку.
Примечание. Если среды используются в рабочих процессах или политиках OIDC, рекомендуется добавить правила защиты в среду для дополнительной безопасности. Например, можно настроить правила развертывания в среде, чтобы ограничить, какие ветви и теги могут развертываться в среде или получить доступ к секретам среды. Дополнительные сведения см. в разделе Использование сред для развертывания.
Добавление параметров разрешений
Для выполнения задания или рабочего процесса требуется параметр 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
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
permissions:
id-token: write # This is required for requesting the JWT
Запрос маркера доступа
Действие 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
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