Amazon cloudformation 从CloudFormation AccessKey创建中安全地获取访问密钥/机密
我已经创建了一个CloudFormation模板,它成功地创建了一个IAM用户和一个AccessKey,并将该AccessKey分配给IAM用户。现在,我通过在CloudFormation模板的Amazon cloudformation 从CloudFormation AccessKey创建中安全地获取访问密钥/机密,amazon-cloudformation,boto3,aws-secrets-manager,Amazon Cloudformation,Boto3,Aws Secrets Manager,我已经创建了一个CloudFormation模板,它成功地创建了一个IAM用户和一个AccessKey,并将该AccessKey分配给IAM用户。现在,我通过在CloudFormation模板的Outputs部分输出AccessKey的秘密来获取它 我想知道是否有一种更安全的方法来创建AccessKey并获取其相应的机密,而不必在输出部分以纯文本形式将其吐出 我对此感到有点困惑,因为AWS并没有太多关于这方面的信息,它的小文档直接相互矛盾。AWS建议执行我上面描述的“检索密钥的一种方法是将其放入
Outputs
部分输出AccessKey的秘密来获取它
我想知道是否有一种更安全的方法来创建AccessKey并获取其相应的机密,而不必在输出
部分以纯文本形式将其吐出
我对此感到有点困惑,因为AWS并没有太多关于这方面的信息,它的小文档直接相互矛盾。AWS建议执行我上面描述的“检索密钥的一种方法是将其放入输出值”。这似乎是一个安全问题,另一份AWS文件也证实了这一点,其中写道“我们强烈建议您不要使用此部分输出敏感信息,如密码或机密”
我是否误解了他们的文档,或者这是一个直接矛盾?我看到一条S/O评论建议使用AWS secrets manager,但我很难弄清楚如何将AccessKey机密放入secrets manager,在那里它可以通过类似boto3的东西更安全地存储和获取。这方面的任何例子都会非常有用。下面是我的CloudFormation模板供参考
{
"Description": "My CloudFormation Template",
"Outputs": {
"UserAccessKeyId": {
"Description": "The value for the User's access key id.",
"Value": {
"Ref": "UserAccessKey"
}
},
"UserSecretKey": {
"Description": "The value for the User's secret key.",
"Value": {
"Fn::GetAtt": [
"UserAccessKey",
"SecretAccessKey"
]
}
}
},
"Resources": {
"User": {
"Properties": {
"UserName": "myNewUser"
},
"Type": "AWS::IAM::User"
},
"PrimaryUserAccessKey": {
"DependsOn": "User",
"Properties": {
"Status": "Active",
"UserName": "myNewUser"
},
"Type": "AWS::IAM::AccessKey"
}
}
}
我建议把它放在一个盒子里。您可以让CloudFormation将值写入堆栈中的Secrets Manager,然后通过代码访问它。这让你有一个秘密,没有人必须看到或触摸才能使用它 我认为类似的方法应该有效(注意:我实际上还没有尝试过)
访问密钥:
类型:AWS::IAM::AccessKey
特性:
序列号:1
状态:活动
用户名:“乔”
访问密钥保密:
类型:AWS::SecretsManager::Secret
特性:
姓名:JoeAccessKey
描述:Joes访问密钥
秘密字符串:!子“{”AccessKeyId:“${AccessKey}”,“SecretAccessKey:“${AccessKey.SecretAccessKey}”}”
我建议把它放在一个文件夹中。您可以让CloudFormation将值写入堆栈中的Secrets Manager,然后通过代码访问它。这让你有一个秘密,没有人必须看到或触摸才能使用它
我认为类似的方法应该有效(注意:我实际上还没有尝试过)
访问密钥:
类型:AWS::IAM::AccessKey
特性:
序列号:1
状态:活动
用户名:“乔”
访问密钥保密:
类型:AWS::SecretsManager::Secret
特性:
姓名:JoeAccessKey
描述:Joes访问密钥
秘密字符串:!子“{”AccessKeyId:“${AccessKey}”,“SecretAccessKey:“${AccessKey.SecretAccessKey}”}”
在我进行研究时,这绝对是一个选择。不过,我很难弄明白如何让CF将那个秘密写给秘密经理。你能给我举个例子吗?我添加了一个我认为应该有效的例子。在我进行研究时,这绝对是一个可行的选择。不过,我很难弄明白如何让CF将那个秘密写给秘密经理。你能给我举个例子吗?我加了一个我认为应该有用的例子。