我应该如何将敏感环境变量传递给Amazon ECS任务?

akn*_*ds1 15 security passwords environment-variables amazon-ecs docker

将敏感环境变量(例如密码)传递给Amazon ECS任务的推荐方法是什么?使用Docker Compose,我可以使用仅限密钥的环境变量,从而导致从OS环境中读取值.但是,我看不到ECS任务定义的任何相应方法.

Gan*_*aju 12

方法1:

您可以使用Parameter Store存储变量.如果将它们存储为SecureString,则值将被加密.

您可以在任务定义中将它们作为环境变量引用.

您需要在容器启动脚本中检索它们

value_from_parameter_store =`aws ssm get-parameter --name $parameter_store_key --with-decryption --output text --query Parameter.Value --region $REGION `
Run Code Online (Sandbox Code Playgroud)

您还可以提及parameter_store_key环境变量.这样你就可以使用了$parameter_store_key

Dockerfile:

FROM ubuntu
//some other steps
CMD ["sh","/startup.sh"]
Run Code Online (Sandbox Code Playgroud)

启动脚本:

#! /bin/bash
export db_password =`aws ssm get-parameter --name $parameter_store_key --with-decryption --output text --query Parameter.Value --region $REGION `
// Please note that above line has `(backtick) 
// Do other stuff and use this password 
Run Code Online (Sandbox Code Playgroud)

在SSM中放置参数:

aws ssm put-parameter --name 'db_password' --type "SecureString" --value 'P@ssW%rd#1'
Run Code Online (Sandbox Code Playgroud)

Docker运行命令:

docker run -e parameter_store_key=db_password -e REGION=us-east-1 <docker_image>
Run Code Online (Sandbox Code Playgroud)

方法2:

最近,AWS宣布在ECS中使用秘密的ECS容器定义支持 秘密


Lio*_*orH 6

使用参数存储是一种方法,它存储使用KMS密钥加密的变量。

亚马逊刚刚宣布支持在任务定义中指定机密。引用SSM中的参数值和环境变量以与任务一起设置。

{
        ....
        "secrets": [
            {
                "name": "environment_variable_name",
                "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
            }
        ]
    }
Run Code Online (Sandbox Code Playgroud)

请在此处查看官方文档。

还有一个名为Chamber的项目,该项目可以从SSM中的给定路径加载所有参数,并将它们设置为环境变量。


Mar*_*ung 5

在您发布的任务定义链接中,有一个“环境”部分允许您执行此操作。它们成为容器内的环境变量。

如果您的意思是希望将信息保留在任务定义之外并且该任务可以引用它,那么您不能。在这种情况下,您最好的选择是让您的容器从外部来源提取该信息,而不是让 ECS 任务配置尝试引用它。

编辑:此时我被否决了,因为参数存储现在是正确的方法。当时这个答案是最正确的方法,但现在使用 SSM 的其他解决方案是正确的方法。