今天主要會分別討論 checksum 以及 Cosign
當我們在下載一個 binary 或者 image 的時候要如何去確認該檔案是否完整,在下載的時候是不是有缺少內容呢?
對此我們可以透過 checksum 的方式確認該檔案。
那我怎麼知道這個檔案是否真的是官方提供的,並不是被有心人在在我下載時偷改了下載的連結呢?
所以我們可以用 Cosign 來確認來源是否可靠。
這邊我們以 linux x86-64 中 kubectl 下載作為舉例
# 下載設定檔
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 下載 驗證 binary檔案
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
# 透過 sha256sum 查看檔案完整性,內容需與 kubectl.sha256 裡面相同
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
Cosign 主要是提供來源的驗證,確保下載下來的檔案的來源是可以被信任的
這邊以 rpm 安裝作為示範
# binary
LATEST_VERSION=$(curl https://api.github.com/repos/sigstore/cosign/releases/latest | grep tag_name | cut -d : -f2 | tr -d "v\", ")
curl -O -L "https://github.com/sigstore/cosign/releases/latest/download/cosign-${LATEST_VERSION}-1.x86_64.rpm"
sudo rpm -ivh cosign-${LATEST_VERSION}-1.x86_64.rpm
取得 kubectl 的 cert 以及 sig
URL=https://dl.k8s.io/release/v1.34.0/bin/linux/amd64
BINARY=kubectl
FILES=(
"$BINARY"
"$BINARY.sig"
"$BINARY.cert"
)
for FILE in "${FILES[@]}"; do
curl -sSfL --retry 3 --retry-delay 3 "$URL/$FILE" -o "$FILE"
done
透過 google oidc 驗證來源是否正確
cosign verify-blob "$BINARY" \
--signature "$BINARY".sig \
--certificate "$BINARY".cert \
--certificate-identity krel-staging@k8s-releng-prod.iam.gserviceaccount.com \
--certificate-oidc-issuer https://accounts.google.com
驗證正確的結果
setting TUF refresh period to 24h0m0s
Verified OK
參考資料
Kubernetes Download
kubelet Download
Verify Signed Kubernetes Artifacts
Cosign 安裝