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

时间:2016-02-13 17:37:49

标签: security docker passwords environment-variables amazon-ecs

传递敏感环境变量的推荐方法是什么,例如密码到Amazon ECS任务?使用Docker Compose,我可以使用key-only environment variables,这会导致从OS环境中读取值。但是,我无法看到ECS task definitions的任何相应方法。

6 个答案:

答案 0 :(得分: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 `

您还可以将parameter_store_key视为环境变量。这样您就可以使用$parameter_store_key

示例

Dockerfile:

FROM ubuntu
//some other steps
CMD ["sh","/startup.sh"]

启动脚本:

#! /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 

将参数放入SSM:

aws ssm put-parameter --name 'db_password' --type "SecureString" --value 'P@ssW%rd#1'

Docker运行命令:

docker run -e parameter_store_key=db_password -e REGION=us-east-1 <docker_image>

方法2:

最近AWS宣布了针对ECS的ContainerDefinition的秘密支持 Using Secrets in ECS

答案 1 :(得分:6)

要使用参数存储,它存储使用KMS密钥加密的变量。

Amazon仅announced支持在任务定义中指定机密。从SSM中引用参数值和环境变量以与任务一起设置。

{
        ....
        "secrets": [
            {
                "name": "environment_variable_name",
                "valueFrom": "arn:aws:ssm:region:aws_account_id:parameter/parameter_name"
            }
        ]
    }

请参阅官方文档here

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:4)

如果使用环境变量,则可以在登录AWS控制台时看到它们。 AWS已经编写了关于使用适当的秘密&#34;保持敏感数据隐藏。 容器在启动时将这些加载到基于内存的环境变量中。 这是指南:https://aws.amazon.com/blogs/security/how-to-manage-secrets-for-amazon-ec2-container-service-based-applications-by-using-amazon-s3-and-docker/

答案 4 :(得分:3)

答案 5 :(得分:0)

如果无法在秘密环境中烘焙AWS, 您还可以使用docker入口点在容器运行时注入机密,例如https://medium.com/@zdk/simple-and-secure-way-to-pass-secrets-and-credentials-into-docker-containers-c2f66175b0a4