Sofuware Supply Chain Management with Grafeas and Kritis Aysylu Greenberg May 8 2019
Photo via https://www.goodfreephotos.com/
Sofuware Supply Chain Management with Grafeas and Kritis Aysylu - - PowerPoint PPT Presentation
Sofuware Supply Chain Management with Grafeas and Kritis Aysylu Greenberg May 8 2019 Photo via https://www.goodfreephotos.com/ Aysylu Greenberg Aysylu Greenberg - Sr Sofuware Engineer @Google Aysylu Greenberg - Sr Sofuware Engineer
Photo via https://www.goodfreephotos.com/
and Kritis
and Kritis
In This Talk Software Supply Chain Management Kritis Grafeas Kritis & Grafeas 0.1.0
1 2 3 4
In This Talk Software Supply Chain Management Kritis Grafeas Kritis & Grafeas 0.1.0
1 2 3 4
In any given week, we launch over two billion containers.
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
Sofuware Supply Chain with Grafeas & Kritis
Build & Deploy
Sofuware Supply Chain with Grafeas & Kritis
CI/CD pipelines Build & Deploy
Sofuware Supply Chain with Grafeas & Kritis
CI/CD pipelines Build & Deploy Secure build process Automated test, scan, analysis Deploy checks
Sofuware Supply Chain with Grafeas & Kritis
CI/CD pipelines Build & Deploy Secure build process Automated test, scan, analysis Deploy checks Centralized metadata knowledge base
Grafeas backed storage vulnerabilities, build info, etc.
Sofuware Supply Chain with Grafeas & Kritis
CI/CD pipelines Build & Deploy Secure build process Automated test, scan, analysis Deploy checks Centralized metadata knowledge base Kritis Admission controller
Grafeas backed storage vulnerabilities, build info, etc.
Sofuware Supply Chain with Grafeas & Kritis
CI/CD pipelines Build & Deploy Secure build process Automated test, scan, analysis Deploy checks Centralized metadata knowledge base Kritis Admission controller Deploy time policy chokepoint
Enforce policies for severity of vulnerabilities, image location, etc. Grafeas backed storage vulnerabilities, build info, etc.
Sofuware Supply Chain with Grafeas & Kritis
CI/CD pipelines Build & Deploy Secure build process Automated test, scan, analysis Deploy checks Centralized metadata knowledge base Kritis Admission controller Deploy time policy chokepoint
Enforce policies for severity of vulnerabilities, image location, etc.
Production
Grafeas backed storage vulnerabilities, build info, etc.
Sofuware Supply Chain with Grafeas & Kritis
CI/CD pipelines Build & Deploy Secure build process Automated test, scan, analysis Deploy checks
Grafeas backed storage vulnerabilities, build info, etc.
Centralized metadata knowledge base Kritis Admission controller Deploy time policy chokepoint
Enforce policies for severity of vulnerabilities, image location, etc.
Production
In This Talk Software Supply Chain Management Kritis Grafeas Kritis & Grafeas 0.1.0
1 2 3 4
In This Talk Software Supply Chain Management Kritis Grafeas Kritis & Grafeas 0.1.0
1 2 3 4
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
github.com/grafeas/kritis
$ kubectl apply site.yaml
kubectl apply site.yaml
k8s kubectl apply site.yaml
k8s Kritis kubectl apply site.yaml
k8s Kritis kubectl apply site.yaml $ helm install <path>/kritis-charts-0.1.0.tgz
kubectl apply site.yaml k8s
Pod spec
Request
Kritis
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas 4 a) denied 4 a) denied
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas 4 a) denied 4 a) denied Pod
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas 4 a) denied Pod vuln
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas 4 b) admitted 4 b) admitted Pod vuln
$ kubectl scale deployments/site --replicas=4
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas Pod Pod Pod Pod vuln
vuln
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas Pod Pod Pod Pod
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas 4 b) admitted 4 b) admitted Pod vuln
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
vuln
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images vuln
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images attestation
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images attestation Pod
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images attestation Pod
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images attestation Pod
attestations for admitted image
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images attestation Pod
attestations for admitted image Pod Pod
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images attestation Pod
attestations for admitted image Pod Pod
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images attestation Pod
attestations for admitted image Pod Pod Background Cron
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images attestation Pod
attestations for admitted image Pod Pod Background Cron
kubectl apply site.yaml k8s WebHook
Pod spec
Request
Kritis
Policies
ns:prod
Image Security Policy CRD
ns:qa
Image Security Policy CRD
ns:prod
Image Security Policy CRD Image Security Validator
metadata Grafeas vuln 4 b) admitted 4 b) admitted Pod Attestor
Attestation Authority CRD
admitted images attestation Pod
attestations for admitted image Pod Pod Background Cron
Kritis Terminology
○ Retrieve vulnerability data for images ○ Store and retrieve attestations
Kritis Terminology
○ Retrieve vulnerability data for images ○ Store and retrieve attestations
○ Extension of k8s API ○ Used to store enforcement policies as k8s objects
Kritis Terminology
○ Retrieve vulnerability data for images ○ Store and retrieve attestations
○ Extension of k8s API ○ Used to store enforcement policies as k8s objects
○ HTTP callbacks receive admission request: accept/reject to enforce custom admission policies
apiVersion: kritis.grafeas.io/v1beta1 kind: GenericAttestationPolicy metadata: name: my-gap spec: attestationAuthorities:
apiVersion: kritis.grafeas.io/v1beta1 kind: AttestationAuthority metadata: name: my-attestor spec: privateKeySecretName: my-kubernetes-secret publicData: “-----BEGIN PGP PUBLIC KEY BLOCK----- mQENBFvJLhwBCADCiNJAJkFUwYrH=vmny ...
noteReference: v1beta1/projects/my-project
apiVersion: kritis.grafeas.io/v1beta1 kind: ImageSecurityPolicy metadata: name: my-isp spec: imageWhitelist:
packageVulnerabilityRequirements: maximumSeverity: MEDIUM whitelistCVEs:
Open source, built with the community Plugs into the k8s admission controller Ensure vulnerability scanning before deployment Attest images and verify before deployment Apply consistent deploy policy across k8s environments
github.com/grafeas/kritis
kritis-users@googlegroups.com
In This Talk Software Supply Chain Management Kritis Grafeas Kritis & Grafeas 0.1.0
1 2 3 4
In This Talk Software Supply Chain Management Kritis Grafeas Kritis & Grafeas 0.1.0
1 2 3 4
Code Checkin Test & Verifjcation Write code Build Image Deploy to Production QA
github.com/grafeas/grafeas
Grafeas: Terminology
○ e.g. Common Vulnerabilities and Exposures (CVE) as Vulnerability Note
Grafeas: Terminology
○ e.g. Common Vulnerabilities and Exposures (CVE) as Vulnerability Note
○ e.g. CVE presence in an image
Grafeas: Terminology
○ e.g. Common Vulnerabilities and Exposures (CVE) as Vulnerability Note
○ e.g. CVE presence in an image
Grafeas: Terminology
○ e.g. Common Vulnerabilities and Exposures (CVE) as Vulnerability Note
○ e.g. CVE presence in an image
Grafeas: Providers and Consumers
Grafeas: Providers and Consumers
Grafeas: Providers and Consumers
Store vulnerability Notes (CVEs)
Grafeas: Providers and Consumers
Store vulnerability Ocurrences for containers Store vulnerability Notes (CVEs)
Grafeas: Providers and Consumers
Store vulnerability Ocurrences for containers Store vulnerability Notes (CVEs)
Grafeas: Providers and Consumers
Store vulnerability Ocurrences for containers Store vulnerability Notes (CVEs)
Read vulnerability Occurrences for container
Grafeas: Terminology (cont'd)
Grafeas: Terminology (cont'd)
Grafeas: Terminology (cont'd)
Grafeas: Deployment Note
// An artifact that can be deployed in some runtime. message DeploymentNote { // Required. Resource URI for the artifact being deployed. repeated string resource_uri = 1; }
Grafeas: Deployment Occurrence
// The period during which some deployable was active in a runtime. message DeploymentOccurrence { // Identity of the user that triggered this deployment. string user_email = 1; // Required. Beginning of the lifetime of this deployment. google.protobuf.Timestamp deploy_time = 2; // Output only. Resource URI for the artifact being deployed taken from the deployable field with the same name. repeated string resource_uri = 6; ...}
Grafeas: Architecture
Open artifact metadata standard with contributions from the industry Audit and govern your software supply chain Knowledge base for on-premises and cloud clusters API with pluggable storage backends
github.com/grafeas/grafeas
grafeas-users@googlegroups.com grafeas-dev@googlegroups.com @Grafeasio
In This Talk Software Supply Chain Management Kritis Grafeas Kritis & Grafeas 0.1.0
1 2 3 4
In This Talk Software Supply Chain Management Kritis Grafeas Kritis & Grafeas 0.1.0
1 2 3 4
Goals Enable users to staru experimenting with Kritis and Grafeas Move towards hybrid-cloud supporu Gather community feedback
Scope Standalone Kritis on Kubernetes with standalone Grafeas
User Journeys Allow deployment of a container to Kubernetes cluster Block deployment of a unadmitued container to the cluster
○ Helm chart for Grafeas & published image ○ Standalone Grafeas server with Postgres storage backend ○ Basic support for Go client library
○ Helm chart for Grafeas & published image ○ Standalone Grafeas server with Postgres storage backend ○ Basic support for Go client library
○ GenericAttestationPolicy ○ Default admittance fallback policy is well-defined ○ Configurable
Google Groups: {grafeas,kritis}-users, grafeas-dev @grafeasio