【问题标题】:Using AWS Secrets manager's Secret in Cloudformation在 Cloudformation 中使用 AWS Secrets manager 的 Secret
【发布时间】:2019-06-11 09:17:25
【问题描述】:

我想将 read_only_user 的密码导出到 EC2 实例。如何访问 UserData 中创建的密码?

Resources:
  ReadOnlyUserCredentials:
      Type: AWS::SecretsManager::Secret
      Properties:
        Name: !Sub "${AWS::StackName}/readonly-user-credentials"
        GenerateSecretString:
          SecretStringTemplate: '{"username": "read_only_user"}'
          GenerateStringKey: 'password'
          PasswordLength: 16
          ExcludeCharacters: '"@/\'
  WebServer:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-a4c7edb2
      InstanceType: t2.micro
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          echo "${!Join ['', ['{{resolve:secretsmanager:', !Ref ReadOnlyUserCredentials, ':SecretString:password}}' ]]}" > password

我尝试使用 !Join ,但这当然行不通。我将非常感谢这里的任何帮助。

更新:

      UserData:
        Fn::Base64:
         Fn::Sub:
          - |
            echo ${PasswordStr} > password
          - PasswordStr: !Join ['', ['{{resolve:secretsmanager:', !Ref ReadOnlyUserCredentials, ':SecretString:password}}' ]]

通过如上所示更改代码,我确实得到了解析字符串,但它没有给我实际的密码。如何解析 arn 以获取纯密码?

【问题讨论】:

  • 大卫,你是对的。通过使用上面的链接,我能够传递变量。无论如何可以访问 cloudformation 中的密码,!Join ['', ['{{resolve:secretsmanager:', !Ref ReadOnlyUserCredentials, ':SecretString:password}}' ]] 只是提供解析器字符串。如何获取实际密码?

标签: amazon-cloudformation aws-secrets-manager


【解决方案1】:

您可能不希望 CFN 在用户数据中扩展您的密码,因为密码将嵌入在 EC2 控制台中可见的 base64 编码的用户数据脚本中。

相反,您应该利用在主机上执行的脚本并在脚本执行时调用秘密管理器这一事实(警告,未测试):

Resources:
  ReadOnlyUserCredentials:
      Type: AWS::SecretsManager::Secret
      Properties:
        Name: !Sub "${AWS::StackName}/readonly-user-credentials"
        GenerateSecretString:
          SecretStringTemplate: '{"username": "read_only_user"}'
          GenerateStringKey: 'password'
          PasswordLength: 16
          ExcludeCharacters: '"@/\'
  WebServer:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: ami-a4c7edb2
      InstanceType: t2.micro
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          yum update -y
          yum install -y jq
          aws --region ${AWS::Region} secretsmanager get-secret-value --secret-id !Ref ReadOnlyUserCredentials --query SecretString --output text | jq -r .password > password

【讨论】:

  • 我试过这个,但是,这假设您在实例内部设置了访问凭证,以便使用 aws cli 执行操作 ...
  • 是的,您需要使用Roles for EC2 设置实例访问密钥的权限。您可以在dynamic-references问题的上一个答案中找到更多详细信息。
猜你喜欢
  • 2020-02-28
  • 2019-09-24
  • 2019-05-04
  • 2019-11-10
  • 2022-09-23
  • 2023-01-02
  • 2018-12-09
  • 2020-12-25
  • 2020-08-23
相关资源
最近更新 更多