📐
Verify signatures with Cosign to improve container reliability 📐
こんにちは。Enabling team の山本です。
今回は Container Image の信頼性向上について書きます。
弊社では、この数年で、サービスが増え、機能が増え、Developer が増え、deploy される Container が日々増えています。
気をつけるのは、
- Base Image に何を使っているか?
- Image は、サービスの正式な CI Pipeline で build/scan されたものか?
Supply Chain を Secure に保つことに気を使うようになりました。
TL;DR
- Cosign を使えば、本番サービスにデプロイするイメージを検証して、信頼性を向上させることができます。
Cosign
1.24 からCosign で署名され、Image を検証できるようになるそうです。
署名を検証することにより、Software Supply Chain の Security を向上できます。
今でも、出自がわからない Image を base に build されることはよくあります、、
今回の構成
- Cosign
- Policy Controller(policy-controller)
- Cloud KMS(KMS)
- Google Artifact Registry(GAR)
- Google Kubernetes Engine(GKE):
1.24.8-gke.2000
署名を確認してみる
- 詳しい手順はこちら。
失敗
yamamoto_daisuke@cloudshell:~ (linkerd-sandbox)$ kubectl create deployment nginx \
--image=nginx \
-n test
error: failed to create deployment: admission webhook "policy.sigstore.dev" denied the request: validation failed: failed policy: private-signed-images-cip: spec.template.spec.containers[0].image
index.docker.io/library/nginx@sha256:c54fb26749e49dc2df77c6155e8b5f0f78b781b7f0eadd96ecfabdcdfa5b1ec4 signature key validation failed for authority authority-0 for index.docker.io/library/nginx@sha256:c54fb26749e49dc2df77c6155e8b5f0f78b781b7f0eadd96ecfabdcdfa5b1ec4: no matching signatures:
成功
yamamoto_daisuke@cloudshell:~ (linkerd-sandbox)$ kubectl create deployment nginx \
--image=${REGION}-docker.pkg.dev/${PROJECT_ID}/${REGISTRY_NAME}/nginx@${SHA} \
-n test
deployment.apps/nginx created # Success!!
yamamoto_daisuke@cloudshell:~ (linkerd-sandbox)$
まとめ
署名を検証する方法について書きました。
Software Supply Chain への攻撃が増えている中で、Image の署名検証は重要な要素になってきています。
Cosign に興味がある方は、ぜひ試してみてください。
Discussion