supply-chain-security.pdf kubernetes suppy chain

akdenizerdem 25 views 51 slides Jun 09, 2024
Slide 1
Slide 1 of 51
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51

About This Presentation

kubernetes


Slide Content

Copyright © 2021 KodeKloudwww.kodekloud.com
www.kodekloud.com
cks.kodekloud.com

Copyright © 2021 KodeKloudwww.kodekloud.com
Disclaimer
THE INFORMATION FOUND ON THE WEBSITE, E-LEARNING PLATFORM AND
WITHIN THE ONLINE COURSES ARE FOR INFORMATIONAL PURPOSES
ONLY.KODEKLOUD WILL NOT BE HELD RESPONSIBLE FOR ANY DAMAGES
THAT MAY BE INCURRED BY YOU AS A RESULT OF YOUR USE OF SUCH
INFORMATION. ALL INFORMATION AND CONTENT ON THE WEBSITE, E-
LEARNING PLATFORM AND ONLINE COURSE IS COPYRIGHTED, AND MAY NOT
BE REPUBLISHED, COPIED, SOLD OR POSTED ANYWHERE ONLINE OR IN PRINT.
KODEKLOUD RESERVES THE RIGHT TO TAKE THE NECESSARY LEGAL ACTION
TO PREVENT YOU FROM (RE)-PUBLISHING, COPYING, SELLING, POSTING OR
PRINTING ANY COPYRIGHTED INFORMATION AND CONTENT AVAILABLE ON
THE WEBSITE, E-LEARNING PLATFORM AND ONLINE COURSE.
For the full terms & conditions visit terms.kodekloud.com
For questions write to [email protected]

Copyright © 2021 KodeKloudwww.kodekloud.com
Notice
•This presentation is to refer to course contents only.
•Some of the slides are meant to be animated. So may not be displayed correctly.
•Do not copy and paste command, code or YAML files from this file as it may not be in the
right format and may contain hidden characters
•For code refer to the solutions in the lab or the Git repository associated with this course or
official Kubernetes documentation pages.
•Some of the code in this deck maybe hidden for brevity
https://github.com/kodekloudhub/certified-kubernetes-security-specialist-cks-course

Copyright © 2021 KodeKloudwww.kodekloud.com
4
Minimize Base
Image Footprint

Copyright © 2021 KodeKloudwww.kodekloud.com
Base vs Parent Image
Dockerfile–My Custom Webapp
FROMhttpd
COPYindex.htmlhtdocs/index.html
My Custom WebApp
httpd(Parent)
Parent

Copyright © 2021 KodeKloudwww.kodekloud.com
Base vs Parent Image
FROMhttpd
COPYindex.htmlhtdocs/index.html
Parent
Dockerfile-httpd
FROMdebian:buster-slim
ENVHTTPD_PREFIX /usr/local/apache2
ENVPATH $HTTPD_PREFIX/bin:$PATH
WORKDIR$HTTPD_PREFIX
<content trimmed>
debian
My Custom WebApp
httpd(Parent)
Dockerfile–My Custom Webapp

Copyright © 2021 KodeKloudwww.kodekloud.com
Base vs Parent Image
FROMhttpd
COPYindex.htmlhtdocs/index.html
Parent
FROMdebian:buster-slim
ENVHTTPD_PREFIX /usr/local/apache2
ENVPATH $HTTPD_PREFIX/bin:$PATH
WORKDIR$HTTPD_PREFIX
<content trimmed>
Dockerfile-debian:buster-slim
FROMscratch
ADDrootfs.tar.xz/
CMD["bash"]
Base
Dockerfile-httpd
scratch
(Base)debian
My Custom WebApp
httpd(Parent)
Dockerfile–My Custom Webapp

Copyright © 2021 KodeKloudwww.kodekloud.com
Modular

Copyright © 2021 KodeKloudwww.kodekloud.com
Modular

Copyright © 2021 KodeKloudwww.kodekloud.com
Persist State

Copyright © 2021 KodeKloudwww.kodekloud.com
Persist State

Copyright © 2021 KodeKloudwww.kodekloud.com
Choosing a base image
Dockerfile–My Custom Webapp
FROM??????
COPYindex.htmlhtdocs/index.html

Copyright © 2021 KodeKloudwww.kodekloud.com
Authenticity

Copyright © 2021 KodeKloudwww.kodekloud.com
Up-to-date

Copyright © 2021 KodeKloudwww.kodekloud.com
Slim/Minimal Images
1.Create slim/minimal images
2.Find an official minimal image that exists
3.Only install necessary packages
•Remove Shells/Package Managers/Tools
4.Maintain different images for different
environments:
•Development –debug tools
•Production -lean
5.Use multi-stage builds to create lean
production ready images.

Copyright © 2021 KodeKloudwww.kodekloud.com
DistrolessDocker Images
https://github.com/GoogleContainerTools/distroless
Contains:
•Application
•Runtime Dependencies
Does not contain:
•Package Managers
•Shells
•Network Tools
•Tex
•Other unwanted programs

Copyright © 2021 KodeKloudwww.kodekloud.com
Vulnerability Scanning
httpd (debian10.8)
===================
Total: 124 (UNKNOWN: 0, LOW: 88, MEDIUM: 9, HIGH: 25, CRITICAL: 2)
trivyimage httpd
httpd:alpine(alpine 3.12.4)
============================
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
trivyimage httpd:alpine

Copyright © 2021 KodeKloudwww.kodekloud.com
Hands-on Labs
cks.kodekloud.com

Copyright © 2021 KodeKloudwww.kodekloud.com
www.kodekloud.com

Copyright © 2021 KodeKloudwww.kodekloud.com
20
Whitelist Allowed
Registries

Copyright © 2021 KodeKloudwww.kodekloud.com
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
containers:
-name: sample-app
image: some-registry.io/a-very-vulnerable-image

Copyright © 2021 KodeKloudwww.kodekloud.com
Admission Controllers
KubectlAuthenticationAuthorizationCreate Pod
Admission
Controllers
AlwaysPullImages
DefaultStorageClass
EventRateLimit
ImagePolicyWebhook
MutatingAdmission
Webhook
ValidatingAdmission
Webhook
Admission
Webhook
Server

Copyright © 2021 KodeKloudwww.kodekloud.com
Admission Controllers
KubectlAuthenticationAuthorizationCreate Pod
Admission
Controllers
AlwaysPullImages
DefaultStorageClass
EventRateLimit
ImagePolicyWebhook
MutatingAdmission
Webhook
ValidatingAdmission
Webhook
package kubernetes.admission
deny[msg] {
input.request.kind.kind== "Pod"
image := input.request.object.spec.containers[_].image
startswith(image, ”internal-registry.io/")
msg:= sprintf("image not from trusted registry")
}
kubernetes.rego

Copyright © 2021 KodeKloudwww.kodekloud.com
Admission Controllers
KubectlAuthenticationAuthorizationCreate Pod
Admission
Controllers
AlwaysPullImages
DefaultStorageClass
EventRateLimit
ImagePolicyWebhook
MutatingAdmission
Webhook
ValidatingAdmission
Webhook
Admission
Webhook
Server

Copyright © 2021 KodeKloudwww.kodekloud.com
Admission Configuration
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
-name: ImagePolicyWebhook
configuration:
imagePolicy:
kubeConfigFile: <path-to-kubeconfig-file>
allowTTL: 50
denyTTL: 50
retryBackoff: 500
defaultAllow: true
Admission
Webhook
Server
/etc/kubernetes/admission-config.yaml

Copyright © 2021 KodeKloudwww.kodekloud.com
clusters:
-name: name-of-remote-imagepolicy-service
cluster:
certificate-authority: /path/to/ca.pem
server: https://images.example.com/policy
users:
-name: name-of-api-server
user:
client-certificate: /path/to/cert.pem
client-key: /path/to/key.pem
Admission Configuration
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
-name: ImagePolicyWebhook
configuration:
imagePolicy:
kubeConfigFile: <path-to-kubeconfig-file>
allowTTL: 50
denyTTL: 50
retryBackoff: 500
defaultAllow: true
/etc/kubernetes/admission-config.yaml<path-to-kubeconfig-file>

Copyright © 2021 KodeKloudwww.kodekloud.com
Enable Admission Controllers
ExecStart=/usr/local/bin/kube-apiserver\\
--advertise-address=${INTERNAL_IP} \\
--allow-privileged=true \\
--apiserver-count=3 \\
--authorization-mode=Node,RBAC\\
--bind-address=0.0.0.0 \\
--enable-swagger-ui=true \\
--etcd-servers=https://127.0.0.1:2379 \\
--event-ttl=1h \\
--runtime-config=api/all \\
--service-cluster-ip-range=10.32.0.0/24 \\
--service-node-port-range=30000-32767 \\
--v=2
kube-apiserver.service
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
name: kube-apiserver
namespace: kube-system
spec:
containers:
-command:
-kube-apiserver
---authorization-mode=Node,RBAC
---advertise-address=172.17.0.107
---allow-privileged=true
---enable-bootstrap-token-auth=true
image: k8s.gcr.io/kube-apiserver-amd64:v1.11.3
name: kube-apiserver
/etc/kubernetes/manifests/kube-apiserver.yaml
--enable-admission-plugins=ImagePolicyWebhook---enable-admission-plugins=ImagePolicyWebhook--admission-control-config-file=/etc/kubernetes/admission-config.yaml---admission-control-config-file=/etc/kubernetes/admission-config.yaml

Copyright © 2021 KodeKloudwww.kodekloud.com
References
https://kubernetes.io/docs/reference/access-authn-authz/admission-
controllers/#imagepolicywebhook

Copyright © 2021 KodeKloudwww.kodekloud.com
Hands-on Labs
cks.kodekloud.com

Copyright © 2021 KodeKloudwww.kodekloud.com
www.kodekloud.com

Copyright © 2021 KodeKloudwww.kodekloud.com
31
Use static
analysis of user
workloads

Copyright © 2021 KodeKloudwww.kodekloud.com
KubectlAuthenticationAuthorizationCreate PodAdmission Controllers
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
securityContext:
privileged: True
runAsUser: 0
containers:
-name: ubuntu
image: ubuntu
command: ["sleep", "3600"]
capabilities:
add: [”CAP_SYS_BOOT"]
volumes:
-name: data-volume
hostPath:
path: /data
type: Directory

Copyright © 2021 KodeKloudwww.kodekloud.com
Static Analysis of User Workloads
KubectlAuthenticationAuthorization
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
securityContext:
privileged: True
runAsUser: 0
containers:
-name: ubuntu
image: ubuntu
command: ["sleep", "3600"]
capabilities:
add: [”CAP_SYS_BOOT"]
volumes:
-name: data-volume
hostPath:
path: /data
type: Directory
Create FileAnalyze files

Copyright © 2021 KodeKloudwww.kodekloud.com
kubesec
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
securityContext:
privileged: True
runAsUser: 0
containers:
-name: ubuntu
image: ubuntu
command: ["sleep", "3600"]
capabilities:
add: [”CAP_SYS_BOOT"]
volumes:
-name: data-volume
hostPath:
path: /data
type: Directory
https://kubesec.io/

Copyright © 2021 KodeKloudwww.kodekloud.com
kubesec
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
securityContext:
privileged: True
runAsUser: 0
containers:
-name: ubuntu
image: ubuntu
command: ["sleep", "3600"]
capabilities:
add: [”CAP_SYS_BOOT"]
volumes:
-name: data-volume
hostPath:
path: /data
type: Directory

Copyright © 2021 KodeKloudwww.kodekloud.com
kubesec
kubesecscan pod.yaml
curl -sSXPOST --data-binary @”pod.yaml" https://v2.kubesec.io/scan
kubesechttp 8080 &

Copyright © 2021 KodeKloudwww.kodekloud.com
Hands-on Labs
cks.kodekloud.com

Copyright © 2021 KodeKloudwww.kodekloud.com
www.kodekloud.com

Copyright © 2021 KodeKloudwww.kodekloud.com
39
Scan Images for
Known
Vulnerabilities

Copyright © 2021 KodeKloudwww.kodekloud.com
Common Vulnerabilities and Exposures (CVE)
https://cve.mitre.org/

Copyright © 2021 KodeKloudwww.kodekloud.com
Common Vulnerabilities and Exposures (CVE)
View Payroll of All Employees

Copyright © 2021 KodeKloudwww.kodekloud.com
CVE Severity Scores
012345678910

Copyright © 2021 KodeKloudwww.kodekloud.com
CVE Severity Scores

Copyright © 2021 KodeKloudwww.kodekloud.com
CVE Scanner

Copyright © 2021 KodeKloudwww.kodekloud.com
Trivy
https://aquasecurity.github.io/trivy/latest/installation/

Copyright © 2021 KodeKloudwww.kodekloud.com
Trivy
trivyimage nginx:1.18.0

Copyright © 2021 KodeKloudwww.kodekloud.com
Trivy
trivyimage --severity CRITICALnginx:1.18.0
trivyimage --severity CRITICAL,HIGHnginx:1.18.0
trivyimage --ignore-unfixed nginx:1.18.0
docker save nginx:1.18.0 > nginx.tar
trivyimage --input archive.tar

Copyright © 2021 KodeKloudwww.kodekloud.com
Trivy
nginx:1.18.0nginx:1.18.0-alpine

Copyright © 2021 KodeKloudwww.kodekloud.com
Best Practices
•Continuously rescan images
•Kubernetes Admission Controllers to scan images
•Have your own repository with pre-scanned images ready to go
•Integrate scanning into your CI/CD pipeline

Copyright © 2021 KodeKloudwww.kodekloud.com
Hands-on Labs
cks.kodekloud.com

Copyright © 2021 KodeKloudwww.kodekloud.com
www.kodekloud.com
Tags