2

我在 Docker 容器中有一个 Web 应用程序,我想通过另一个暴露给外界并且只处理 HTTPS 流量的容器(运行 NGINX)来代理它。两个容器将由 ECS 托管在同一个 EC2 实例上。使 NGINX 容器从 S3 或 IAM 检索 SSL 私钥的最佳方法是什么?

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

Amazon Elastic Beanstalk 有一个很好的方法来实现这一点,但我认为 ECS 没有类似的东西。我在想我需要编写一个 Docker 入口点(或包装 Nginx 命令)才能安装 S3/IAM 客户端,然后使用环境中的凭据下载密钥。AWS 是否提供了更好的方法?似乎 Elastic Load Balancing 是一种解决方案,但我找不到任何有关 LB 和 EC2 实例之间的安全措施的信息。

4

1 回答 1

1

这个问题有几个部分,

将 Nginx 和 Web 应用程序放在同一个实例上可以通过将两个容器定义为同一个 ecs 任务的一部分来实现。我建议创建一个从 nginx 到 webapp 容器的 docker 链接。这样可以避免将 webapp 容器端口暴露在外部。唯一暴露给主机的端口是 nginx 端口。

在容器启动时安全地检索密钥的方法之一是让自定义 shell 脚本在容器上启动 nginx 服务。为此,您需要构建自己的 docker 容器。在您的 docker build 文件中,使用自定义 shell 脚本定义容器的开始。在 shell 脚本中,您可以使用 aws cli 从 s3 检索文件的逻辑。取回后就可以启动nginx服务了。使用 aws cli 将允许您使用 ec2 实例上可用的凭证。如果您的基础 docker 映像没有 aws cli,您将需要添加它。

于 2016-05-16T13:12:27.720 回答