apiVersion: apps/v1 kind: Deployment metadata: name: frontend namespace: supply-chain spec: replicas: 1 selector: matchLabels: app: frontend template: metadata: labels: app: frontend spec: containers: - name: frontend image: docker.io/library/busybox@sha256:9532d8c39891ca2ecde4d30d7710e01fb739c87a8b9299685c63704296b16028 command: ["sh", "-c", "sleep 3600"] --- apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicy metadata: name: supply-chain-digest-only spec: failurePolicy: Fail matchConstraints: resourceRules: - apiGroups: [""] apiVersions: ["v1"] operations: ["CREATE", "UPDATE"] resources: ["pods"] validations: - expression: "object.spec.containers.all(c, c.image.startsWith('docker.io/library/') && c.image.contains('@sha256:'))" message: "all container images must use docker.io/library and an immutable sha256 digest" --- apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingAdmissionPolicyBinding metadata: name: supply-chain-digest-only spec: policyName: supply-chain-digest-only validationActions: [Deny] matchResources: namespaceSelector: matchLabels: training.cks/lesson: supply-chain