中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

容器镜像和构建文件配置规则

为容器镜像创建一个非root用户

在dockerfile中为容器镜像创建一个非root用户。如有可能,通过非root用户运行容器。尽管可以映射用户命名空间,但如果已经在容器镜像中定义了一个用户,该容器默认由该用户运行,无需再进行用户命名空间重映射。

Kbox未创建非root用户,请根据业务需求确认是否需要创建非root用户,若自行创建非root用户,可能存在兼容性问题。

扫描和重建镜像,及时加入安全补丁

应经常扫描镜像,查找漏洞。重建镜像,便于及时加入补丁,并创建新的容器实例。漏洞是可以被利用的缺陷,而安全补丁则是可以解决这些漏洞的更新。可以使用镜像漏洞扫描工具检测镜像中任何形式的漏洞,并查找可用的补丁,以规避这些漏洞。补丁会将系统更新到最新的代码库。使用最新的代码库十分重要,供应商在修复问题时会关注这一点。在使用前对安全补丁进行评估,并遵循打补丁的最佳实践。另外,镜像漏洞扫描工具最好能够执行二进制分析或基于哈希的验证,而不仅仅是版本字符串匹配。

禁止在Dockerfile中使用ADD指令操作不可信文件

dockerfile中的ADD指令可以从远程URL检索文件,并自动执行解包等操作。从远程URL获取文件由于不可信,需要扫描文件是否恶意或带有漏洞,如未经扫描就添加来自URL的恶意文件,或解包带漏洞的程序会给系统带来风险,例如:自动解压恶意压缩包导致系统重要文件被替换等。因此直接使用ADD指令操作远程不可信文件会存在安全风险。

不在Dockerfile中存储机密信息

使用docker history等Docker命令以及各种工具和程序可以轻松回溯Dockerfile。另外,镜像发布商通常会提供Dockerfile,证明其镜像的可信性。因此,这些Dockerfile里的敏感信息很容易被暴露和利用。不在dockerfile中存储任何敏感信息。对于从外部获取的image内置软件,应当检查其中是否有内置账号/密钥等,避免形成后门。

开启Content trust

Content trust可以允许Docker发布者对他们发布的内容进行签名,完善整个信任分发机制。当用户从Registry中pull镜像时,用户会收到包含发布者公钥的证书,从而允许用户验证镜像的完整性和真实性。开启Content trust后,Docker引擎将只对已签名的镜像进行操作,并拒绝运行签名或摘要不匹配的镜像。默认情况下是没有开启Content trust的。

在容器镜像中加入健康检查

在dockerfile容器镜像中加入健康检查可以让容器正常运行后,通过周期性的检查容器,确认容器的运行状态是否正常,如果检查到停止运行或者运行异常的容器,可以产生检查报告告警,并及时作出响应,如重启容器,或者重新实例化一个新容器。

不要单独使用,或者在单行命令中使用update更新指令

在dockerfile的单行语句中使用update更新指令,会缓存在update层,这样当你使用相同的命令构建镜像时,会使用之前在update层缓存的命令。这可能会拒绝这些命令在以后的版本中进行任何更新。