【问题标题】:How do you update a secret's value using CloudFormation without re-generating the password如何在不重新生成密码的情况下使用 CloudFormation 更新密钥的值
【发布时间】:2019-12-09 20:19:49
【问题描述】:

我正在使用 CloudFormation 在 AWS Secrets Manager 密钥中生成一个新密码,但是,当我更改密钥的 JSON 有效负载的另一部分时,密码会重新生成并更改。有没有办法让 CloudFormation 保留最初生成的密码,而不是在其他 JSON 字段更改时更改?

new Secret(this, 'MySecret', {
  secretName: 'MySecret',
  description: 'Secret to access the database.',
  generateSecretString: {
    secretStringTemplate: '{ "user": "foo", server: "bar" }',
    generateStringKey: 'password'
  }
})

【问题讨论】:

    标签: amazon-cloudformation amazon-rds aws-cdk aws-secrets-manager


    【解决方案1】:

    目前,对GenerateSecretString 结构的任何更改都会导致重新生成密码值。这是因为该结构中的各个字段都是关于值内容的规则(例如长度、字符集等),我们没有很好的方法知道之前的值是什么。

    您对 JSON 有效负载进行手动更改的用例是什么?这通常不是您需要定期执行的操作。

    【讨论】:

    • 其实我同意,这不应该改变。但是,我一直在为已经有我想使用的用户名和密码的现有数据库设置一个秘密。我使用 GenerateSecretString 生成随机密码,然后在控制台中,手动将密码更改为现有密码。问题是,如果我在 CDK 中重命名密码或其他内容,密码就会丢失。我想知道我是否要在秘密中显式设置一个空密码(不使用 GenerateSecretString)然后手动更改它,如果秘密的名称等...更改,是否可以保持密码相同?
    • 您在使用 RDS 吗?如果是,我想知道您是否可以使用secret.addTargetAttachment()(使用AWS::SecretsManager::SecretTargetAttachment)的秘密目标附件来解决这个问题。这样,在 CF 部署您的密钥后,它会使用连接信息进行更新,这是您在部署密钥后要更改的内容吗?
    • 秘密名称是唯一标识符。你不能改变它。在 CFN 中这样做会删除密钥并创建一个新密钥。
    • @jogold 你能给我一个关于如何使用 addtargetAttachment() 的代码示例。我想将我的新 RDS db say 'X' 添加到 secrets manager 'Y' 。为这个方法传递的正确参数是什么。
    • @user3742114 in v1.19.0 你在这里有一个例子github.com/aws/aws-cdk/blob/…,这将在下一个版本中改变github.com/aws/aws-cdk/blob/…
    猜你喜欢
    • 2018-07-03
    • 2013-01-03
    • 2010-09-11
    • 2011-07-28
    • 2019-01-28
    • 1970-01-01
    • 2012-11-06
    • 2018-06-14
    • 2011-04-18
    相关资源
    最近更新 更多