Защитные конфиденциальные данные являются важным аспектом непрерывной интеграции и процесса непрерывной доставки (CI/CD). Оставлять токены безопасности, пароли и другие виды секретной информации, подверженной воздействию вредоносных вечеринок, всегда является риском безопасности.
К счастью, TRAVIS CI имеет инструмент командной строки (CLI), который делает шифрованные конфиденциальные данные для использования в процессе CI/CD достаточно простым.
Шифрование под TRAVIS CI может быть применена ко всему виду информации, из пары пароля имени пользователя для текстовых файлов. Давайте посмотрим, как применить шифрование TRAVIS CI в переменной среды.
Я создал небольшой проект Node.js, который вы можете найти на Github здесь Отказ Проект, Simpletravis, связан с процессом сборки CI/CD Travis CI. TRAVIS CI будет выполнять инструкции в проекте .travis.yml
Файл всякий раз, когда обновление кода привержено GitHub. Цель SimpleTravis — продемонстрировать результат использования функции шифрования TRAVIS CI.
Первое, что вы можете сделать, это запустить:
travis whatsup
Убедитесь, что вы вошли в Trvis, вы можете сделать это по:
travis login
Вы можете убедиться, что вы вошли в систему, получив ваш токен
от github:
--github-token or --auto
Если вы не хотите ввести свой пароль, это лучшая альтернатива. Чтобы получить представление о том, что вам нужно сначала лежать.
Убедитесь, что у вас ничего нет в потушить
:
git stash pop
Это бросает (верхний файл, это по умолчанию) Stash после применения Git Stash Pop
Отказ
Работа с примером проекта
Проект SimPletravis — это простой HTTP-сервер, который поддерживает вызов метода получения на корневой конечной точке. Листинг 1 ниже показывает функцию подушка ()
. Функция — это выдержка из index.js Файл, который создает и запускает HTTP-сервер. Ответ обработки запросов и ответ HTTP происходит в HandleRequest ()
:
/** A function which handles requests and send response. */ function handleRequest(request, response) { const message = process.env.TRAVIS_MESSAGE || `Hello at ${new Date()}` response.setHeader("Content-Type", "application/json"); response.writeHead(200); response.end(JSON.stringify({message})); }
Листинг 1: Код, который обрабатывает запрос к ответ и ответу от HTTP Simpletravis HTTP
HTTP-сервер имеет только после того, как часть функциональной логики, которая отображается в строке 3 в листинге 1 выше. Код проверил, если вариабельная среда Travis_Message
, существует, и это имеет значение. Если Travis_Message
имеет значение, это значение будет присвоено локальной переменной, сообщение.
В противном случае текущая дата добавляется к строке, Здравствуйте в
Отказ Тогда объединенная строка назначена переменной сообщение.
Симплетравис имеет Установка теста что проверяет, что HTTP-сервер работает на ожиданиях. Устройство теста показано ниже в листинге 2.
describe('API Tests: ', () => { after(function () { shutdown(); }); it('Can access GET at /', function(done){ //Call the API supertest(server) .get('/') .set('Accept', 'application/json') .then((res) => { expect(res.body).to.be.an('object'); console.log(res.body); done(); }) .catch(done); }); });
Листинг 2: Тест на единицу, который позволяет звонить на Simpletravis HTTP-сервер
Устройство теста является частью процесса сборки TRAVIS CI для SIMPLETRAVIS. Листинг 3 ниже показывает содержание Travis.yml
Файл для проекта SIMPLETRAVIS. Обратите внимание, что тест на единицу запускается в строке 12.
language: node_js node_js: - 14 os: ubuntu branches: only: - master before_install: - pwd script: - npm install - npm test
Листинг 3: Файл TRAVIS.YML без переменной среды
Листинг 4 ниже показывает вывод теста устройства. Обратите внимание, что потому что нет Travis_Message
Переменная среды в пьесе, вывод вызова на сервер — это строка по умолчанию, которая имеет текущую дату, как показано на рисунке 4.
Node HTTP listening on 3000 API Tests: { message: 'Hello at Sun Sep 27 2020 05:04:59 GMT+0000 (Coordinated Universal Time)' } ✓ Can access GET at / API Server shutting down at Sun Sep 27 2020 05:04:59 GMT+0000 (Coordinated Universal Time)
Листинг 4.: Результат тестового прогона единицы без переменной среды Travis_Message.
Travis_Message
Является ли переменная среды, которую я собираюсь добавить в процесс сборки. Во-первых, я покажу исполнение сборки, которое имеет Travis_Message
незашифрованный. Тогда я буду использовать инструмент TRAVIS CI CLI для шифрования Travis_Message
и используйте его в прогонском скрипте.
Установка инструмента TRAVIS CI CLI
Чтобы выполнить шифрование под TRAVIS CI, вам необходимо иметь как язык программирования Ruby, и инструмент CLI TRAVIS CI CLI на вашем компьютере. Вы можете прочитать инструкции по установке для инструмента TRAVIS CI на GitHub здесь Отказ
Первый раз, когда вы используете инструмент, Travis CI CLI попросит ваши учетные данные доступа. Однако, если ваша машина уже установлена ваши учетные данные GitHub, что типично, если вы получаете доступ к удаленным репозиториям, используя Гит
Из командной строки этот шаг будет пропущен.
После установки инструмента TRAVIS CI CLI установлен и работает, вы сможете зашифровать одну или несколько переменных среды. Но, прежде чем мы сделаем шифрование, давайте просто добавим переменную среды в простом тексте в сборку. Затем мы шифруем его.
Использование стандартной переменной среды
Листинг 5 ниже показывает Travis.yml
Файл, который объявляет переменную среды Travis_Message
Отказ Переменная окружающей среды присваивается значение «Все хорошие вещи, которые требуют времени».
language: node_js node_js: - 14 os: ubuntu branches: only: - master before_install: - pwd script: - npm install - npm test env: - TRAVIS_MESSAGE="All Good Things Take Time"
Листинг 5: файл TRAVIS.YML с переменной незашифрованной среды Travis_Message.
Листинг 6, который следует ниже, показывает HTTP-вывод из модульных тестов проекта. Обратите внимание, что строка все хорошие вещи занимают время, является частью ответа, как показано на линии 3 ниже. Этот выход ожидается. Помните, что код, показанный выше в листинге 1, сообщает значение переменной среды Travis_Message
, должно ли это существовать. Переменная среды действительно существует, и она имеет значение. Таким образом, это значение возвращается в HTTP-ответ здесь.
Node HTTP listening on 3000 API Tests: { message: 'All Good Things Take Time' } ✓ Can access GET at / API Server shutting down at Sun Sep 27 2020 05:13:11 GMT+0000 (Coordinated Universal Time) The command "npm test" exited with 0.
Листинг 6: Результат тестового теста подразделения с переменной незашифрованной среды Travis_Message.
Теперь, когда у нас есть вариабельная среда, подключенная к сборке TRAVIS CI, давайте шифрование Travis_Message
Отказ
Используя переменную зашифрованной среды
Мы шифровали переменную среды Travis_Message
Наряду с назначенным ему значением, используя инструмент TRAVIS CI CLI. Ниже приведена команда, используемая для выполнения шифрования:
travis encrypt TRAVIS_MESSAGE="All Good Things Take Time"
Где Трэвис это команда шифровать это подкомана Travis_message = «Все хорошие вещи занимают время» Переменная среды наряду с назначенным значением для шифрования
Результат выполнения команды шифрования показан ниже в листинге 7.
secure: "RWjsrxlhbU6P8t6F/YuXhc4wZstESJwFR3UGME7Lf5rlNzvYROQRsEpQ4JbIM0iyFtgAZzCe0zt0gtnOfhUzwYXaVNyUFrtrmXk6/+oJVLrLOdiAUd9W8iVczzWXpI0PrT7ZNltSef4j+BQEVsHYPKOLK9Q1jMsEc2fWNwyfYUL/kEqBxLGnMql5DJwdTMHXTMJpFjul07Rv8HLAkpBl4+N6O1ctSFoJJwXl6jVFIKuzvM9gK9LkMHwp22vNvAL+QUqI679NepB4+L8O/5zL5vM0FcYlIbe+SAjKu/53CQxJ4UTlO822R99+E/2aqN33u9AE8MdDfrDoMC2sGYGO0cwfkjzyTIIPHylysOQrHU7AjuG54JGoHfQcjLtjSATriL98WQevmYSH7GVrOWE3Q/LQsKywppRacmeMcW2nfcqMAT42S7ENaGv3JFm29ACkhC8tIoHXtCBWeFAkEXhZ2bR3C9cHteCn6ZWFiIcv20oPU0H2kwEXSTzcsAWHdcmpJWyTqDiPL/06aF4KZSHVZbS71qvmMZB3pgsHr4tlHCs+g2zcndDdHv7MBsW1FECYH43uWnfsvcyuccSX374bZIGBYHhcCfGIG4L7NH9fClhGzwqm2NfeBihWb4t45NHQqzGpAfGTCz5qwU1uUnMOXgUlZkF4t0iZXEabH7cK2hE="
Pro Tip: Вы можете добавить его автоматически, запустив с —add.
Листинг 7: Результат использования инструмента CLI TRAVIS CI для шифрования переменной среды
Однажды я сделал шифрование, я применил его к .travis.yml
файл. Обратите внимание, что я использую атрибут Безопасный
Отказ Используя этот атрибут, рассказывает TRUVIS CI, что значение зашифровано и использовать его закрытый ключ для расшифровки значения. Если бы я должен был взять предложение Travis CI и использовать - Дад
Опция при выполнении команды шифрования инструменты CLI CLI TRAVIS CI CLI добавит шифрование как Глобальная вариабельная среда , вот так:
env: global: secure:
Но на данный момент я собираюсь держать вещи простыми и пропустить, что делает переменной окружающей среды Global. Листинг 8 ниже показывает .travis.yml
Добавлена файл с переменной зашифрованной среды.
language: node_js node_js: - 14 os: ubuntu branches: only: - master before_install: - pwd script: - npm install - npm test env: secure: "RWjsrxlhbU6P8t6F/YuXhc4wZstESJwFR3UGME7Lf5rlNzvYROQRsEpQ4JbIM0iyFtgAZzCe0zt0gtnOfhUzwYXaVNyUFrtrmXk6/+oJVLrLOdiAUd9W8iVczzWXpI0PrT7ZNltSef4j+BQEVsHYPKOLK9Q1jMsEc2fWNwyfYUL/kEqBxLGnMql5DJwdTMHXTMJpFjul07Rv8HLAkpBl4+N6O1ctSFoJJwXl6jVFIKuzvM9gK9LkMHwp22vNvAL+QUqI679NepB4+L8O/5zL5vM0FcYlIbe+SAjKu/53CQxJ4UTlO822R99+E/2aqN33u9AE8MdDfrDoMC2sGYGO0cwfkjzyTIIPHylysOQrHU7AjuG54JGoHfQcjLtjSATriL98WQevmYSH7GVrOWE3Q/LQsKywppRacmeMcW2nfcqMAT42S7ENaGv3JFm29ACkhC8tIoHXtCBWeFAkEXhZ2bR3C9cHteCn6ZWFiIcv20oPU0H2kwEXSTzcsAWHdcmpJWyTqDiPL/06aF4KZSHVZbS71qvmMZB3pgsHr4tlHCs+g2zcoccurW1FECYH43uWnfsvcyuccSX374bZIGBYHhcCfGIG4L7NH9fClhGzwqm2NfeBihWb4t45NHQqzGpAfGTCz5qwU1uUnMOXgUlZkF4t0iZXEabH7cK2hE="
Листинг 8: файл TRAVIS.YML с переменной зашифрованной среды Travis_Message.
Понимание шифрования TRAVIS CI
TRAVIS CI использует систему безопасности для открытых ключей/частной ключей, также известной как Асимметричная криптография , кодировать и декодировать конфиденциальные данные. Когда я зашифровал переменную среды, под крышками инструмент CLI TRAVIS CI CLI использовал открытый ключ для выполнения шифрования. Однако дешифрование может происходить только в среде выполнения TRAVIS CI, потому что только Travis CI имеет доступ к закрытому ключу.
Использование асимметричной криптографии представляет собой тестированную временную технику для обеспечения данных. Вы можете прочитать по деталям на веб-сайте TRAVIS CI здесь Отказ Листинг 9 ниже показан выход веб-сервера при шифровании переменной среды. Обратите внимание, что в строке 3 значение переменной среды Travis_Message
сообщается как [Безопасный]
Отказ
Node HTTP listening on 3000 API Tests: { message: '[secure]' } ✓ Can access GET at / API Server shutting down at Sun Sep 27 2020 05:00:25 GMT+0000 (Coordinated Universal Time) The command "npm test" exited with 0.
Листинг 9: Выход веб-сервера с переменной зашифрованной среды Travis_Message.
Вам может быть интересно, почему ценность переменной окружающей среды Travis_Message
не отображается, и все, что отображается «[безопасно]».
Пара разбиения в переменной среде имеет смысл. Помните, что из-за асимметричной криптографии требуется частный ключ TRAVIS CI, чтобы расшифровать данные, которые были зашифрованы с использованием инструмента TRAVIS CI CLI. Частный ключ доступен, когда Travis CI выполняет сборку на Travis.yml
Отказ Трэвис CI будет чувствовать, что данные зашифрованы и автоматически расшифруют его на уровне сборки. Тем не менее, код внутри Node.js Simpletravis HTTP-сервера не имеет прямого доступа к закрытому ключу. Все приложение может сделать, это сообщать о том, что данные безопасны.
Существуют способы использования зашифрованных данных в исходном коде, но на данный момент важно понять, что TRAVIS CI предоставляет возможность зашифровать данные безопасным способом таким образом, чтобы требовать минимальные усилия.
Положить все вместе
Возможность шифрования конфиденциальных данных — это фундаментальное требование для любой современной платформы CI/CD. Там есть легион злонамеренных хакеров, которые проводят свои дни, написав сценарии, которые смотрят каждый коммит, сделанный на всех публичных репортах поставщиков основных кодов исходного кода облачного исходного кода. Публикация пароля как четкий текст по ошибке пройдет через темную паутину в кратчайшие сроки. К счастью, использование метода переменной среды, описанная в этой статье, описанная в данной статье, будет иметь большое значение для сорезания усилий тех, кто с нематериальными намерениями.
Шифрование конфиденциальных данных в Circleci легко и необходимо. Использование возможностей шифрования данных, которые Travis CI обеспечит ваш код безопасным и безопасным.
Оригинал: «https://dev.to/travisci/encrypting-sensitive-data-using-the-travis-cli-tool-2eff»