Я не уверен, почему это не правильно для вас.Однако вы, вероятно, не хотите, чтобы CFN раскрывал ваш секрет в пользовательских данных, потому что пароль был бы встроен в скрипт пользовательских данных в кодировке base64, который отображается в консоли EC2.
Вместо этого вы должны воспользоваться преимуществамифакт, что у вас есть скрипт, который выполняется на хосте и диспетчере секретов вызовов во время выполнения скрипта (предупреждение не проверено):
"SampleLaunchConfig": {
"Type": "AWS::AutoScaling::LaunchConfiguration",
"Properties": {
"ImageId": {
"Fn::FindInMap": [
"AWSRegionArch2AMI",
{
"Ref": "AWS::Region"
},
"AMI"
]
},
"UserData": {
"Fn::Base64": {
"Fn::Join": [
"",
[
"#!/bin/bash -xe\n",
"yum update -y\n",
"yum install -y jq\n",
!Sub "useradd -p `aws --region ${AWS::Region} secretsmanager get-secret-value --secret-id Credentials --query SecretString --output text | jq -r .passwordKey` `aws --region ${AWS::Region} secretsmanager get-secret-value --secret-id Credentials --query SecretString --output text | jq -r .userName`\n",
"\n"
]
]
}
}
}
}
Это не идеально, так как он расширяет пароль в командной строке.Его можно сделать более безопасным, сначала поместив пароль в файл, а затем прочитав его, а затем уничтожив файл.