Docker OIDC для GitHub Actions: короткоживущие токены вместо паролей
Компания Docker представила поддержку OpenID Connect (OIDC) для GitHub Actions, что стало важным шагом в повышении безопасности CI/CD-процессов. Теперь организации, использующие Docker Team, Docker Business или Docker Hardened Images, могут настроить доверительные отношения между GitHub Actions и Do

Компания Docker представила поддержку OpenID Connect (OIDC) для GitHub Actions, что стало важным шагом в повышении безопасности CI/CD-процессов. Теперь организации, использующие Docker Team, Docker Business или Docker Hardened Images, могут настроить доверительные отношения между GitHub Actions и Docker Hub без необходимости хранить долгосрочные токены доступа. Это значит, что разработчики могут избавиться от хранения персональных токенов доступа (PAT) или токенов организации (OAT) в репозиториях и системах CI, заменив их на короткоживущие токены, которые выдаются автоматически на время выполнения каждой задачи.
Суть технологии в том, что GitHub Actions получает OIDC-токен от GitHub, который затем предъявляет Docker Hub для получения временного токена доступа. Этот токен действителен только для конкретного запуска рабочего процесса и не требует ручной ротации. Такой подход значительно сокращает поверхность атаки: даже если токен будет перехвачен, злоумышленник не сможет использовать его после завершения задачи. Кроме того, исчезает необходимость регулярно обновлять секреты, что снижает административную нагрузку на команды.
Как работает OIDC-подключение в Docker Hub
Для активации OIDC-подключения администратор организации в Docker Hub должен создать новое подключение в разделе настроек безопасности. При этом указывается имя подключения и выбирается провайдер — в данном случае GitHub Actions. После этого в настройках GitHub Actions необходимо настроить соответствующие разрешения для OIDC-токена: установить permissions: id-token: write в файле workflow. Затем в коде используется официальное действие docker/login-action, которое автоматически обменивает OIDC-токен на короткоживущий токен Docker Hub.
Важно отметить, что Docker поддерживает несколько провайдеров OIDC, включая GitLab и другие, но на данный момент интеграция с GitHub Actions является одной из самых востребованных. Возможность настраивать несколько подключений позволяет организациям гибко управлять доступом для разных команд и окружений. Например, можно создать отдельные подключения для разработки, тестирования и продакшена, каждое со своими правилами.
Какие требования для использования OIDC в GitHub Actions?
Для использования OIDC-подключения необходимо, чтобы организация Docker Hub имела один из платных тарифов: Team, Business или Hardened Images. Бесплатные аккаунты пока не поддерживают эту функцию. Также требуется, чтобы GitHub Actions был включён в репозитории, и чтобы у администратора были права на изменение настроек организации в Docker Hub. Настройка OIDC-подключения производится на уровне организации, что позволяет централизованно управлять доступом для всех команд и проектов.
Предыстория и контекст
Проблема хранения секретов в CI/CD-системах существует давно. Традиционно разработчики хранили токены доступа в переменных окружения или в зашифрованных секретах GitHub Actions. Однако такие токены обычно имеют длительный срок действия и широкие полномочия, что делает их привлекательной целью для атак. Утечка такого токена может привести к несанкционированному доступу к реестрам контейнеров, компрометации образов и даже к атакам на цепочку поставок.
OIDC — это открытый стандарт, который уже активно используется в таких сервисах, как AWS, Azure и Google Cloud для обеспечения безопасного доступа из CI/CD-пайплайнов. Идея состоит в том, чтобы не передавать статические секреты, а использовать кратковременные токены, которые автоматически истекают. Docker присоединяется к этой тенденции, предоставляя аналогичный механизм для своего реестра. Это особенно актуально в свете роста популярности GitHub Actions как основного инструмента автоматизации.
Чем это отличается от предыдущих подходов?
Раньше для аутентификации в Docker Hub из GitHub Actions использовались либо PAT, либо OAT, которые хранились в секретах GitHub. Эти токены имели срок действия до одного года и могли быть скомпрометированы при утечке секретов. С новым OIDC-подключением токены выдаются на несколько минут и привязаны к конкретному запуску workflow. Кроме того, отпадает необходимость в ручной ротации токенов, что снижает риск того, что просроченный токен останется в системе.
Ещё одно преимущество — возможность точной настройки прав доступа. В OIDC-подключении можно указать, какие организации GitHub и какие ветки могут запрашивать токены. Это позволяет реализовать принцип наименьших привилегий: например, только pull request из ветки main могут публиковать образы в продакшен-реестр, а остальные — только во внутренний.
Технические детали и ограничения
С технической стороны процесс выглядит так: GitHub Actions запрашивает OIDC-токен у GitHub, который содержит утверждения о репозитории, ветке и событии. Docker Hub проверяет этот токен, используя открытые ключи GitHub, и выдаёт временный токен доступа, который действителен в течение короткого времени (по умолчанию несколько минут). Временный токен передаётся в docker/login-action, который сохраняет его в конфигурации Docker CLI. После завершения задачи токен автоматически становится недействительным.
Важно отметить, что OIDC-подключения настраиваются на уровне организации, а не пользователя. Это означает, что администратор организации централизованно управляет правилами доступа. При этом можно создавать несколько подключений для разных провайдеров или для разных целей, например, одно для GitHub Actions, другое для GitLab CI.
Однако есть и ограничения. На данный момент OIDC-подключения доступны только для платных тарифов Docker Hub, что может стать препятствием для небольших команд. Кроме того, настройка требует определённых технических знаний, хотя документация Docker постепенно улучшается. Наконец, если ваша организация использует альтернативные реестры контейнеров, такие как Harbor или Amazon ECR, вам придётся дождаться аналогичных функций от этих провайдеров.
Кого затронет и как
Нововведение в первую очередь затронет DevOps-инженеров и разработчиков, использующих GitHub Actions для сборки и публикации Docker-образов. Им больше не придётся заботиться о ротации токенов и хранении секретов в репозиториях. Это упростит процесс настройки CI/CD и повысит безопасность, особенно в крупных организациях, где много команд и проектов.
Для российских компаний, которые активно используют Docker Hub и GitHub Actions, эта новость также актуальна. Однако стоит учитывать, что Docker Hub может быть недоступен из-за санкций или других ограничений, поэтому некоторые организации могут использовать альтернативные реестры. Тем не менее, те, кто продолжает работать с Docker Hub, смогут воспользоваться новым функционалом.
Что будет дальше
Docker планирует расширять поддержку OIDC, добавляя новых провайдеров и улучшая интеграцию. Возможно, в будущем появится поддержка OIDC для бесплатных аккаунтов, но пока это остаётся премиальной функцией. Также стоит ожидать улучшения документации и примеров использования, чтобы разработчики могли быстрее внедрить новый механизм.
Эксперты прогнозируют, что тенденция к использованию короткоживущих токенов будет только усиливаться, поскольку это соответствует современным требованиям безопасности. Docker, внедряя OIDC, делает шаг в правильном направлении, и другие реестры контейнеров, вероятно, последуют его примеру.
Итог
Поддержка OIDC для GitHub Actions в Docker Hub — это значительное улучшение безопасности и удобства для команд, использующих CI/CD. Отказ от статических токенов в пользу короткоживущих снижает риски утечек и упрощает управление доступом. Организациям с платными тарифами стоит обратить внимание на эту функцию и внедрить её в свои процессы, чтобы повысить уровень защищённости своих конвейеров разработки.