Helm來(lái)源和完整性
Helm有一個(gè)來(lái)源工具幫助chart用戶檢測(cè)包的完整性和來(lái)源。使用基于PKI,GnuPG及流行包管理器的行業(yè)標(biāo)準(zhǔn)工具,Helm可以生成和檢測(cè)簽名文件。
概述
完整性是通過(guò)比較chart的出處記錄來(lái)建立的。出處記錄存儲(chǔ)在出處文件,和打包好的chart放在一起。比如,如果有個(gè)名為myapp-1.2.3.tgz的chart,則它的出處文件是myapp-1.2.3.tgz.prov。
出處文件會(huì)在打包時(shí)生成(helm package --sign...),并可以通過(guò)多重命名檢查,尤其是helm install --verify。
工作流
這部分描述有效使用源數(shù)據(jù)的潛在工作流。
前置條件:
1、合法的二進(jìn)制格式(非ASCII包裹)的PGP密鑰對(duì)
2、helm命令行工具
3、GnuPG命令行工具(可選)
4、Keybase命令行工具(可選)
注意:如果您的PGP私鑰有密碼,系統(tǒng)將提示您為所有支持 --sign選項(xiàng)的命令輸入密碼。
創(chuàng)建新的chart與之前一樣:
$ helm create mychart
$ helm create mychart
Creating mychart
一旦準(zhǔn)備好打包了,使用helm package命令時(shí)添加 --sign 參數(shù),并且指定一已知的字符串key和包含相對(duì)應(yīng)私鑰的密鑰環(huán):
$ helm package --sign --key 'John Smith' --keyring path/to/keyring.secret mychart
$ helm package --sign --key 'John Smith' --keyring path/to/keyring.secret mychart
注意:--key參數(shù)的值必須是對(duì)應(yīng)key的uid(在gpg --list-keys輸出列表中)的字符串,比如名字或者email。指紋碼不能使用。
提示:針對(duì)GunPG用戶,您的私鑰的keyring在~/.gnupg/secring.gpg。您可以使用gpg --list-secret-keys列出您需要的key。
警告:GnuPG v2版在默認(rèn)位置~/.gnupg/pubring.kbx使用了新格式kbx存儲(chǔ)私鑰的keyring。使用以下命令將您的keyring轉(zhuǎn)換到傳統(tǒng)的gpg格式:
$ gpg --export >~/.gnupg/pubring.gpg
$ gpg --export-secret-keys >~/.gnupg/secring.gpg
$ gpg --export >~/.gnupg/pubring.gpg
$ gpg --export-secret-keys >~/.gnupg/secring.gpg
此時(shí),您應(yīng)該同時(shí)看到了mychart-0.1.0.tgz和mychart-0.1.0.tgz.prov。這兩個(gè)文件最終都會(huì)被上傳到對(duì)應(yīng)的chart倉(cāng)庫(kù)。
您可以使用helm verify驗(yàn)證chart:
$ helm verify mychart-0.1.0.tgz
$ helm verify mychart-0.1.0.tgz
失敗的驗(yàn)證如下:
$ helm verify topchart-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"
在安裝時(shí)同時(shí)驗(yàn)證,使用--verify參數(shù)。
$ helm install --generate-name --verify mychart-0.1.0.tgz
$ helm install --generate-name --verify mychart-0.1.0.tgz
如果keyring包含的與簽名chart關(guān)聯(lián)的公鑰不在默認(rèn)位置,需要在打包helm package時(shí)使用--keyring PATH指定keyring的path。
如果驗(yàn)證失敗,chart的安裝會(huì)在渲染前終止。
使用Keybase.io證書(shū)
Keybase.io 服務(wù)使得建立加密身份的信任鏈變得很容易。
Keybase
前置條件:
1、配置Keybase.io賬戶
2、本地已安裝GnuPG
3、本地已安裝keybase CLI
對(duì)包簽名
第一步是將keybase密鑰導(dǎo)入本地的GnuPG的密鑰環(huán)keyring:
$ keybase pgp export -s | gpg --import
這會(huì)將您的Keybasee密鑰轉(zhuǎn)成OpenPGP格式,然后將其導(dǎo)入本地的~/.gnupg/secring.gpg文件
可以運(yùn)行g(shù)pg --list-secret-keys 進(jìn)行雙重檢測(cè)。
$ 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
注意您的密鑰會(huì)有一個(gè)表示字符串:
technosophos (keybase.io/technosophos) <technosophos@keybase.io>
這個(gè)是密鑰的全名。
然后,可以使用helm package打包和簽名。確保在--key參數(shù)中使用名稱的一部分。
$ helm package --sign --key technosophos --keyring ~/.gnupg/secring.gpg mychart
$ helm package --sign --key technosophos --keyring ~/.gnupg/secring.gpg mychart
package命令會(huì)生成一個(gè).tgz文件和一個(gè).tgz.prov文件。
驗(yàn)證包
您可以使用類(lèi)似的方法驗(yàn)證被其他Keybase密鑰簽名的chart。
比如您要驗(yàn)證使用keybase.io/technosophos簽名的包,可使用keybase工具:
$ keybase follow technosophos
$ keybase gpg pull
上面第一個(gè)命令追蹤了用戶technosophos。然后使用keybase gpg pull下載您追蹤的所有賬戶的OpenPGP密鑰,并把他們放置在GnuPG密鑰環(huán)中(~/.gnupg/pubring.gpg)。
此時(shí),就可以使用helm verify 或者其他帶--verify的命令:
$ helm verify somechart-1.2.3.tgz
chart無(wú)法驗(yàn)證的原因
一般失敗的原因有這些:
1、The .prov file is missiong or corrupt.說(shuō)明有配置錯(cuò)誤或者原有維護(hù)者沒(méi)有創(chuàng)建源文件。
2、The key used to sign the file is not in your keyring.說(shuō)明這個(gè)簽名chart的密鑰不是您已經(jīng)注明為信任的密鑰。
3、The verification of the .prov file failed.這說(shuō)明chart或者源數(shù)據(jù)有錯(cuò)誤。
4、The file hashes in the provenance file do not match the hash of the archive file.表明chart包已經(jīng)被篡改。
如果驗(yàn)證失敗,就有理由不信任該包。
來(lái)源文件
來(lái)源文件包含chart的YAML文件加上一些驗(yàn)證信息。來(lái)源文件會(huì)自動(dòng)生成。
會(huì)添加下列源數(shù)據(jù):
1、chart文件(Chart.yaml)讓人和工具都可以看到chart中的內(nèi)容。
2、chart包(.tgz文件)簽名(SHA256,就像Docker),可以用來(lái)驗(yàn)證額chart包的完整性。
3、使用了OpenGPG算法簽名所有內(nèi)容(查看 Keybase.io ,一種使簽名和驗(yàn)證更簡(jiǎn)單的新式方法)。
Keybase
這些內(nèi)容的結(jié)合給予了用戶以下保證:
1、包本身不會(huì)被篡改(.tgz包的校驗(yàn)和)。
2、發(fā)布包的人是可知的(通過(guò)GnuPG/PGP簽名)。
文件格式類(lèi)似這樣:
Hash: SHA512
apiVersion: v2
appVersion: "1.16.0"
description: Sample chart
name: mychart
type: application
version: 0.1.0
...
files:
mychart-0.1.0.tgz: sha256:d31d2f08b885ec696c37c7f7ef106709aaf5e8575b6d3dc5d52112ed29a9cb92
-----BEGIN PGP SIGNATURE-----
wsBcBAEBCgAQBQJdy0ReCRCEO7+YH8GHYgAAfhUIADx3pHHLLINv0MFkiEYpX/Kd
nvHFBNps7hXqSocsg0a9Fi1LRAc3OpVh3knjPfHNGOy8+xOdhbqpdnB+5ty8YopI
mYMWp6cP/Mwpkt7/gP1ecWFMevicbaFH5AmJCBihBaKJE4R1IX49/wTIaLKiWkv2
cR64bmZruQPSW83UTNULtdD7kuTZXeAdTMjAK0NECsCz9/eK5AFggP4CDf7r2zNi
hZsNrzloIlBZlGGns6mUOTO42J/+JojnOLIhI3Psd0HBD2bTlsm/rSfty4yZUs7D
qtgooNdohoyGSzR5oapd7fEvauRQswJxOA0m0V+u9/eyLR0+JcYB8Udi1prnWf8=
=aHfz
-----END PGP SIGNATURE-----
注意YAML部分包含了兩個(gè)文檔,(用...\n分隔)。第一個(gè)文檔是Chart.yaml內(nèi)容。第二個(gè)是文件內(nèi)容打包時(shí)文件名的SHA256校驗(yàn)和。
簽名是標(biāo)準(zhǔn)的PGP,用于 防篡改。
David Ross -- PGP -- Digital Signatures
Chart倉(cāng)庫(kù)
Chart倉(cāng)庫(kù)是一個(gè)Helm chart的集合。
Chart倉(cāng)庫(kù)必須要保證通過(guò)指定的http請(qǐng)求提供源文件,同時(shí)要確保使用同樣URL路徑的chart是可用的。
比如,如果包的基礎(chǔ)URL是https://example.com/charts/mychart-1.2.3.tgz,則若是存在的源文件地址https://example.com/charts/mychart-1.2.3.tgz.prov必需能訪問(wèn)。
從終端用戶的角度來(lái)看,helm install --verify myrepo/mychart-1.2.3應(yīng)該同時(shí)下載chart和源文件,且不需要額外的用戶配置或操作。
建立權(quán)威和真實(shí)性
當(dāng)處理信任鏈系統(tǒng)時(shí),建立簽名者的權(quán)威變得非常重要。或者簡(jiǎn)單來(lái)說(shuō),上面的系統(tǒng)實(shí)際上取決于您信任的簽名chart的人。也就意味著您需要信任簽名者的公鑰。
Helm的一個(gè)設(shè)計(jì)決策是Helm項(xiàng)目不會(huì)將自己作為必須的一方插入到信任鏈中。我們不想針對(duì)所有的chart簽名者成為“證書(shū)頒發(fā)機(jī)構(gòu)”,而是更喜歡分布式模型,這是我們選擇OpenPGP作為我們的基礎(chǔ)技術(shù)的原因之一。所以在建立權(quán)威的問(wèn)題上,在chart 2中或多或少?zèng)]有定義這一步(會(huì)在接下來(lái)的Helm 3中決定)。
當(dāng)然,對(duì)于使用源系統(tǒng)感興趣的人,我們有一些提示和建議:
Keybase平臺(tái)為可靠信息提供了一個(gè)公共的中心化的倉(cāng)庫(kù)。
Keybase
1、您可以使用Keybase存儲(chǔ)您的key或者獲取其他人的公鑰。
2、Keybase還有非常好的文檔
3、我們還沒(méi)有測(cè)試的時(shí)候,Keybas的“安全站點(diǎn)”特性可以提供Helm chart。
4、基礎(chǔ)想法是一個(gè)官方“chart審核人”使用他(她)的私鑰簽名,然后上傳源文件到chart倉(cāng)庫(kù)。
5、該想法的一些做法是在倉(cāng)庫(kù)的index.yaml文件中列出一些合法的密鑰。
————————————
僅用于本人學(xué)習(xí)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-800090.html
來(lái)源:Helm | Docs文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-800090.html
到了這里,關(guān)于【筆記】Helm-3 主題-5 Helm來(lái)源和完整性的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!