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


传递敏感环境变量的推荐方法是什么,例如密码,到 亚马逊ECS 任务?使用Docker Compose,我可以使用 仅键的环境变量,这导致从OS环境中读取值。我看不到任何相应的方法 ECS任务定义 然而。


1000
2018-02-13 17:37


起源



答案:


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

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


3
2018-02-26 22:01





您可以使用 参数存储 存储变量。如果你将它们存储为 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 `
// 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>

5
2018-05-09 10:19



你的概念听起来很不错。但我无法遵循它。你能详细介绍一下启动脚本吗? - caliph
@caliph,请查看此文档以获取有关docker容器启动脚本如何工作的更多详细信息。 docs.docker.com/engine/reference/builder/#entrypoint - Gangaraju


答案:


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

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


3
2018-02-26 22:01





您可以使用 参数存储 存储变量。如果你将它们存储为 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 `
// 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>

5
2018-05-09 10:19



你的概念听起来很不错。但我无法遵循它。你能详细介绍一下启动脚本吗? - caliph
@caliph,请查看此文档以获取有关docker容器启动脚本如何工作的更多详细信息。 docs.docker.com/engine/reference/builder/#entrypoint - Gangaraju


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


3
2018-05-09 10:23





从S3中拉出环境变量的实现 马克杨 提到:

https://www.promptworks.com/blog/handling-environment-secrets-in-docker-on-the-aws-container-service


1
2017-08-03 22:50