Create a new ServiceAccount named backend-sa in the existing namespace default, which has the capability to list the pods inside the namespace default. Create a new Pod named backend-pod in the namespace default, mount the newly created sa backend-sa to the pod, and Verify that the pod is able to list pods.Ensure that the Pod is running.
Answer(s): A
A service account provides an identity for processes that run in a Pod.When you (a human) access the cluster (for example, using kubectl), you are authenticated by the apiserver as a particular User Account (currently this is usually admin, unless your cluster administrator has customized your cluster). Processes in containers inside pods can also contact the apiserver.When they do, they are authenticated as a particular Service Account (for example, default).When you create a pod, if you do not specify a service account, it is automatically assigned the default service account in the same namespace. If you get the raw json or yaml for a pod you have created (for example, kubectl get pods/<podname> -o yaml), you can see the spec.serviceAccountName field has been automatically set. You can access the API from inside a pod using automatically mounted service account credentials, as described in Accessing the Cluster. The API permissions of the service account depend on the authorization plugin and policy in use.In version 1.6+, you can opt out of automounting API credentials for a service account by setting automountServiceAccountToken: false on the service account:apiVersion: v1kind: ServiceAccount metadata:name: build-robot automountServiceAccountToken: false...In version 1.6+, you can also opt out of automounting API credentials for a particular pod:apiVersion: v1kind: Pod metadata:name: my-pod spec:serviceAccountName: build-robot automountServiceAccountToken: false...The pod spec takes precedence over the service account if both specify a automountServiceAccountToken value.
Fix all issues via configuration and restart the affected components to ensure the new setting takes effect.Fix all of the following violations that were found against the API server:-1.Ensure the --authorization-mode argument includes RBAC2.Ensure the --authorization-mode argument includes Node3.Ensure that the --profiling argument is set to false Fix all of the following violations that were found against the Kubelet:-4.Ensure the --anonymous-auth argument is set to false.5.Ensure that the --authorization-mode argument is set to Webhook.6.Fix all of the following violations that were found against the ETCD:-7.Ensure that the --auto-tls argument is not set to true Hint: Take the use of Tool Kube-Bench
API server:Ensure the --authorization-mode argument includes RBAC Turn on Role Based Access Control.Role Based Access Control (RBAC) allows fine-grained control over the operations that different entities can perform on different objects in the cluster. It is recommended to use the RBAC authorization mode.Fix - BuildtimeKubernetes apiVersion: v1kind: Pod metadata:creationTimestamp: null labels:component: kube-apiserver tier: control-plane name: kube-apiserver namespace: kube-system spec:containers:- command:+ - kube-apiserver+ - --authorization-mode=RBAC,Node image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0 livenessProbe:failureThreshold: 8httpGet:host: 127.0.0.1path: /healthz port: 6443scheme: HTTPSinitialDelaySeconds: 15timeoutSeconds: 15name: kube-apiserver-should-pass resources:requests:cpu: 250m volumeMounts:- mountPath: /etc/kubernetes/name: k8s readOnly: true- mountPath: /etc/ssl/certs name: certs- mountPath: /etc/pki name: pki hostNetwork: true volumes:- hostPath:path: /etc/kubernetes name: k8s- hostPath:path: /etc/ssl/certs name: certs- hostPath:path: /etc/pki name: pkiEnsure the --authorization-mode argument includes NodeRemediation: Edit the API server pod specification file /etc/kubernetes/manifests/kube- apiserver.yaml on the master node and set the --authorization-mode parameter to a value that includes Node.--authorization-mode=Node,RBACAudit:/bin/ps -ef | grep kube-apiserver | grep -v grepExpected result:'Node,RBAC' has 'Node'Ensure that the --profiling argument is set to falseRemediation: Edit the API server pod specification file /etc/kubernetes/manifests/kube- apiserver.yaml on the master node and set the below parameter.--profiling=falseAudit:/bin/ps -ef | grep kube-apiserver | grep -v grepExpected result:'false' is equal to 'false'Fix all of the following violations that were found against the Kubelet:- Ensure the --anonymous-auth argument is set to false. Remediation: If using a Kubelet config file, edit the file to set authentication: anonymous: enabled to false. If using executable arguments, edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.--anonymous-auth=falseBased on your system, restart the kubelet service. For example:systemctl daemon-reload systemctl restart kubelet.serviceAudit:/bin/ps -fC kubeletAudit Config:/bin/cat /var/lib/kubelet/config.yamlExpected result:'false' is equal to 'false'2) Ensure that the --authorization-mode argument is set to Webhook.Audit docker inspect kubelet | jq -e '.[0].Args[] | match("--authorization-mode=Webhook").string' Returned Value: --authorization-mode=WebhookFix all of the following violations that were found against the ETCD:- a. Ensure that the --auto-tls argument is not set to true Do not use self-signed certificates for TLS. etcd is a highly-available key value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should not be available to unauthenticated clients. You should enable the client authentication via valid certificates to secure the access to the etcd service.Fix - BuildtimeKubernetes apiVersion: v1kind: Pod metadata:annotations:scheduler.alpha.kubernetes.io/critical-pod: ""creationTimestamp: null labels:component: etcd tier: control-plane name: etcd namespace: kube-system spec:containers:- command:+ - etcd+ - --auto-tls=true image: k8s.gcr.io/etcd-amd64:3.2.18imagePullPolicy: IfNotPresent livenessProbe:exec:command:- /bin/sh- -ec- ETCDCTL_API=3 etcdctl --endpoints=https://[192.168.22.9]:2379 -- cacert=/etc/kubernetes/pki/etcd/ca.crt--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt -- key=/etc/kubernetes/pki/etcd/healthcheck-client.key get foo failureThreshold: 8initialDelaySeconds: 15timeoutSeconds: 15name: etcd-should-fail resources: {}volumeMounts:- mountPath: /var/lib/etcd name: etcd-data- mountPath: /etc/kubernetes/pki/etcd name: etcd-certs hostNetwork: true priorityClassName: system-cluster-critical volumes:- hostPath:path: /var/lib/etcd type: DirectoryOrCreate name: etcd-data- hostPath:path: /etc/kubernetes/pki/etcd type: DirectoryOrCreate name: etcd-certs status: {}
Create a PSP that will prevent the creation of privileged pods in the namespace. Create a new PodSecurityPolicy named prevent-privileged-policy which prevents the creation of privileged pods.Create a new ServiceAccount named psp-sa in the namespace default. Create a new ClusterRole named prevent-role, which uses the newly created Pod Security Policy prevent-privileged-policy.Create a new ClusterRoleBinding named prevent-role-binding, which binds the created ClusterRole prevent-role to the created SA psp-sa.Also, Check the Configuration is working or not by trying to Create a Privileged pod, it should get failed.
Create a PSP that will prevent the creation of privileged pods in the namespace.$ cat clusterrole-use-privileged.yaml---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRole metadata:name: use-privileged-psp rules:- apiGroups: ['policy']resources: ['podsecuritypolicies']verbs: ['use']resourceNames:- default-psp---apiVersion: rbac.authorization.k8s.io/v1kind: RoleBinding metadata:name: privileged-role-bind namespace: psp-test roleRef:apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-privileged-psp subjects:- kind: ServiceAccount name: privileged-sa$ kubectl -n psp-test apply -f clusterrole-use-privileged.yaml After a few moments, the privileged Pod should be created.Create a new PodSecurityPolicy named prevent-privileged-policy which prevents the creation of privileged pods.apiVersion: policy/v1beta1kind: PodSecurityPolicy metadata:name: example spec:privileged: false # Don't allow privileged pods!# The rest fills in some required fields.seLinux:rule: RunAsAny supplementalGroups:rule: RunAsAny runAsUser:rule: RunAsAny fsGroup:rule: RunAsAny volumes:- '*'And create it with kubectl:kubectl-admin create -f example-psp.yamlNow, as the unprivileged user, try to create a simple pod:kubectl-user create -f- <<EOFapiVersion: v1kind: Pod metadata:name: pause spec:containers:- name: pause image: k8s.gcr.io/pauseEOFThe output is similar to this:Error from server (Forbidden): error when creating "STDIN": pods "pause" is forbidden: unable to validate against any pod security policy: []Create a new ServiceAccount named psp-sa in the namespace default.$ cat clusterrole-use-privileged.yaml---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRole metadata:name: use-privileged-psp rules:- apiGroups: ['policy']resources: ['podsecuritypolicies']verbs: ['use']resourceNames:- default-psp---apiVersion: rbac.authorization.k8s.io/v1kind: RoleBinding metadata:name: privileged-role-bind namespace: psp-test roleRef:apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-privileged-psp subjects:- kind: ServiceAccount name: privileged-sa$ kubectl -n psp-test apply -f clusterrole-use-privileged.yaml After a few moments, the privileged Pod should be created.Create a new ClusterRole named prevent-role, which uses the newly created Pod Security Policy prevent-privileged-policy.apiVersion: policy/v1beta1kind: PodSecurityPolicy metadata:name: example spec:privileged: false # Don't allow privileged pods!# The rest fills in some required fields.seLinux:rule: RunAsAny supplementalGroups:rule: RunAsAny runAsUser:rule: RunAsAny fsGroup:rule: RunAsAny volumes:- '*'And create it with kubectl:kubectl-admin create -f example-psp.yamlNow, as the unprivileged user, try to create a simple pod:kubectl-user create -f- <<EOFapiVersion: v1kind: Pod metadata:name: pause spec:containers:- name: pause image: k8s.gcr.io/pauseEOFThe output is similar to this:Error from server (Forbidden): error when creating "STDIN": pods "pause" is forbidden: unable to validate against any pod security policy: []Create a new ClusterRoleBinding named prevent-role-binding, which binds the created ClusterRole prevent-role to the created SA psp-sa.apiVersion: rbac.authorization.k8s.io/v1# This role binding allows "jane" to read pods in the "default" namespace. # You need to already have a Role named "pod-reader" in that namespace.kind: RoleBinding metadata:name: read-pods namespace: default subjects:# You can specify more than one "subject"- kind: User name: jane # "name" is case sensitive apiGroup: rbac.authorization.k8s.io roleRef:# "roleRef" specifies the binding to a Role / ClusterRole kind: Role #this must be Role or ClusterRole name: pod-reader # this must match the name of the Role or ClusterRole you wish to bind to apiGroup: rbac.authorization.k8s.io apiVersion: rbac.authorization.k8s.io/v1kind: Role metadata:namespace: default name: pod-reader rules:- apiGroups: [""] # "" indicates the core API group resources: ["pods"]verbs: ["get", "watch", "list"]
ContextA Role bound to a Pod's ServiceAccount grants overly permissive permissions. Complete the following tasks to reduce the set of permissions.TaskGiven an existing Pod named web-pod running in the namespace security.Edit the existing Role bound to the Pod's ServiceAccount sa-dev-1 to only allow performing watch operations, only on resources of type services.Create a new Role named role-2 in the namespace security, which only allows performing update operations, only on resources of type namespaces.Create a new RoleBinding named role-2-binding binding the newly created Role to the Pod's ServiceAccount.
Enable audit logs in the cluster, To Do so, enable the log backend, and ensure that1. logs are stored at /var/log/kubernetes-logs.txt.2. Log files are retained for 12 days.3. at maximum, a number of 8 old audit logs files are retained.4. set the maximum size before getting rotated to 200MB Edit and extend the basic policy to log:1. namespaces changes at RequestResponse2. Log the request body of secrets changes in the namespace kube-system.3. Log all other resources in core and extensions at the Request level.4. Log "pods/portforward", "services/proxy" at Metadata level.5. Omit the Stage RequestReceived6. All other requests at the Metadata level
Kubernetes auditing provides a security-relevant chronological set of records about a cluster. Kube- apiserver performs auditing. Each request on each stage of its execution generates an event, which is then pre-processed according to a certain policy and written to a backend. The policy determines what's recorded and the backends persist the records. You might want to configure the audit log as part of compliance with the CIS (Center for Internet Security) Kubernetes Benchmark controls.The audit log can be enabled by default using the following configuration in cluster.yml:services:kube-api:audit_log:enabled: trueWhen the audit log is enabled, you should be able to see the default values at /etc/kubernetes/audit- policy.yamlThe log backend writes audit events to a file in JSONlines format. You can configure the log audit backend using the following kube-apiserver flags:--audit-log-path specifies the log file path that log backend uses to write audit events. Not specifying this flag disables log backend. - means standard out --audit-log-maxage defined the maximum number of days to retain old audit log files --audit-log-maxbackup defines the maximum number of audit log files to retain --audit-log-maxsize defines the maximum size in megabytes of the audit log file before it gets rotated If your cluster's control plane runs the kube-apiserver as a Pod, remember to mount the hostPath to the location of the policy file and log file, so that audit records are persisted. For example:--audit-policy-file=/etc/kubernetes/audit-policy.yaml \ --audit-log-path=/var/log/audit.log
Post your Comments and Discuss Linux Foundation CKS exam dumps with other Community members:
Erick Commented on February 14, 2025 Great source of studying and preparation. United Kingdom
Dipu Commented on January 02, 2025 Great Source , i feel really good questions Anonymous
Anonymous Commented on July 16, 2023 Upload cks exam questions Anonymous
Anonymous Commented on July 16, 2023 upload cks exam questions Anonymous
Claudio Commented on March 30, 2023 Enjoyable and visually appealing test engine software with a strange name Xengine. I found it helpful. GERMANY
Our website is free, but we have to fight against AI bots and content theft. We're sorry for the inconvenience caused by these security measures. You can access the rest of the CKS content, but please register or login to continue.