У меня есть AS2 ASG на AWS, и я заинтересован в хранении оболочки script, которая использовалась для создания экземпляра любого экземпляра в ведре S3, и он загружался и запускался при создании экземпляра, но все это чувствует себя немного шатким даже хотя я использую IAM Instance Role
, передавая через HTTPS и шифруя сам script, находясь в состоянии покоя в ведре <3 > с помощью KMS
, используя S3 Server Side Encryption
(потому что метод KMS
выбрал ошибку "Неизвестно" ).
Настройка
- Создан
IAM Instance Role
, который присваивается любому экземпляру в моей ASG после создания экземпляра, в результате мои AWS-кредиты запекаются в экземпляр какENV
vars - Загружено и зашифровано my
Instance-Init.sh
script до S3, что приводит к частной конечной точке, например: https://s3.amazonaws.com/super-secret-bucket/Instance-Init.sh
В поле User-Data
Я ввожу следующее в поле User Data
при создании Launch Configuration
Я хочу, чтобы моя ASG использовала:
#!/bin/bash
apt-get update
apt-get -y install python-pip
apt-get -y install awscli
cd /home/ubuntu
aws s3 cp s3://super-secret-bucket/Instance-Init.sh . --region us-east-1
chmod +x Instance-Init.sh
. Instance-Init.sh
shred -u -z -n 27 Instance-Init.sh
Вышеописанное делает следующее:
- Списки пакетов обновлений
- Устанавливает Python (требуется для запуска
aws-cli
) - Устанавливает
aws-cli
- Изменения в каталоге
/home/ubuntu
- Использует
aws-cli
для загрузки файлаInstance-Init.sh
изS3
. Из-заIAM Role
, назначенного моему экземпляру, мои AWS-кредиты автоматически обнаруживаютсяaws-cli
.IAM Role
также предоставляет моему экземпляру разрешения, необходимые для дешифрования файла. - Делает его исполняемым
- Запускает script
- Удаляет script после его завершения.
Instance-Init.sh
script
script сам будет делать такие вещи, как установка ENV
vars и docker run
контейнеров, которые мне нужно развернуть на моем экземпляре. Своего рода:
#!/bin/bash
export MONGO_USER='MyMongoUserName'
export MONGO_PASS='Top-Secret-Dont-Tell-Anyone'
docker login -u <username> -p <password> -e <email>
docker run - e MONGO_USER=${MONGO_USER} -e MONGO_PASS=${MONGO_PASS} --name MyContainerName quay.io/myQuayNameSpace/MyAppName:latest
Очень удобно
Это создает очень удобный способ обновления сценариев User-Data
без необходимости создавать новый Launch Config
каждый раз, когда вам нужно внести незначительные изменения. И он отлично справляется с получением ENV
vars из вашей кодовой базы и в узкое контролируемое пространство (сам Instance-Init.sh
script).
Но все это чувствует себя немного неуверенно. Идея поместить мои master DB файлы в файл на S3 вызывает беспокойство, если не сказать больше.
Вопросы
- Является ли это обычной практикой или я вижу здесь плохую идею?
- Является ли факт, что файл загружен и хранится (хотя и ненадолго) в новом экземпляре, является уязвимостью вообще?
- Есть ли лучший способ для удаления файла более безопасным способом?
- Неважно, удаляется ли файл после его запуска? Учитывая, что секреты передаются в
ENV
vars, кажется почти излишним удалить файлInstance-Init.sh
. - Есть ли что-то, что мне не хватает в мои зарождающиеся дни?
Спасибо за любую помощь заранее.