OIDC токены

Тема дорожной карты · GitHub Actions

OpenID Connect (OIDC) в GitHub Actions представляет собой механизм, который выдаёт каждому job workflow краткосрочный JSON Web Token (JWT). Этот токен облачные провайдеры могут обменять на временные учётные данные, что позволяет избежать хранения долгоживущих секретов, таких как ключи AWS или JSON сервисного аккаунта GCP, в репозитории. Использование OIDC токенов значительно повышает безопасность, поскольку они ограничены одним запуском workflow, репозиторием, веткой или окружением, что существенно снижает ущерб при компрометации runner. В настоящее время принятие OIDC токенов является рекомендуемым паттерном для беcсекретной аутентификации в CI/CD-пайплайнах GitHub Actions, деплоящих в AWS, Azure, GCP или HashiCorp Vault.

Как это работает

OIDC токены используются для предоставления временных учётных данных облачным провайдерам. Для этого необходимо задать permissions: id-token: write для каждого job и вызвать action федеративного входа провайдера, который валидирует claims iss, sub и aud токена против доверительной политики, настроенной в облаке. Блок permissions: ограничивает scope автопровиженного GITHUB_TOKEN. Это может быть настроено на уровне workflow или для каждого отдельного job. По умолчанию для многих старых репозиториев используется permissions: write-all, но современная практика подразумевает использование permissions: contents: read на уровне workflow и эскалацию прав на уровне job, если это необходимо. Для облачной аутентификации используется OIDC-токен (id-token: write).

Когда применять

OIDC токены следует применять в тех случаях, когда необходимо обеспечить безопасную аутентификацию без хранения долгоживущих секретов. Всегда следует придерживаться принципа least privilege — начинать с минимальных прав доступа (permissions: contents: read) и постепенно увеличивать права только там, где это необходимо. Для облачной аутентификации (cloud-auth) следует использовать id-token: write только на этапе деплоя. Также рекомендуется аудировать workflows с помощью инструментов, таких как pinact, для выявления отсутствующих пинов и широких прав доступа.

Типичные ошибки

Одним из типичных ошибок при использовании OIDC токенов является оставление дефолтных настроек permissions: write-all, что позволяет каждому шагу пайплайна выполнять операции, такие как push коммитов, комментирование PR и изменение настроек, что является серьезным угрозой безопасности. Другой распространенной ошибкой является предоставление широких прав доступа на уровне workflow вместо персонального ограничения для каждого job, что нарушает принцип least privilege. Наконец, часто возникает путаница между GITHUB_TOKEN и персональными токенами доступа (PAT), которые имеют разные scope и lifetime.

Связанные понятия

Полезные ресурсы