Answers:
您有3种方法来获取Docker容器内应用程序的机密。前两个涉及docker配置。最后一个是让您的应用程序直接从秘密商店中获取秘密。
根据“ The 12 Factor App”指南,机密仅是配置,应始终在环境中设置。您可以在docker运行期间将机密设置为环境变量,然后您的应用程序将从那里访问它们。
您可以将所有机密信息保存在特定的配置/秘密文件中,然后将其作为已挂载卷挂载到您的实例。
如@ 030所述,您可以使用Hashicorp Vault(或“ Amazon Secrets Manager”或类似的任何服务)。
您的应用程序或Sidecar应用程序可以直接获取其所需的秘密,而无需处理Docker容器上的任何配置。该方法将允许您使用动态创建的机密(此类系统的一个非常吸引人的功能),而不必担心这些机密可以从文件系统查看或检查docker容器的env变量。
我相信环境变量是要走的路。它更易于管理,并且如果您具有CI构建系统,则仍可以从Hashicorp Vault之类的秘密商店中提取信息,并在构建过程中提取其秘密并在部署时进行设置。您将两全其美,并获得了开发人员无需编写应用程序代码来获取机密信息的额外好处。开发人员应该专注于其代码功能,而不要处理诸如获取密码之类的管理任务。
应用程序的代码应专注于其自身的应用程序功能本身,而不要处理诸如获取密码之类的后端任务。就像12因子应用程序状态一样。
编辑:更改了最后一句,以消除Developer vs SysAdmin孤岛的含义。从代码的角度来看,任务本身应该是分开的,但是DevOps是关于同一个人的,既要牢记又要不受限制。
根据@Dirk的出色评论(将机密传递到Docker容器中),有一个非常有力的理由是,由于不想泄漏秘密存储,因此优先于ENV vars优先处理秘密存储。
inspect
或exec
命令查看它们。stdout
在某些调试模式下运行时,环境变量通常会转储到日志文件中或放入日志文件中。所有产生的子进程都可以读取和公开它们,这可能是您无法控制的。更多信息,例如位置: diogomonica.com/2017/03/27/...