AWS ECS - 如何从秘密管理器中检索特定密钥?

use*_*825 6 amazon-ecs aws-secrets-manager

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

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

arn:aws:secretsmanager:<region>:<account>:secret:LDAP_Bind_Credentials-abcd
Run Code Online (Sandbox Code Playgroud)

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

LDAP_BIND_USER: <ldap bind user name>
LDAP_BIND_PASSWORD: <ldap bind user password>
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 8

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

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

{
  "containerDefinitions": [{
    "secrets": [{
      "name": "<environment_variable_name>",
      "valueFrom": "arn:aws:secretsmanager:<region>:<account_id>:secret:<secret_name>:<json_key>::"
    }]
  }]
}
Run Code Online (Sandbox Code Playgroud)

参考: AWS ECS 秘密管理器文档

  • 这实际上对任何人都有效吗?我可以在任务定义中看到 arn,但是当重新启动或启动我的服务时,我的任务正在循环,因为环境变量实际上并未将其放入容器中...... (2认同)

Jat*_*tin 5

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

一般来说,当 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