【问题标题】:AWS ECS - How to retrieve specific key from secret manager?AWS ECS - 如何从秘密管理器中检索特定密钥?
【发布时间】:2019-12-03 03:12:46
【问题描述】:

我可能在这里遗漏了一些明显的东西,但我似乎找不到有关从 ECS 任务定义的机密管理器机密中检索特定键/值的文档。

我有一个像这样的 ARN 的秘密......

arn:aws:secretsmanager:<region>:<account>:secret:LDAP_Bind_Credentials-abcd

在这个秘密中,我有这样的键/值对......

LDAP_BIND_USER: <ldap bind user name>
LDAP_BIND_PASSWORD: <ldap bind user password>

我想要做的是在我的任务定义 LDAP_BIND_USER 和 LDAP_BIND_PASSWORD 中定义环境变量,并在我的密钥中引用适当的密钥。

这真的可能吗,还是我应该在我的程序中实际解码键/值对?

文档似乎只引用了密钥本身的 ARN,而不是密钥中的键/值对。

【问题讨论】:

    标签: amazon-ecs aws-secrets-manager


    【解决方案1】:

    自 2020 年 2 月起,ECS 任务定义现在支持从 JSON 对象中的密钥读取 AWS Secrets Manager 密钥,以用于使用 EC2 启动类型的任务。

    您可以在任务定义文件的containerDefinitions 中添加以下内容

    {
      "containerDefinitions": [{
        "secrets": [{
          "name": "<environment_variable_name>",
          "valueFrom": "arn:aws:secretsmanager:<region>:<account_id>:secret:<secret_name>:<json_key>::"
        }]
      }]
    }
    

    参考: AWS ECS secret manager documentation

    【讨论】:

    • 正是我想要的,感谢您指出!
    • 这对我在 ECS 上下文中或使用 AWS CLI 时不起作用。
    • 这真的适用于任何人吗?我可以在我的任务定义中看到 arn,但是在重新启动或启动我的服务时,我的任务正在循环,因为 env vars 实际上并没有进入容器......
    【解决方案2】:

    使用秘密是不可能的,你必须在程序内部进行解码。

    通常,当 ECS 检索秘密时,它会在 json 对象中为我们提供类似 {"admin":"admin","pas":"pas"} 的信息,我们必须以编程方式对其进行解码。

    但另一种选择是使用 AWS System Manager 参数存储 [1] 来存储机密,在这种情况下,ECS 会直接为您提供实际价值。

    [1]https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html

    【讨论】:

    • 谢谢,从 json 对象中提取值可能是解决问题的一种足够简单的方法。我查看了 System Manager 参数,但这些参数似乎有点笨拙,因为似乎没有一种方法可以清晰地对相关参数进行分组。
    最近更新 更多