Mic*_*amp 4 aws-cloudformation boto3 aws-secrets-manager
我创建了一个 CloudFormation 模板,该模板成功创建了 IAM 用户和 AccessKey,并将该 AccessKey 分配给 IAM 用户。现在,我通过在OutputsCloudFormation 模板部分中输出 AccessKey 的秘密来获取它。
我想知道是否有更安全的方法来创建 AccessKey 并获取其相应的秘密,而无需在该Outputs部分以纯文本形式吐出它。
我对此有点困惑,因为 AWS 没有太多关于执行此操作的信息,而且它所提供的少量文档直接相互矛盾。这里, AWS 建议执行我上面描述的“检索密钥的一种方法是将其放入输出值”。这似乎是一个安全问题,并且已被另一个 AWS 文档证实,此处显示“我们强烈建议您不要使用此部分输出敏感信息,例如密码或机密”。
我是否误解了他们的文档或者这是直接矛盾?我看到一条 S/O 评论Here建议使用 AWS Secrets Manager,但我无法弄清楚如何将 AccessKey 密钥放入 Secrets Manager,在 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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我建议将其放在Secret中。您可以让 CloudFormation 将值写入堆栈中的 Secrets Manager,然后您可以通过代码访问它。这可以让你拥有一个秘密,任何人都不需要看到或触摸才能使用它。
我认为这样的东西应该有效(注意:我实际上还没有尝试过这个)。
AccessKey:
Type: AWS::IAM::AccessKey
Properties:
Serial: 1
Status: Active
UserName: 'joe'
AccessKeySecret:
Type: AWS::SecretsManager::Secret
Properties:
Name: JoeAccessKey
Description: Joes Access Key
SecretString: !Sub '{"AccessKeyId":"${AccessKey}","SecretAccessKey":"${AccessKey.SecretAccessKey}"}'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1755 次 |
| 最近记录: |