GitHub Secrets: храним чувствительные данные
Где хранить пароли и токены, чтобы они не попали в репозиторий.
Secret — зашифрованное значение, которое хранится в настройках GitHub и подставляется в workflow без раскрытия в коде и логах.
Чего нельзя делать никогда
Пароли, API-ключи, токены деплоя нельзя писать прямо в YAML или в коде. Репозиторий — это история: даже удалённый из последнего коммита секрет остаётся в git-истории навсегда. Утёкший ключ нужно считать скомпрометированным и отзывать.
Где создаются секреты
В репозитории: Settings → Secrets and variables → Actions → New repository secret. Задаёте имя (например, API_TOKEN) и значение. После сохранения значение нельзя посмотреть — только перезаписать или удалить.
Как использовать в workflow
Секреты доступны через контекст secrets:
steps:
- name: Запрос к API
run: curl -H "Authorization: Bearer $TOKEN" https://api.example.com
env:
TOKEN: ${{ secrets.API_TOKEN }}
Здесь секрет кладётся в переменную окружения TOKEN только для этого шага. Передавать секрет через env безопаснее, чем вставлять прямо в строку команды — он не «засветится» в списке процессов.
Автоматическое маскирование
GitHub автоматически маскирует значения секретов в логах: если секрет случайно попадёт в вывод, вместо него будет ***. Но это не повод расслабляться — об умышленных утечках поговорим отдельно.
Уровни секретов
| Уровень | Где доступен |
| Repository secret | во всех workflow этого репозитория |
| Environment secret | только в job, привязанных к конкретному environment (напр., production) |
| Organization secret | сразу во многих репозиториях организации |
Environment-секреты особенно полезны для деплоя: ключ от прода доступен только когда job катит на production, и может требовать апрува (об этом в разделе CD).
Итог
- Секреты создают в Settings → Secrets and variables → Actions; значение потом не подсмотреть.
- Обращение — через
${{ secrets.ИМЯ }}, обычно кладут вenvшага. - GitHub маскирует секреты в логах; есть уровни repository/environment/organization.