我有一个docker应用程序,我需要传递一条安全的信息,因为它使用密码来加密/解密存储的数据。我试图弄清楚使用环境变量传递这些信息是多么安全。我知道,如果我使用
docker run -e passphrase="secretkey123" --name containername imagename
然后可以通过以下方式找到该值:
docker inspect containername
因此它必须存储在磁盘上的某个地方(我假设在/ var / lib / docker中)。有没有更安全的方法将环境变量传递给docker?我应该在链接到主机文件系统的卷中使用临时文件吗?还有更好的方法吗?
答案 0 :(得分:3)
无论存储在何处,都可以通过“docker inspect”清楚地访问它。我认为这归结为你希望它有多安全。例如,您可以使用具有文件权限的共享卷来限制对磁盘上的密码文件的访问。或者您可以使用socker / ssh / etc来避免将密码放入磁盘上的文件中。这取决于你真正想要的安全感。
我注意到如果你说一个在容器中运行的Web服务器,我认为如果有人突破了Web服务器,他们只能访问容器可以访问的内容(而不是Docker正在运行的主机操作系统)。
答案 1 :(得分:0)
接受的答案并没有指出您需要root访问权限才能与Docker进程/资产进行交互。
要求root用户访问权限(并使用shell插值来防止执行命令显示在ps中),可以保护您的机密以进行在线访问。在离线状态下,文件系统应进行加密,否则临时容器可以使用RAM磁盘进行容器存储。