首页 > 解决方案 > CloudFormation:对 SecretManager 值的动态引用不适用于资源的标记属性

问题描述

我想在 AWS 密钥管理器中存储一个密钥并在 CloudFormation 模板中检索它。为了测试它,我只是把它放在标签的值中 -

  MainRouteTable:
    Properties:
      Tags:
        - Key: Environment
          Value: LIVE
        - Key: Name
          Value: '{{resolve:secretsmanager:tvs:SecretString:testname}}'
      VpcId: !Ref 'VPC'
    Type: AWS::EC2::RouteTable

在我使用模板运行 CloudFormation 并且环境启动后,标签“Name”的值是“{{resolve:secretsmanager:tvs:SecretString:testname}}”,而不是存储在 testname 中的实际秘密。 在此处输入图像描述

我环顾四周,无法弄清楚出了什么问题。根据 AWS 文档,我做得很好。

我可以从 CLI 检索秘密罚款 -

aws secretsmanager --region us-east-1 get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:xxxxxx:secret:tvs-ZVTiDO --query SecretString --output text | jq -r .testname

有什么建议么?

我按照这里的说明进行操作 - https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references.html#dynamic-references-secretsmanager

标签: amazon-web-servicesamazon-cloudformationaws-secrets-manager

解决方案


SecretString只能在少数资源和选定的属性中使用。不支持标签。支持的列表是:

AWS::DirectoryService::MicrosoftAD Password

AWS::DirectoryService::SimpleAD Password

AWS::ElastiCache::ReplicationGroup AuthToken

AWS::IAM::User LoginProfile Password

AWS::KinesisFirehose::DeliveryStream 

RedshiftDestinationConfiguration Password

AWS::OpsWorks::App Source Password

AWS::OpsWorks::Stack CustomCookbooksSource Password

AWS::OpsWorks::Stack RdsDbInstances DbPassword

AWS::RDS::DBCluster MasterUserPassword 

AWS::RDS::DBInstance MasterUserPassword

AWS::Redshift::Cluster MasterUserPassword

推荐阅读