概述
鏡像簽名功能保障鏡像來源安全可靠,避免中間人攻擊和非法鏡像的更新與運行。CRS支持為命名空間的鏡像自動加簽,每次推送容器鏡像后都會匹配加簽規則自動加簽,保障您的容器鏡像內容可信。
鏡像簽名步驟
為命名空間下的鏡像設置自動加簽的步驟如下:
登錄容器鏡像服務控制臺。
在頂部菜單欄,選擇所需資源池。
在實例頁面中選擇容器鏡像倉庫實例。
在企業版實例管理頁面的左側菜單上選擇"安全可信" - "鏡像簽名",點擊左上角的創建鏡像加簽規則按鈕。
在彈出的對話框,填寫鏡像加簽規則的,然后點擊“確定”按鈕,完成創建,界面各項參數說明如下表;
參數
是否必選 說明
命名空間 必選 選擇需要自動加簽的命名空間名稱 使用默認私鑰 非必選 加簽時是否使用默認的私鑰,勾選則表明使用默認私鑰加簽,若不勾選則表明使用自定義私鑰,則需要往下錄入自定義私鑰的信息 私鑰 非必選 如果上述"使用默認私鑰"不勾選,則必須在此框填入自定義私鑰的信息,可以將私鑰直接貼入,或者從"文件導入",私鑰目前只支持長度位數是2048,格式為PKC8的RSA秘鑰 密碼 非必選 如果創建RSA秘鑰對時有添加密碼,則需要再此處填上,否則會影響加簽執行 創建完畢的規則會展示在鏡像簽名的列表中,可對簽名規則進行編輯,如更換簽名秘鑰等。
注意
1. 鏡像加簽不會影響鏡像的常規使用,更不會影響鏡像中原有的能力及業務功能。
2. 單個命名空間只能創建一個加簽規則。
3. 如果是使用自定秘鑰,密鑰對需要自行保存維護好,使用跟秘鑰對應的公鑰方可驗簽成功。
鏡像簽名驗證步驟
鏡像簽名驗證(簡稱:驗簽)主要在容器鏡像使用方執行,在云容器引擎的插件市場中安裝名為"cube-sign"的驗簽插件即可讓集群具備驗簽能力,凡是按提供的公鑰所對應的秘鑰加簽過的鏡像,方可驗簽通過。
注意
1. 安裝本插件前,請先安裝 cert-manager
2. 安裝插件時需要慎重配置,否則容易影響集群中其他Pod的正常創建,從而影響到集群的功能
驗簽插件安裝時需要按照實際狀況提供相關配置信息方可讓驗簽工作正常運行,讓集群功能正常使用,配置參數說明如下
| 參數 | 描述 | 默認值 |
|---|---|---|
signconfig.useDefaultSignKey | 使用默認的簽名 | true |
| signconfig.customSignKey | 使用default signkey時,custom無需填寫,填寫時將公鑰作 base64 -w0 編碼 | ""(空字符串) |
| signconfig.ignoreList | 忽略驗簽白名單集合,配置樣例如下 | [] |
allowList:
## 只對命名空間加白,多個命名空間用逗號“,”分割
- namespaces: "default,dev"
## 只對鏡像加白,鏡像名支持完整匹配,且支持通過星號(*)字符實現簡單的通配符匹配,通配后文補充說明
- imagenamepattern: "nginx*"
## 對命名空間下的鏡像名加白
- namespaces: "grey"
imagenamepattern: "busybox:1.28"imagenamepattern詳細說明:
當配置項值不包含星號(*)字符時,將按配置的值進行完整匹配。例如,nginx:v0.1.0只會匹配nginx:v0.1.0。
當通過星號(*)字符實現通配符匹配時,包含以下限制:
星號( * )位于末尾時,匹配除正斜線(/)外的任意字符。例如,a.com/nginx*匹配a.com/nginx:v0.1.0,但是不匹配a.com/nginx/test:v0.1.0 。
星號( * )不位于末尾時,匹配字母、數字、短橫線(-) 以及下劃線(_) 。例如,registry-vpc.cn-*.ctyun.com/pause:3.2既匹配registry-vpc.cn-hangzhou.ctyun.com/pause:3.2,也匹配registry-vpc.cn-beijing.ctyun.com/pause:3.2。
注意
特別地,處于kube-system命名空間下的所有鏡像均不進行驗簽操作。同理使用其他第三方的開源鏡像時,為了能繞過驗簽邏輯,需要在安裝驗簽插件時統一為這些鏡像加上白名單
當驗簽不通過時,Pod的容器事件中可觀察到如下的事件提示: