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

时间:2019-07-24 22:04:13

标签: amazon-ecs aws-secrets-manager

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

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

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty, ObjectProperty
import random
from kivy.lang.builder import Builder


class YourWidget(Widget):
    def __init__(self, **kwargs):
        super(YourWidget, self).__init__(**kwargs)


    def change_text(self):
        self.label1.text = str(self.ids.input1.text)



Builder.load_string('''
<YourWidget>:
    input1:input1
    label1:label1
    BoxLayout:
        orientation: 'vertical'
        size: root.size
        TextInput:
            id: input1
        Label:
            id: label1
            text: ''
        Button:
            id: button1
            text: "Change text"
            on_release: root.change_text()

''')


class YourApp(App):
    def build(self):
        return YourWidget()


if __name__ == '__main__':
    YourApp().run()

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

从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

答案 1 :(得分:1)

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

通常,当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