Helmchart指南-系列(6)-出處與完整性驗證
Chart 的出處與完整性驗證
Helm擁有可幫助chart使用者驗證chart包完整性和出處的工具。使用基於PKI,GnuPG和備受尊敬的軟體包管理器的行業標準工具,Helm可以生成並驗證簽名檔案。
概述
完整性通過將chart與其出處記錄進行比較來確定。出處記錄儲存在出處檔案provenance中,並與打包的chart一起儲存。例如,如果chart包被命名myapp-1.2.3.tgz
,其出處檔案將是myapp-1.2.3.tgz.prov
。
出處檔案在打包時生成(helm package --sign ...
),並且可以通過多個命令檢查,比如helm install --verify
。
工作流程
本節描述了有效使用出處資料的可用的工作流程。
前提條件:
- 二進位制(非ASCII)格式的有效PGP金鑰對
- helm命令列工具
- GnuPG命令列工具(可選)
- Keybase命令列工具(可選) – 注意:如果PGP私鑰有密碼,支援
--sign
選項的任何命令系統將提示輸入密碼以檢視。
建立chart:
$ helm create mychart
Creating mychart
準備打包後,將--sign
引數加到helm package
。另外,指定已知簽名金鑰和包含相應私鑰的金鑰環keyring:
$ helm package --sign --key `helm signing key` --keyring path/to/keyring.secret mychart
提示:對於GnuPG使用者,金鑰環已存在~/.gnupg/secring.gpg
。可以使用gpg –list-secret-keys列出擁有的金鑰。
警告: GnuPG v2在預設位置在〜/ .gnupg / pubring.kbx
,使用新格式’kbx’儲存金鑰keyring。請使用以下命令將鑰匙keyring轉換為傳統的gpg格式:
$ gpg --export-secret-keys >~/.gnupg/secring.gpg
到這裡,應該可用看到mychart-0.1.0.tgz和mychart-0.1.0.tgz.prov。這兩個檔案最終應該上傳到想要的chart庫。
可以使用helm verify
以下方式驗證chart:
$ helm verify mychart-0.1.0.tgz
驗證失敗如下所示樣例:
$ helm verify topchart-0.1.0.tgz Error: sha256 sum does not match for topchart-0.1.0.tgz: "sha256:1939fbf7c1023d2f6b865d137bbb600e0c42061c3235528b1e8c82f4450c12a7" != "sha256:5a391a90de56778dd3274e47d789a2c84e0e106e1a37ef8cfa51fd60ac9e623a"
要在安裝過程中進行驗證,請使用該--verify
標誌。
$ helm install --verify mychart-0.1.0.tgz
如果金鑰keyring(包含與簽名chart關聯的公鑰)不在預設位置,則可能需要--keyring PATH
像helm package
示例中那樣指向金鑰keyring。
如果驗證失敗,在chart被推到Tiller之前中止安裝終止。
使用Keybase.io憑據
該Keybase.io服務可以很容易建立信任鏈的密碼身份。金鑰庫憑證可用於對chart進行簽名。
前提條件:
- 已配置的Keybase.io帳戶
- GnuPG在本地安裝
- keybaseCLI本地安裝
簽署軟體包
第一步是將keybase金鑰匯入到本地GnuPG金鑰keyring中:
$ keybase pgp export -s | gpg --import
這會將Keybase金鑰轉換為OpenPGP格式,然後將其本地匯入到~/.gnupg/secring.gpg
檔案中。
可以通過執行gpg --list-secret-keys
進行仔細檢查。
$ gpg --list-secret-keys /Users/mattbutcher/.gnupg/secring.gpg
-------------------------------------
sec 2048R/1FC18762 2016-07-25
uid technosophos (keybase.io/technosophos) <technosophos@keybase.io>
ssb 2048R/D125E546 2016-07-25
注意,金鑰有一個識別符號字串:
technosophos (keybase.io/technosophos) <technosophos@keybase.io>
這是鑰匙的全名。
接下來,可以使用helm package
打包和簽名chart。--key
確保至少使用該名稱字串的一部分。
$ helm package --sign --key technosophos --keyring ~/.gnupg/secring.gpg mychart
結果,package命令應該生成一個.tgz檔案和一個.tgz.prov 檔案。
驗證軟體包
還可以使用類似的技術來驗證由其他人的Keybase金鑰簽名的chart。假設想驗證簽名的軟體包keybase.io/technosophos。請使用該keybase工具:
$ keybase follow technosophos
$ keybase pgp pull
上面的第一條命令跟蹤使用者technosophos
。接下來keybase pgp pull
,將關注的所有帳戶的OpenPGP金鑰下載到GnuPG金鑰環(~/.gnupg/pubring.gpg1
)中
到此,可以使用helm verify
或帶有--verify
引數的任何命令:
$ helm verify somechart-1.2.3.tgz
可能無法驗證的原因
下面是失敗的常見原因。
- prov檔案丟失或損壞。這表明某些內容配置錯誤或原始維護人員未建立出處檔案。
- 用於簽署檔案的金鑰不在鑰匙keyring中。這表明簽名chart的組織不是已經信任的人員。
- prov檔案的驗證失敗。這表明chart或出處資料有問題。
- prov檔案中的檔案雜湊與壓縮包檔案的雜湊不匹配。這表明壓縮包已被篡改。
- 如果驗證失敗,則有理由懷疑該軟體包有問題。
Provenance檔案
Provenance檔案包含chart的YAML檔案以及幾條驗證資訊。Provenance檔案被設計自動生成。
新增了以下幾個出處資料:
- 包含chart檔案(Chart.yaml)可以讓人員和工具輕鬆檢視chart內容。
- 包括chart包(.tgz檔案)的簽名(SHA256,就像Docker)一樣,可用於驗證chart包的完整性。
- 整個檔案使用PGP使用的演算法進行簽名(參見[ http://keybase.io ],這是一種使加密簽名和驗證變得容易的新方法)。
這樣的組合給了使用者以下保證:
- 包本身沒有被篡改(校驗和包tgz)。
- 已知釋出此包的組織(通過GnuPG / PGP簽名)。
該檔案的格式如下所示:
-----BEGIN PGP SIGNED MESSAGE-----
name: nginx
description: The nginx web server as a replication controller and service pair.
version: 0.5.1
keywords: - https
- http
- web server
- proxy
source: - https://github.com/foo/bar
home: http://nginx.com ...
files:
nginx-0.5.1.tgz: “sha256:9f5270f50fc842cfcb717f817e95178f” -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux)
iEYEARECAAYFAkjilUEACgQkB01zfu119ZnHuQCdGCcg2YxF3XFscJLS4lzHlvte
WkQAmQGHuuoLEJuKhRNo+Wy7mhE7u1YG =eifq
-----END PGP SIGNATURE-----
注意,YAML部分包含兩個文件(由分隔...
)。首先是Chart.yaml。第二個是校驗和,一個檔名到SHA-256摘要的對映(上顯示的值是假的/被截斷的)
簽名塊是一個標準的PGP簽名,它提供了防篡改功能。
Chart庫
Chart庫用作Helm chart的集中場所。
Chart儲存庫必須能夠通過特定的請求通過HTTP為provenance檔案提供服務,並且必須使它們在與chart相同的URI路徑下可用。
例如,如果軟體包的基本URL是https://example.com/charts/mychart-1.2.3.tgz
, provenance檔案(如果存在)必須可以通過https://example.com/charts/mychart-1.2.3.tgz.prov
訪問。
從終端使用者的角度來看,`helm install –verify myrepo/mychart-1.2.3 “應該無需額外的配置或操作即可下載chart和provenance檔案。
確認認證和真實性
在處理信任鏈系統時,能夠確認簽名者的認證很重要。或者,簡單地說,上述系統取決於相信簽名人員的事實。這反過來又意味著你需要信任簽名者的公鑰。
Kubernetes Helm的設計決策之一是Helm專案不會將自己插入信任鏈中作為必要的組分。我們不希望成為所有chart簽名者的“證書頒發機構”。相反,我們強烈支援分散模式,這是我們選擇OpenPGP作為基礎技術的原因之一。所以說到確認認證時,我們在Helm 2.0.0中對這個步驟或多或少未明確定義。
但是,對於那些有興趣使用rpovenance系統的人,我們有一些建議:
- Keybase 平臺提供了可靠資訊的公開集中存放。
- 可以使用Keybase儲存金鑰或獲取其他公鑰。
- Keybase也有很多可用的文件
- 雖然我們還沒有對它進行測試,但Keybase的“安全網站”功能可用於服務Helm chart。
- Kubernetes chart專案 正在設法解決這個管方chart庫official Kubernetes Charts project問題。
- 這裡有一個很長的issue,詳細介紹了當前的想法。
- 基本思想原則是官方的“chart reviewer”用她或他的鑰匙簽名chart,然後將得到的Provence檔案上傳到chart儲存庫。
- 關於
有效簽名金鑰列表可包含在index.yaml儲存庫檔案中
的想法已經有了一些工作進展。
最後,信任鏈是Helm的一個發展特徵,一些社群成員已經提出了將OSI模型的一部分用於簽名。這是Helm團隊的一個開放性調查。如果你有興趣,請參與其中。
本文轉自kubernetes中文社群-Helm chart指南-系列(6)- 出處與完整性驗證
相關文章
- Web頁面子資源完整性校驗詳細指南Web
- SpringBoot 與Shiro 整合系列(三)多Realm驗證和認證策略Spring Boot
- Django高階表單處理與驗證實戰Django
- WebService系列之Axis Https(SSL)證書校驗錯誤處理方法WebHTTP
- Django REST framework API 指南(12):驗證器DjangoRESTFrameworkAPI
- ZBlog關閉驗證碼功能(出現驗證碼出錯請關閉)
- 6. 自定義容器型別元素驗證,類級別驗證(多欄位聯合驗證)型別
- 極驗驗證碼破解與研究
- 驗證碼影像處理(JavaScript 版)JavaScript
- md5sum 和 sha256sum用於 驗證軟體完整性
- PyTorch經驗指南:技巧與陷阱PyTorch
- 6條經過驗證的創業經驗分享創業
- IndexedDB使用與出坑指南Index
- python爬蟲之處理驗證碼Python爬蟲
- Testbench編寫指南(4)自動化驗證方法
- 常見驗證碼的弱點與驗證碼識別
- [系列] Gin框架 - 資料繫結和驗證框架
- 多折交叉驗證有什麼用處
- SpringBoot-表單驗證-統一異常處理-自定義驗證資訊源Spring Boot
- ES6 系列之 defineProperty 與 proxy
- ES6 系列之迭代器與 for of
- thinkphp6後臺新增google登入驗證PHPGo
- MIT xv6 2020系列實驗:Lab6 Copy-on-Write ForkMIT
- ES6系列之非同步處理實戰非同步
- ES6 系列之非同步處理實戰非同步
- 表單驗證自定義格式輸出
- 簡聊 Session 與 Token 身份驗證Session
- js登入與註冊驗證JS
- 頂象驗證碼破解與研究
- Nestjs最佳實踐教程(五):自動驗證,序列化與異常處理JS
- 爬蟲遇到頭疼的驗證碼?教你彈窗處理和驗證碼識別爬蟲
- Spring Boot 參考指南(驗證&傳送電子郵件)Spring Boot
- django-驗證碼/靜態檔案處理Django
- 介面鑑權之sign簽名校驗與JWT驗證JWT
- Spring Security 6中使用PKCE實現身份驗證Spring
- 驗證碼原理及驗證
- 【認證與授權】Spring Security系列之認證流程解析Spring
- MIT xv6 2020系列實驗:Lab1 UtilitiesMIT