我正在尝试在CloudFormation中创建一个在JSON中具有秘密的AWS堆栈。
我不希望在参数中显示秘密的值,也不希望我的实例(fargate或ec2)访问秘密管理器。我希望CloudFormation从机密管理器中检索值并将其在运行时注入模板中。
这就是我所做的:
创建秘密
使用Designer创建模板
读取机密并创建资源。在这种情况下,我将创建一个具有秘密标记的存储桶。我知道这是不安全的,但是使用存储桶只是作为概念证明。
验证存储桶中是否包含带有机密的标签
这是我的模板
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "create a single S3 bucket",
"Resources": {
"SampleBucket": {
"Type": "AWS::S3::Bucket",
"Properties": {
"BucketName": "asantostestbucket",
"Tags" : [
{
"Key" : "keyname",
"Value" : "{{resolve:secretsmanager:dev/learning:SecretString:hello}}"
}
]
}
}
}
}
哪个给我错误One or more tags are not valid
。
如何向CloudFormation指示我希望其读取机密,而不是尝试将标签读取为文本?换句话说,将“ {{resolve:secretsmanager:dev / learning:SecretString:hello}}”替换为该值,而不是将其读取为文本。
答案 0 :(得分:1)
为重现这种情况,我做了以下事情:
hello
surprise
dev/learning
以下是输出:
aws secretsmanager get-secret-value --secret-id dev/learning
{
"ARN": "arn:aws:secretsmanager:ap-southeast-2:123456789012:secret:dev/learning-kCxSK3",
"Name": "dev/learning",
"VersionId": "...",
"SecretString": "{\"hello\":\"surprise\"}",
"VersionStages": [
"AWSCURRENT"
],
"CreatedDate": 1560925072.106
}
结果:我收到了消息One or more tags are not valid
所以,我得到的结果与您相同。
然后我尝试使用密码创建其他类型的资源:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"SecurityGroup": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "{{resolve:secretsmanager:dev/learning:SecretString:hello}}"
}
}
}
}
这成功完成了
aws ec2 describe-security-groups --group-id sg-03cfd71f4539a4b7e
{
"SecurityGroups": [
{
"Description": "surprise",
...
因此,看来{{resolve}}
的行为正确,但是由于某些原因,S3标签不喜欢它。
底线:可能,但不建议。
答案 1 :(得分:0)
顺便说一句,您可以尝试使用cloudkast(它是一种在线cloudformation模板生成器)来代替使用Designer(这有点麻烦)。