为了防止构建好的容器镜像在从构建环境推送到仓库及拉取到 Kubernetes 集群的过程中被篡改,业界推行利用 Cosign 结合 OIDC(无密钥签署模式 Keyless) 对 OCI 镜像施加密码学签名,并在准入控制器中强校验。
一、Cosign 镜像签名与 K8s Kyverno 验证策略
bash
# 生成临时密钥或使用 OIDC 签署镜像
cosign sign --yes ghcr.io/org/app:v1.0.0yaml
# Kyverno 准入策略拦截未签名镜像运行
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: check-image-signature
spec:
validationFailureAction: Enforce
rules:
- name: verify-signature
match:
resources:
kinds: ["Pod"]
verifyImages:
- imageReferences: ["ghcr.io/org/*"]
attestors:
- entries:
- keys:
publicKeys: |-
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE...
-----END PUBLIC KEY-----