Использование секретных ключей api на travis-ci

92

Я бы хотел использовать travis-ci для одного из своих проектов .

Проект представляет собой оболочку API, поэтому многие тесты полагаются на использование секретных ключей API. Для локального тестирования я просто сохраняю их как переменные среды. Как безопасный способ использовать эти ключи на Трэвисе?

user94154
источник

Ответы:

99

У Travis есть функция шифрования переменных среды ( «Шифрование переменных среды» ). Это можно использовать для защиты ваших секретных ключей API. Я успешно использовал это для своего ключа API Heroku.

Все, что вам нужно сделать, это установить драгоценный камень travis, зашифровать нужную строку и добавить зашифрованную строку в свой .travis.yml. Шифрование действительно только для одного репозитория. Команда travisполучает ваш открытый ключ для вашего репо и затем может расшифровать строку во время сборки.

gem install --user travis
travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo

Это дает вам следующий результат:

Please add the following to your .travis.yml file:

  secure: "OrEeqU0z6GJdC6Sx/XI7AMiQ8NM9GwPpZkVDq6cBHcD6OlSppkSwm6JvopTR\newLDTdtbk/dxKurUzwTeRbplIEe9DiyVDCzEiJGfgfq7woh+GRo+q6+UIWLE\n3nowpI9AzXt7iBhoKhV9lJ1MROrnn4DnlKxAEUlHTDi4Wk8Ei/g="
Оди
источник
12
Не забудьте задокументировать, какие переменные вы используете и почему, потому что после их шифрования только кто-то с исходными ключами может их восстановить.
jerseyboy
2
Похоже, что более новые версии гема Travis предпочитают иметь свои аргументы в обратном порядке:, travis encrypt [args..] [options]то есть вы захотите travis encrypt MY_SECRET_ENV=super_secret -r my_username/my_repo. Если сначала указать параметры, а данные для шифрования - последними, появится предупреждение.
Jordan Running
3
С помощью опции --add env.globalк travisкоманде, он будет автоматически изменить свой .travis.yml.
Thomas
1
@RamIdavalapati: поскольку секреты зашифрованы, это считается безопасным, да.
Odi
1
@ Ramesh-X: да, поскольку это шифрование предназначено для TravisCI. Если кто-то имеет контроль над TravisCI, он может получить SECRET_ENV
Odi
7

в соответствии с этим в документации по travis ci сказано, что:

Если у вас установлены клиенты командной строки Heroku и Travis CI, вы можете получить свой ключ, зашифровать его и добавить в свой .travis.yml, выполнив следующую команду из каталога вашего проекта:

travis encrypt $(heroku auth:token) --add deploy.api_key

обратитесь к следующему руководству, чтобы установить клиент heroku в соответствии с вашей ОС

Эспоар Мурхабази
источник
Я просто хочу убедиться: ключ, который он добавляет к вашему файлу, можно безопасно загрузить в систему контроля версий, верно?
vapurrmaid 03
5

Вы также можете определить секретные переменные в настройках репозитория :

Переменные, определенные в настройках репозитория, одинаковы для всех сборок, и когда вы перезапускаете старую сборку, она использует последние значения. Эти переменные не доступны для вилок автоматически.

Определите переменные в настройках репозитория, которые:

  • различаются для каждого репозитория.
  • содержат конфиденциальные данные, такие как сторонние учетные данные.

Чтобы определить переменные в настройках репозитория, убедитесь, что вы вошли в систему, перейдите в нужный репозиторий, выберите «Настройки» в меню шестеренки и нажмите «Добавить новую переменную» в разделе «Переменные среды».

напыщенный
источник
1
Не понимал, как создавать секретные переменные. При поиске в Google результаты объясняют, как зашифровать.
XedinUnknown
@XedinUnknown Это может использоваться для секретных переменных. По ссылке: «По умолчанию значение этих новых переменных среды скрыто из строки экспорта в журналах. Это соответствует поведению зашифрованных переменных в вашем .travis.yml. Переменные хранятся в зашифрованном виде в наших системах, и расшифровываются при создании сценария сборки ".
bmaupin
0

Используйте другой набор ключей API и сделайте то же самое. Ваш ящик travis настраивается для запуска вашей сборки, а затем снова полностью разрушается после завершения сборки. У вас есть root-доступ к вашему ящику во время сборки, поэтому вы можете делать с ним все, что хотите.

Маркус
источник
4
Что вы подразумеваете под «делай так же»? Мне не очень нравится идея хранить ключи API в самом репозитории (т.е. в файле .travis.yml), но, похоже, нет другого способа настроить переменные среды в travis.
BM5k
Переменная env будет зашифрована открытым ключом, поэтому только владелец секретного ключа сможет ее расшифровать. Вы не должны использовать важный токен. В моем случае я использовал тот, который у Трэвиса уже был для GitHub. Это сработало довольно хорошо, и из github я могу отозвать этот токен всякий раз, когда чувствую, что Трэвис представляет опасность. Наличие зашифрованного токена в моем репо не мешает мне спать. github.com/ecki/GCViewer/blob/topic-ciupload/.travis.yml
eckes