从管理员那里获取一个秘密,并在ec2 cfn-init

时间:2019-04-02 21:27:23

标签: amazon-web-services amazon-cloudformation

我正在尝试在CloudFormation的EC2实例的cfn-init中使用机密。基于Secrets Manager Secrets,这应该不难,但我尝试的是在我的情况下将其用作命令的一部分:

01_login_in_docker:
          command: !Join
            - ' '
            - - 'docker login -u '
              - '{{resolve:secretsmanager:docker-info:SecretString:DOCKER_ACCOUNT_USERNAME}} '
              - '-p '
              - '{{resolve:secretsmanager:docker-info:SecretString:DOCKER_ACCOUNT_PASSWORD}} '
              - 'cloud.canister.io:5000'

docker-info是存储在我帐户中的秘密,因此,我应该只需要名称即可访问密钥,而无需ARN。

正在审查cfn-init.log,我发现CF无法解决任何问题:

  

[ERROR]命令01_login_in_docker(docker登录-u {{resolve:secretsmanager:docker-info:SecretString:DOCKER_ACCOUNT_USERNAME}} -p {{resolve:secretsmanager:docker-info:SecretString:DOCKER_ACCOUNT_PASSWORD}} cloud.canister.io :5000)失败

有人尝试过类似的方法还是可以发现我的问题在哪里?

1 个答案:

答案 0 :(得分:0)

它没有明确提及,但是所有示例都将动态引用用作整个值,而不是另一个字符串的一部分。因此,也许尝试将它们作为环境变量传递。这样做也应该更加安全,因为日志中的命令中不会包含密码。

    01_login_in_docker:
      command: |
        docker login -u "$DOCKER_ACCOUNT_USERNAME" -p "$DOCKER_ACCOUNT_PASSWORD" cloud.canister.io:5000
      env:
        DOCKER_ACCOUNT_USERNAME: '{{resolve:secretsmanager:docker-info:SecretString:DOCKER_ACCOUNT_USERNAME}}'
        DOCKER_ACCOUNT_PASSWORD: '{{resolve:secretsmanager:docker-info:SecretString:DOCKER_ACCOUNT_PASSWORD}}'