1

我想使用存储在机密管理器中的凭据填充环境变量,但实例化任务中的 ENV 变量没有预期值,而是分配有完整的SecretString.

定义看起来与文档中指定的一样:

...
Parameters:
  ...
  SecretARN:
    Type: String
    Description: ARN of the secrets manager

MyTask:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ...
      ContainerDefinitions:
        - Name: 'my-task'
          ...
          Secrets:
            - Name: PASSWORD
              ValueFrom: !Ref SecretARN
            - Name: USERNAME
              ValueFrom: !Ref SecretARN
...

秘密SecretString看起来像这样:

{
    "PASSWORD": "v3r1s3cr3t",
    "USERNAME": "johndoe"
}

在应用程序或任务中,当我执行时env,输出打印如下:

PASSWORD='{ "PASSWORD": "v3r1s3cr3t", "USERNAME": "johndoe" }'
USERNAME='{ "PASSWORD": "v3r1s3cr3t", "USERNAME": "johndoe" }'
4

1 回答 1

2

是的,Secrets Manager 密钥包含 3 个部分:

  • 秘密的名称或标签,例如PROD_DB_CREDS
  • 一个或多个密钥,例如 DB_USERNAME、DB_PASSWORD
  • 以及密钥的实际秘密值

当您使用 ARN 访问 PROD_DB_CREDS 时,您将获得一个带有键和值的 JSON 对象:

{
  "DB_USERNAME": 'my-username',
  "DB_PASSWORD": 'my-password'
}

您可以使用解析器访问密钥值,而不是将 ARN 粘贴到 CloudFormation 模板的参数部分(如以下文档中所示:https ://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/dynamic-references .html#dynamic-references-secretsmanager )

然后,您将使用以下方法在 CloudFormation 模板中解析上述秘密值:

MyTask:
    Type: AWS::ECS::TaskDefinition
    Properties:
      ...
      ContainerDefinitions:
        - Name: 'my-task'
          ...
          Secrets:
            - Name: PASSWORD
              ValueFrom: '{{resolve:secretsmanager:PROD_DB_CREDS:SecretString:DB_PASSWORD}}'
            - Name: USERNAME
              ValueFrom: '{{resolve:secretsmanager:PROD_DB_CREDS:SecretString:DB_USERNAME}}'
...

您的 CloudFormation 服务角色将需要正确的权限才能访问该密钥。

于 2019-07-26T07:10:16.993 回答