2014-12-03 1 views
1

У меня есть экземпляр EC2, который запускает приложение, размещенное на частной репликации git.Bundle Git SSH ключи в личное AMI

Мне нужно запустить многие из них с моего главного сервера. На данный момент у меня есть 5 фиксированных «рабочих» экземпляров, которые я запускаю/останавливаю у мастера без проблем. Каждый рабочий запускается, вытягивает репо и запускает приложение при запуске. Это, очевидно, не очень хорошее решение, и я хочу сделать его более гибким (запуск как можно большего количества экземпляров, и т. Д.). Конфигурация и пакеты являются окончательными, поэтому я чувствую себя хорошо, связав все это с AMI.

Есть ли способ для меня связать мои ключи git в AMI, чтобы запустить много подобных экземпляров и заставить их все тянуть и запускать мое приложение при запуске без необходимости подключения к каждому из них и ввода пароля? Есть ли способ лучше? Я читал о cloud-init, пользовательских данных, марионетках и многом другом, но я довольно новичок в этом вопросе и не смог найти подходящий пример с помощью ssh-ключей.

ответ

2

Вместо пакетирования ключей в AMI, я предлагаю вам держать их отдельно от AMI, потому что:

  1. Если вы измените ваши ключи GIT, вы не должны строить новый AMI
  2. Несанкционированные пользователи, у которых есть привилегии запуска экземпляра из вашего AMI, не могут запустить ваше приложение

Предлагаю использовать функцию пользовательских данных. Вы можете дополнительно зашифровать свои ключи и base64encode, если хотите. Когда вы запускаете свой экземпляр вручную или используете CLI/API, вы можете передать свои ключи, к которым может обратиться экземпляр после его запуска. Существует множество способов доступа к данным (python, curl, чтобы назвать несколько). Я предлагаю вам использовать сервер метаданных AWS, потому что вашему экземпляру не нужны ваши учетные данные AWS для извлечения пользовательских данных. После того, как ваш экземпляр запущен, есть приложение сделать следующий вызов, получить ключи, а затем вытащить репозиторий:

curl http://169.254.169.254/latest/user-data 

возвращает метаданные (учетные данные, необходимые). Вы можете опционально base64decode и расшифровать свои ключи и использовать его для вытягивания репо. Если вам не нужна дополнительная безопасность, вы можете обойти часть шифрования/base64.

+0

Спасибо за ответ! поэтому, чтобы подвести итог, мне нужно: создать скрипт пользовательских данных, который вставляет мой закрытый ключ, открытый ключ и известные хосты (так что я не должен принимать отпечатки пальцев), запускает ssh-agent, а затем клонирует репо? Тогда все, что мне нужно, это скрутить его при запуске? Извините, я немного смущен – xShirase

+0

Да. Создайте собственный сценарий, который скопирует ключ (ы), известные хосты в правильное место и клонирует репо. Проверьте подлинность сценария на локальном компьютере перед копированием содержимого в поле данных пользователя при запуске экземпляра. – helloV

+0

AWS ожидает данные пользователя в кодированном формате base64. Если вы используете панель управления AWS, есть опция, позволяющая AWS закодировать ее на base64. Если вы используете API/CLI, из документов выясняется, ожидает ли API/CLI кодировать данные. Если после запуска вашего экземпляра, если вы не видите желаемого результата: 'cd/var/lib/cloud/instance/scripts'. Вы должны увидеть там свой сценарий. Попробуйте запустить сценарий, отладить, исправить скрипт и использовать его в качестве пользовательских данных при запуске экземпляров. Я делал это много раз, поэтому не стесняйтесь задавать мне вопросы, если вы не видите желаемых результатов. – helloV

Смежные вопросы