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

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

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


person user94154    schedule 18.02.2012    source источник


Ответы (4)


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

Все, что вам нужно сделать, это установить travis gem, зашифровать нужную строку и добавить зашифрованную строку в свой .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="
person Odi    schedule 08.10.2012
comment
Не забудьте задокументировать, какие переменные вы используете и почему, потому что после того, как они были зашифрованы, только кто-то с исходными ключами может их восстановить. - person jerseyboy; 20.07.2013
comment
С параметром --add env.global в команде travis он автоматически исправит ваш .travis.yml. - person Thomas; 30.09.2015
comment
Что, если бы я использовал config.py для хранения всех своих ключей API и использовал ConfigParser () для их анализа? Означает ли это, что мне нужно изменить свой код, чтобы искать эти уникальные значения? - person lordlabakdas; 23.02.2017
comment
@lordlabakdas Я не знаю, что вы имеете в виду под уникальными значениями, но если бы вы использовали config.py для хранения всех ваших ключей API, тогда этот файл был бы в вашем репозитории, чтобы Трэвис мог получить к нему доступ. И вообще, хранить в репозитории конфиденциальную информацию, такую ​​как пароли или ключи API, - плохая идея. Вот почему существует этот механизм шифрования переменных окружения. - person Odi; 10.03.2017
comment
как я могу использовать эти зашифрованные переменные - person mosaad; 29.06.2017
comment
@mosaad вы можете использовать эти значения как обычные переменные среды (т.е. получить к ним доступ в своем коде), Трэвис расшифровывает их в начале каждой сборки. - person Odi; 01.07.2017
comment
Любой, у кого есть возможность запустить вашу сборку, может получить доступ к этим расшифрованным ключам. Например, вы можете использовать функцию сборки отладки для ssh в машину сборки и просто повторить переменную безопасной среды. - person carlin.scott; 06.04.2018
comment
@ carlin.scott да, но это неверно для запросы на вытягивание из форков. И если у кого-то есть доступ на запись в репозиторий, вы должны доверить ему эту информацию. Но, безусловно, хороший момент! - person Odi; 07.04.2018
comment
@Odi Я думаю, что это безопасно и для общедоступных репозиториев git (раскрытие зашифрованных ключей). Это правда? - person Ram Idavalapati; 20.08.2018
comment
@RamIdavalapati: поскольку секреты зашифрованы, это считается безопасным, да. - person Odi; 09.09.2018
comment
Если TravisCI был взломан, сможет ли этот человек получить SECRET_ENV? - person Ramesh-X; 11.11.2019
comment
@ Ramesh-X: да, поскольку это шифрование предназначено для TravisCI. Если кто-то имеет контроль над TravisCI, он может получить SECRET_ENV - person Odi; 12.11.2019
comment
Гем travis очень сложно установить (по крайней мере, на MacOS). Есть ли ручная альтернатива? - person Michael Goerz; 26.12.2019
comment
@Michael Goerz: Да, просто добавьте переменные env через веб-интерфейс Travis - person Odi; 27.12.2019

согласно this в документации travis ci сказано, что:

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

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

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

person Espoir Murhabazi    schedule 25.09.2017
comment
Я просто хочу убедиться: ключ, который он добавляет к вашему файлу, можно безопасно загрузить в систему контроля версий, верно? - person vapurrmaid; 04.03.2018

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

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

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

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

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

person pomber    schedule 06.04.2017
comment
Не понял, как создавать секретные переменные. При поиске в Google результаты объясняют, как зашифровать. - person XedinUnknown; 12.08.2017
comment
@XedinUnknown Может использоваться для секретных переменных. По ссылке: По умолчанию значение этих новых переменных среды скрыто от строки экспорта в журналах. Это соответствует поведению зашифрованных переменных в вашем .travis.yml. Переменные хранятся в наших системах в зашифрованном виде и расшифровываются при создании сценария сборки. - person bmaupin; 25.01.2018

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

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