Environment secrets
Тема дорожной карты · GitHub Actions
Секреты окружений в GitHub Actions — зашифрованные учётные данные, привязанные к именованному окружению деплоя — например staging или production — а не ко всему репозиторию. Это даёт командам точный контроль над тем, какие jobs пайплайна могут получить доступ к каким чувствительным значениям. Окружения создаются в настройках репозитория, к ним прикрепляются правила защиты — обязательные ревьюеры или фильтры веток деплоя, — а затем добавляются секреты, расшифровываемые только когда job указывает environment: production и правила защиты соблюдены. Внутри job, защищённого окружением, секреты доступны через тот же синтаксис ${{ secrets.MY_SECRET }}, что и секреты уровня репозитория, однако runner GitHub Actions применяет шлюз одобрения окружения до запуска job, предотвращая несанкционированные запуски пайплайна с доступом к production-учётным данным. Секреты окружений дополняют секреты репозитория, добавляя слой контекста деплоя, согласующий управление доступом в CI/CD-пайплайне с реальными шлюзами продвижения — признанная лучшая практика автоматизации workflow для регулируемых систем. Совместное использование секретов окружений и OIDC-аутентификации в облаке полностью устраняет необходимость хранить долгоживущие учётные данные, дополнительно укрепляя безопасность пайплайнов непрерывной интеграции и доставки.
Как это работает
Environment secrets: repository secrets (${{ secrets.X }} — маскируются в логах, доступны workflow), environment secrets (per-environment scope с required reviewers), organization secrets (общие между репо с выбором), variables (${{ vars.X }} — не маскируются, plain-конфиг). Автопровиженный GITHUB_TOKEN — short-lived токен с scoped-правами для workflow. OIDC-токены позволяют cloud-auth без long-lived ключей.
Когда применять
Environment secrets + required reviewers — для production-деплоев: ручной approval-гейт. OIDC — для cloud-auth (AWS, GCP, Yandex Cloud) вместо long-lived ключей, где поддерживается. Никогда не эхо секретов в логи (echo $secret выводит ***, но секрет утёк, если что-то нормализует whitespace иначе).
Типичные ошибки
Ловушки Environment secrets: секреты в title PR или commit messages (там нет авто-маскировки); используют personal access token (PAT), где хватит GITHUB_TOKEN (PAT имеет полные права юзера — blast radius при утечке хуже); environment без required reviewers, но называется "production" (ложная безопасность).