【问题标题】:Securely Get Access Key / Secret from CloudFormation AccessKey Creation从 CloudFormation AccessKey Creation 安全地获取访问密钥/秘密
【发布时间】:2021-07-09 21:09:23
【问题描述】:

我创建了一个 CloudFormation 模板,该模板成功地创建了一个 IAM 用户和一个 AccessKey,并将该 AccessKey 分配给 IAM 用户。现在,我通过在 CloudFormation 模板的 Outputs 部分输出 AccessKey 的秘密。

我想知道是否有更安全的方法来创建 AccessKey 并获取其相应的秘密,而无需在 Outputs 部分中以纯文本形式将其吐出。

我对此有点困惑,因为 AWS 没有太多关于这样做的信息,而且它确实有哪些小文档直接相互矛盾。 Here AWS 建议执行我上面描述的“检索密钥的一种方法是将其放入输出值”。这似乎是一个安全问题,并得到另一个 AWS 文档 Here 的确认,其中写道“我们强烈建议您不要使用此部分来输出敏感信息,例如密码或机密信息”。

我误解了他们的文档还是直接矛盾?我看到一个 S/O 评论 Here 建议使用 AWS 机密管理器,但我无法弄清楚如何将 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"
        }
    }
}

【问题讨论】:

    标签: amazon-cloudformation boto3 aws-secrets-manager


    【解决方案1】:

    我建议将其放入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}"}'
    

    【讨论】:

    • 这绝对是我研究时的首选。不过,我很难弄清楚如何让 CF 将该秘密写入 Secrets Manager。有没有机会给我举个例子?
    • 我添加了一个我认为应该可行的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 2014-09-12
    • 2017-03-23
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多