gpt4 book ai didi

amazon-web-services - CloudFormation SecretTargetAttachment 返回 SecretString 不是有效的 JSON

转载 作者:行者123 更新时间:2023-12-03 07:28:52 27 4
gpt4 key购买 nike

我正在尝试创建一个简单的 CloudFormation 堆栈,但它不起作用。这是我的 CloudFormation 模板。

Resources:
MyDBSecrets:
Type: AWS::SecretsManager::Secret
Properties:
Description: 'This is password of mysql database'
GenerateSecretString:
PasswordLength: 16
ExcludePunctuation: true
Name: MyDBSecrets
MyDBInstance:
Type: AWS::RDS::DBInstance
Properties:
DBName: MyDBInstance
AllocatedStorage: '20'
DBInstanceClass: db.t3.micro
Engine: mysql
MasterUsername: 'testdb'
MasterUserPassword: !Join ['', ['{{resolve:secretsmanager:', !Ref MyDBSecrets, ':SecretString}}' ]]
SecretRDSInstanceAttachment:
Type: "AWS::SecretsManager::SecretTargetAttachment"
Properties:
SecretId: !Ref MyDBSecrets
TargetId: !Ref MyDBInstance
TargetType: AWS::RDS::DBInstance

在堆栈创建时,我可以看到我的 secret 资源已创建,我的 RDS 实例也已创建,但在 SecretTargetAttachment 上,我收到 CREATE_FAILED 并显示“SecretString 不是有效的 JSON” 错误。我错过了什么吗?

最佳答案

Secrets Manager 通常以以下两种格式之一存储 secret :

  • 作为 JSON 对象的一部分 { "user": "master", "password": "password123"}
  • 或者作为一个简单的测试 secret ,例如密码123

Secrets Manager 文档推荐 JSON 版本,他们的示例都使用它。在 CloudFormation 中,可以使用 SecretStringTemplate 生成密码字段,并且可以在动态字段插值中的 secret ARN 之后使用 :SecretText:password 提取密码字段。

此外,AWS::SecretsManager::SecretTargetAttachment 似乎需要这种格式,因为它将 RDS 实例存储在 JSON 对象的另一个字段中。这就是您的错误的原因。

如果您将其与 ECS 一起使用,请注意:您不应在任务定义中使用动态插值,因为这将以纯文本形式保存,供任何人从控制台/cli 读取。相反,您应该使用带有 ValueFrom secret 管理器的 Secrets 部分。不幸的是,目前似乎不支持从 JSON blob 中提取字段。相反,您必须在 docker 容器中解析 JSON blob。

关于amazon-web-services - CloudFormation SecretTargetAttachment 返回 SecretString 不是有效的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56626828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com