Authentication 使用AWS CloudFormation在启动时将具有特定内容的文件从secretsmanager添加到计算机中

Authentication 使用AWS CloudFormation在启动时将具有特定内容的文件从secretsmanager添加到计算机中,authentication,amazon-cloudformation,Authentication,Amazon Cloudformation,我正在使用CloudFormation提供一个Linux实例。在启动期间,我想将一个文件添加到一个特定的文件夹中,其中的内容来自机密管理器中的secretstring。 我尝试使用UserData和MetaData添加文件,但是,它没有做应该做的事情,即从secrets manager向文件添加正确的内容,而是按原样添加描述内容位置的字符串,而不是内容本身。这是我的代码: Metadata: AWS::CloudFormation::Init: config: files

我正在使用CloudFormation提供一个Linux实例。在启动期间,我想将一个文件添加到一个特定的文件夹中,其中的内容来自机密管理器中的secretstring。 我尝试使用UserData和MetaData添加文件,但是,它没有做应该做的事情,即从secrets manager向文件添加正确的内容,而是按原样添加描述内容位置的字符串,而不是内容本身。这是我的代码:

Metadata:
  AWS::CloudFormation::Init:
    config:
      files:
        /home/ansible/.ssh/authorized_keys:
          content: !Sub |
            '{{ resolve:secretsmanager:
          arn:aws:secretsmanager:eu-central-1:account:secret:secretname:
            SecretString:
              secretstringpath }}'
          mode: "000644"
          owner: "ansible"
          group: "ansible"
Properties:
  UserData:
    Fn::Base64: !Sub |
      #!/bin/bash -xe
      yum update -y
      groupadd -g 110 ansible
      adduser ansible -g ansible
      mkdir /home/ansible/.ssh
      yum install -y aws-cfn-bootstrap
      /opt/aws/bin/cfn-init -v \
        --stack ${AWS::StackName} \
        --resource LinuxEC2Instance \
        --region ${AWS::Region}
      cat /home/ansible/.ssh/authorized_keys
cat命令打印的内容如下:

{{解析:secretsmanager: arn:aws:secretsmanager:eu-central-1:帐户:机密:secretname: 秘密字符串: secretstringpath}

而不是文件的路径名。
如何确保添加文件内容?

可以简单地将引号从单引号切换到双引号:

Metadata:
  AWS::CloudFormation::Init:
    config:
      files:
        /home/ansible/.ssh/authorized_keys:
          content: !Sub |
            "{{ resolve:secretsmanager:
          arn:aws:secretsmanager:eu-central-1:account:secret:secretname:
            SecretString:
              secretstringpath }}"
          mode: "000644"
          owner: "ansible"
          group: "ansible"

在Cloudformation::Init中不能有对secretsmanager的动态引用