Amazon cloudformation 从CloudFormation AccessKey创建中安全地获取访问密钥/机密

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建议执行我上面描述的“检索密钥的一种方法是将其放入

我已经创建了一个CloudFormation模板,它成功地创建了一个IAM用户和一个AccessKey,并将该AccessKey分配给IAM用户。现在,我通过在CloudFormation模板的
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将那个秘密写给秘密经理。你能给我举个例子吗?我加了一个我认为应该有用的例子。