iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Cloud Native

我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容系列 第 6

[Day6] 1-5. Verify platform binaries before deploying

  • 分享至 

  • xImage
  •  

今天主要會分別討論 checksum 以及 Cosign

當我們在下載一個 binary 或者 image 的時候要如何去確認該檔案是否完整,在下載的時候是不是有缺少內容呢?
對此我們可以透過 checksum 的方式確認該檔案。
那我怎麼知道這個檔案是否真的是官方提供的,並不是被有心人在在我下載時偷改了下載的連結呢?
所以我們可以用 Cosign 來確認來源是否可靠。

Checksum

範例

這邊我們以 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

介紹

Cosign 主要是提供來源的驗證,確保下載下來的檔案的來源是可以被信任的

使用先決條件

  • cosign
  • curl
  • jq

安裝

這邊以 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 安裝


上一篇
[Day5] 1-4. Protect node metadata and endpoints
下一篇
[Day7] 2-1. Use Role Based Access Controls to minimize exposure
系列文
我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言