如何将密钥添加到现有 AWS::SecretsManager::Secret

How to add a key into an existing AWS::SecretsManager::Secret

我有一个创建 RDS 实例的 CloudFormation 模板。首先,我创建了一个 AWS::SecretsManager::Secret 并在其中保存了一些值,我将在 AWS::RDS::DBInstance 中使用这些值作为 MasterUserPassword MasterUsernameDBName 使用一些秘密名称。但我也想将 RDS 实例主机名放入这个秘密中,我将在创建 DBInstance 后获得它。

是否可以更新 CloudFormation 中的现有密钥?

我的模板示例:

Resources:
  RDSInstanceSecret:
    Type: AWS::SecretsManager::Secret
    Properties:
      Name: "mysecret"
      GenerateSecretString:
        SecretStringTemplate: !Sub '{"username":"root", "dbname":"db"}'
        GenerateStringKey: 'password'
        PasswordLength: 16
        ExcludeCharacters: '"@/\'
  RDSInstance:
    DependsOn: RDSInstanceSecret
    Properties:
      DBName: !Join ['', ['{{resolve:secretsmanager:', !Ref RDSInstanceSecret, ':SecretString:dbname}}' ]]
      Engine: "postgres"
      EngineVersion: "9.6"
      MasterUserPassword: !Join ['', ['{{resolve:secretsmanager:', !Ref RDSInstanceSecret, ':SecretString:password}}' ]]
      MasterUsername: !Join ['', ['{{resolve:secretsmanager:', !Ref RDSInstanceSecret, ':SecretString:username}}' ]]

Outputs:
  EndpointRDS:
    Value: !Sub '${RDSInstance.Endpoint.Address}:${RDSInstance.Endpoint.Port}'  # I would like to save it to RDSInstanceSecret

我目前的想法是在创建实例后创建另一个 Secret,并将第一个 Secret + RDS 端点的所有 Secret 放在那里。但是这样会留下一个无用的Secret资源。

我认为您正在寻找 CFN AWS::SecretsManager::SecretTargetAttachment 资源,它将数据库类型和连接详细信息添加到机密中。