我们有这样一个用例,我们想用maven对我们的应用程序运行验收测试。为此,我们正在考虑构建我们的docker镜像,并将maven settings.xml复制进去。显然,设置xml包含有关连接到远程人工制品仓库等的敏感数据。我陷入了一个两难的境地,我们是否应该在docker镜像中复制它,或者这是一个糟糕的做法,我们应该寻找其他方法来实现这一点。编辑-另一点,我们的docker镜像被推送到只有授权用户才能访问的私有注册表
kx5bkwkv1#
Docker镜像的内容绝对没有安全性。任何获得该映像的人都可以轻松地读取其docker history,并从映像中读取或复制任意文件。因此,我会非常努力地将凭据完全排除在Docker镜像构建过程之外。如果settings.xml文件中有用户名和密码,最好是找到一种不同的方法来完成所需的设置。类似地,将ssh私钥、AWS凭证或GitHub访问令牌添加到图像将危及这些凭证。如果settings.xml文件只包含内部主机名(但不包含凭据),或者故意设置错误的密码,那么问题就在于您愿意承受多大的风险。如果你有一个像http://build:passw0rd@build.internal.example.com这样的URL,其中的内部主机名是外部无法访问的,你可以说这是“足够”的安全性,因为用户名和密码非常容易猜测,你不需要特意去隐藏它,特别是如果你认为你可以信任你的最终用户。
docker history
settings.xml
http://build:passw0rd@build.internal.example.com
szqfcxe22#
您可以使用docker secret将变量传递给settings.xml通过在/etc/docker/daemon. json中启用buildkit来启用secret
{ "features": { "buildkit": true } }
在Dockerfile中创建一个settings.xml,如下所示:
COPY <<-EOT /root/.m2/settings.xml <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <servers> <server> <id>ID</id> <username>\${username}</username> <password>\${password}</password> </server> </servers> </settings> EOT
然后你可以使用这条RUN行来使用secret
RUN --mount=type=secret,id=my_env source /run/secrets/my_env \ && mvn clean install -Dusername=${USERNAME} -Dpassword=${PASSWORD}
像这样构建你的DockerFile:
docker build -t test --secret id=my_env,src=.env .
将你的秘密存储在Dockerfile文件夹中名为.env的文件中,如下所示:
USERNAME=toto PASSWORD=toto
在RUN行中读取秘密,然后销毁它。
2条答案
按热度按时间kx5bkwkv1#
Docker镜像的内容绝对没有安全性。任何获得该映像的人都可以轻松地读取其
docker history
,并从映像中读取或复制任意文件。因此,我会非常努力地将凭据完全排除在Docker镜像构建过程之外。如果
settings.xml
文件中有用户名和密码,最好是找到一种不同的方法来完成所需的设置。类似地,将ssh私钥、AWS凭证或GitHub访问令牌添加到图像将危及这些凭证。如果
settings.xml
文件只包含内部主机名(但不包含凭据),或者故意设置错误的密码,那么问题就在于您愿意承受多大的风险。如果你有一个像http://build:passw0rd@build.internal.example.com
这样的URL,其中的内部主机名是外部无法访问的,你可以说这是“足够”的安全性,因为用户名和密码非常容易猜测,你不需要特意去隐藏它,特别是如果你认为你可以信任你的最终用户。szqfcxe22#
您可以使用docker secret将变量传递给settings.xml
通过在/etc/docker/daemon. json中启用buildkit来启用secret
在Dockerfile中创建一个settings.xml,如下所示:
然后你可以使用这条RUN行来使用secret
像这样构建你的DockerFile:
将你的秘密存储在Dockerfile文件夹中名为.env的文件中,如下所示:
在RUN行中读取秘密,然后销毁它。