У меня есть AS2 ASG на AWS, и я заинтересован в хранении оболочки script, которая использовалась для создания экземпляра любого экземпляра в ведре S3, и он загружался и запускался при создании экземпляра, но все это чувствует себя немного шатким даже хотя я использую IAM Instance Role, передавая через HTTPS и шифруя сам script, находясь в состоянии покоя в ведре <3 > с помощью KMS, используя S3 Server Side Encryption (потому что метод KMS выбрал ошибку "Неизвестно" ).
Настройка
- Создан
IAM Instance Role, который присваивается любому экземпляру в моей ASG после создания экземпляра, в результате мои AWS-кредиты запекаются в экземпляр какENVvars - Загружено и зашифровано my
Instance-Init.shscript до 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 вызывает беспокойство, если не сказать больше.
Вопросы
- Является ли это обычной практикой или я вижу здесь плохую идею?
- Является ли факт, что файл загружен и хранится (хотя и ненадолго) в новом экземпляре, является уязвимостью вообще?
- Есть ли лучший способ для удаления файла более безопасным способом?
- Неважно, удаляется ли файл после его запуска? Учитывая, что секреты передаются в
ENVvars, кажется почти излишним удалить файлInstance-Init.sh. - Есть ли что-то, что мне не хватает в мои зарождающиеся дни?
Спасибо за любую помощь заранее.