2016-01-13 76 views
2

我在一个Docker容器中有一个Web应用程序,我想通过另一个容器(运行NGINX)代理它,这个容器暴露在外面,只处理HTTPS流量。这两个容器将由ECS在相同的EC2实例上托管。让NGINX容器从S3或IAM获取SSL私钥的最佳方式是什么?如何在Amazon ECS中设置SSL反向代理?

请注意,出于安全原因,我不想在Docker映像中包含私钥。我想在创建容器时从S3或IAM检索私钥,从环境变量中获取AWS用户凭据。

Amazon Elastic Beanstalk has a nice way to achieve this,但我不认为有什么这样的ECS。我想我需要编写一个Docker入口点(或者包装Nginx命令)以安装S3/IAM客户端,然后使用环境中的凭据下载密钥。 AWS提供更好的方法吗? Elastic Load Balancing似乎是一种解决方案,但我无法找到有关LB和EC2实例之间安全措施的任何信息。

+0

我会说在一个VPC内部使用带有ECS EC2实例的SSL处理的外部ALB是一个相当安全的解决方案,但这一切都取决于您的要求。 – Bram

回答

1

有几个部分的问题,

配售的Nginx和Web应用程序在相同的情况下,可以通过定义两个容器一样ECS任务的一部分来实现。我建议创建一个从nginx到webapp容器的docker链接。这将允许您避免在外部暴露webapp容器端口。暴露给主机的唯一端口将是nginx端口。

在容器启动时安全地检索Keys的方法之一是让一个自定义shell脚本启动容器上的nginx服务。为此,您需要构建自己的码头集装箱。在你的docker build文件中使用一个自定义的shell脚本来定义容器的开始。在shell脚本中,可以使用aws cli从s3检索文件。检索后,您可以启动nginx服务。使用aws cli将允许您使用ec2实例上可用的凭证。 如果您的基础码头图像没有aws cli,则需要添加它。