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


92

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

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

Ответы:


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.