我花了一些时间对此进行了研究,但是仍然不清楚在安全性方面ECS环境变量如何安全使用,而对于码头工人而言是否使用ENV和ENV-FILE选项呢?
例如:AWS ECS documentation指出在任务定义中添加了机密,它们将用作容器环境变量。
Docker documentation具有相似的语言:
从结果映像运行容器时,使用ENV设置的环境变量将保留。您可以使用docker inspect查看值,并使用docker run --env =更改它们。
现在,我找不到答案的问题是,如果两个选项都在容器内设置了环境变量(这意味着泊坞窗检查时用户可以查看),那么使用AWS ECS环境变量有什么好处?
从AWS参数存储(或)SSM中获取变量(例如dbuser,dbpassword)的最佳策略是什么,但是不要将其设置为容器环境变量(如果可能的话,不使用docker entryscript)?
答案 0 :(得分:1)
一种选择是在启动过程中通过应用程序中的远程协议(通过HTTP API)提取变量配置。
示例-我有运行在ECS上的基于Spring Boot Java的Docker容器,我在其中使用Spring Cloud Config拉动dbuser和dbpassword等配置。当我的Spring Boot容器启动时,它们会使用Spring Cloud Config加载必要的配置并初始化应用程序。
Spring Cloud Config支持从各种来源(例如Git,Vault和AWS Parameter Store)提取配置。
我的App容器-> Spring Cloud Config Server容器-> Git / Vault / AWS 参数存储
此处是将Spring Cloud与AWS Parameter Store集成的示例指南,以及一些具有示例Github存储库的SO问题。 https://blog.trifork.com/2018/07/20/integrating-the-aws-parameter-store-with-spring-cloud/
现在这可能不适用于其他平台容器,但是您也可以将类似的概念应用于您的平台。示例:Spring Cloud Config公开了一个通用的HTTP Rest API,您可以从您的应用程序中以其他编程语言等编写的该API中提取必要的配置,
答案 1 :(得分:1)
可以使用Github上的代码检入DockerFiles。因此,任何有权访问代码的人都可以看到机密信息(dbUser和dbPassword)。万一回购协议意外公开,秘密也会被暴露。
如果使用AWS ECS Env变量,则只有有权访问AWS infra的用户才能看到机密。它还使在多个环境中运行变得容易。
并且正如Imran所建议的,您始终可以在过程开始之前从某些第三方配置管理器中获取配置。