Repository secrets
Тема дорожной карты · GitHub Actions
Секреты репозитория в GitHub Actions представляют собой зашифрованные пары ключ-значение, которые хранятся в рамках конкретного репозитория и доступны его workflow через контекст ${{ secrets.NAME }}. Это удобный способ предоставить runner'у доступ к ключам деплоя, API-токенам или паролям реестра. Значения секретов шифруются с помощью алгоритма libsodium перед хранением, что обеспечивает их безопасность. Кроме того, эти значения скрываются из логов заданий, что снижает риск утечки конфиденциальной информации. По умолчанию секреты репозитория недоступны для workflow, запускаемых по событию pull_request из форков, что обеспечивает дополнительный уровень безопасности.
Секреты репозитория имеют приоритет над одноимёнными секретами организации, что позволяет командам локально переопределять общие значения, если это необходимо для конкретного проекта. Это делает секреты репозитория правильным уровнем детализации для конфигурации конкретного проекта. Для централизованного управления общими секретами рекомендуется использовать секреты организации или краткосрочные OIDC-учётные данные.
Как это работает
Секреты репозитория (${{ secrets.X }}) маскируются в логах и доступны для использования в workflow. Кроме того, существуют environment secrets, которые имеют область действия на уровне окружения и требуют обязательных проверок от назначенных проверяющих. Также есть организация-секреты, которые доступны всем репозиториям в рамках организации с возможностью выбора. Переменные (${{ vars.X }}) не маскируются и используются как обычные конфигурационные параметры.
Автопровиженный GITHUB_TOKEN представляет собой короткоживущий токен с ограниченными правами для выполнения задач workflow. OIDC-токены позволяют использовать облачную аутентификацию без использования долгоживущих ключей, где поддерживается.
Когда применять
Environment secrets и обязательные проверяющие обычно используются для production-деплоев, чтобы обеспечить ручной гейт утверждения. OIDC-токены полезны для облачной аутентификации (AWS, GCP, Яндекс.Облако) вместо использования долгоживущих ключей, где это поддерживается. Никогда не эхо секретов в логи, так как это может привести к утечке информации, даже если секреты маскируются.
Типичные ошибки
Типичные ошибки при работе с секретами репозитория включают хранение секретов в заголовках pull requests или коммитов, где нет автоматической маскировки. Также часто используются персональные доступные токены (PAT), хотя для многих задач достаточно использовать короткоживущий GITHUB_TOKEN. Другая распространённая ошибка — использование окружений без обязательных проверяющих, но называемых "production", что может создать ложное чувство безопасности.