如何建置一個通過 DTR 弱點掃描的 Image ?


Docker EE 產品裡有一個重要的軟體元件 DTR (Docker Trusted Registry),
用來作為叢集內私有 image 倉庫,保存 image, 管理 image 清單,同時提供 image 數字簽署,CVE 弱點掃描,image 鏡像拷貝等等功能。

今天這篇文章說明如何建置一個儘可能去除所有嚴重或大型的弱點,儘可能通過 DTR 弱點掃描的 Base Image, 這裡給出幾個重要方針供參考。

以下說明以 Linux image 為例。
Windows 環境的 base image 不是開源的, 有任何安全上的弱點皆需要由微軟官方提供更新,因此不在本文討論範疇。


1. 使用 alpine 作為起始 base image 而不是其他 Linux base image 像是 CentOS, UBUNTU.
alpine 比較小,小於 5MB,預設裡面只有最小足以開機以及能夠運行 shell 環境的二進制檔案內容。
其 C lib 是使用優化過的靜態函式庫 musl 所組成。
由於包含的軟體內容不多,因此相對其他 distribution 更安全。
如果需要其他的工具,像是 ssh ,預設裡面沒有,要另外編寫 Dockerfile 並建置。
有需要的軟體工具再加進去,不需要的不要加入。


2. 同樣地,對於包含 middleware 內容的 base image,儘可能使用其底層以 alpine 系統所堆疊起來的,
舉幾個例子:要使用 Python v3.7.4 的 image 時,
應該選擇用

$ docker pull python:3.7.4-alpine3.10

而不是

$ docker pull python:3.7.4-buster

另外,關於常見的 nginx image (v1.16.1),
應該選擇用

$ docker pull nginx:1.16.1-alpine

而不是

$ docker pull nginx:1.16.1


3. 承上,從 Docker Hub 拉下來的 alpine image, 要再做內部更新,多建置一次產生新的 layer 然後再堆疊應用程式。
編寫 Dockerfile 的時候, 在任一個 FROM 指令指明所需要的 Alpine 版本 base image 之後,加上如下一行

RUN apk upgrade


留言

這個網誌中的熱門文章

Docker 環境下的 Proxy 配置