copyright | lastupdated | keywords | subcollection | ||
---|---|---|---|---|---|
|
2021-04-01 |
kubernetes, iks, containers |
containers |
{:DomainName: data-hd-keyref="APPDomain"} {:DomainName: data-hd-keyref="DomainName"} {:android: data-hd-operatingsystem="android"} {:api: .ph data-hd-interface='api'} {:apikey: data-credential-placeholder='apikey'} {:app_key: data-hd-keyref="app_key"} {:app_name: data-hd-keyref="app_name"} {:app_secret: data-hd-keyref="app_secret"} {:app_url: data-hd-keyref="app_url"} {:authenticated-content: .authenticated-content} {:beta: .beta} {:c#: data-hd-programlang="c#"} {:cli: .ph data-hd-interface='cli'} {:codeblock: .codeblock} {:curl: .ph data-hd-programlang='curl'} {:deprecated: .deprecated} {:dotnet-standard: .ph data-hd-programlang='dotnet-standard'} {:download: .download} {:external: target="_blank" .external} {:faq: data-hd-content-type='faq'} {:fuzzybunny: .ph data-hd-programlang='fuzzybunny'} {:generic: data-hd-operatingsystem="generic"} {:generic: data-hd-programlang="generic"} {:gif: data-image-type='gif'} {:go: .ph data-hd-programlang='go'} {:help: data-hd-content-type='help'} {:hide-dashboard: .hide-dashboard} {:hide-in-docs: .hide-in-docs} {:important: .important} {:ios: data-hd-operatingsystem="ios"} {:java: .ph data-hd-programlang='java'} {:java: data-hd-programlang="java"} {:javascript: .ph data-hd-programlang='javascript'} {:javascript: data-hd-programlang="javascript"} {:new_window: target="_blank"} {:note .note} {:note: .note} {:objectc data-hd-programlang="objectc"} {:org_name: data-hd-keyref="org_name"} {:php: data-hd-programlang="php"} {:pre: .pre} {:preview: .preview} {:python: .ph data-hd-programlang='python'} {:python: data-hd-programlang="python"} {:route: data-hd-keyref="route"} {:row-headers: .row-headers} {:ruby: .ph data-hd-programlang='ruby'} {:ruby: data-hd-programlang="ruby"} {:runtime: architecture="runtime"} {:runtimeIcon: .runtimeIcon} {:runtimeIconList: .runtimeIconList} {:runtimeLink: .runtimeLink} {:runtimeTitle: .runtimeTitle} {:screen: .screen} {:script: data-hd-video='script'} {:service: architecture="service"} {:service_instance_name: data-hd-keyref="service_instance_name"} {:service_name: data-hd-keyref="service_name"} {:shortdesc: .shortdesc} {:space_name: data-hd-keyref="space_name"} {:step: data-tutorial-type='step'} {:subsection: outputclass="subsection"} {:support: data-reuse='support'} {:swift: .ph data-hd-programlang='swift'} {:swift: data-hd-programlang="swift"} {:table: .aria-labeledby="caption"} {:term: .term} {:tip: .tip} {:tooling-url: data-tooling-url-placeholder='tooling-url'} {:troubleshoot: data-hd-content-type='troubleshoot'} {:tsCauses: .tsCauses} {:tsResolve: .tsResolve} {:tsSymptoms: .tsSymptoms} {:tutorial: data-hd-content-type='tutorial'} {:ui: .ph data-hd-interface='ui'} {:unity: .ph data-hd-programlang='unity'} {:url: data-credential-placeholder='url'} {:user_ID: data-hd-keyref="user_ID"} {:vbnet: .ph data-hd-programlang='vb.net'} {:video: .video}
{: #cis-benchmark}
The Center for Internet Security (CIS) publishes the CIS Kubernetes Benchmark{: external} as a framework of specific steps to configure Kubernetes more securely and with standards that are commensurate to various industry regulations. {: shortdesc}
When a new Kubernetes version is released, IBM engineers compare the default configuration of a cluster that runs that Kubernetes version against the benchmark and publishes the results in this documentation. You can review how specific versions of your {{site.data.keyword.containerlong}} clusters meet the CIS Kubernetes Benchmark.
{: #cis-benchmark-use}
As a security administrator or auditor, you might want to compare your company's internal standards and external regulatory requirements with the CIS Kubernetes Benchmark. The benchmark recommendations are provided by the Center for Internet Security, not by IBM. IBM might not configure default settings in a way that meets every recommendation, but documents whether the recommendation is met to help you in your review. For example, you might use the benchmark in an audit to confirm that basic security measures are in place, and to identify areas where you might enhance your security. {: shortdesc}
What does the benchmark cover?
The benchmark covers recommendations for master components, etcd, control plane configurations, worker nodes, and policies such as for users, network, and pod security.
What do the benchmark recommendations mean?
The benchmark recommendations have scoring, levels, result status, and responsibilities as follows.
- Scoring
- Scored: The overall benchmark score increases or decreases depending on whether or not the recommendation is met.
- Not scored: The overall benchmark score is not impacted, whether or not the recommendation is met.
- Levels
- Level 1: Practical security measures that can be configured without inhibiting the service.
- Level 2: More in-depth security measures that might reduce the performance or functionality of a service.
- Result
- Pass: The service complies with the benchmark recommendation.
- Fail: The service does not comply with the benchmark recommendation by default. Refer to the remediation section for an explanation and possible actions that you can take to comply with the benchmark recommendation.
- Responsibility
- IBM: IBM is responsible for configuring the setting that the benchmark recommends.
- Shared: You and IBM share responsibility for configuring the setting that the benchmark recommends.
What parts of the benchmark am I responsible for?
Because {{site.data.keyword.containerlong_notm}} is a managed offering, IBM already configures many security settings for you. For example, IBM manages and automatically applies updates to your cluster master. For your worker nodes, IBM provides security and version updates, but you must apply the updates. You are also responsible for your workload applications and data. For more information, see Your responsibilities while using {{site.data.keyword.containerlong_notm}}.
What if some part of the service fails to comply with a recommendation?
First, check the explanation of the failure for any remediation steps.
Then, determine whether the failure is acceptable according to your security requirements. For example, some recommendations might be more in-depth configuration requirements than your particular processes or standards require. Also, some recommendations are not scored, and do not impact the overall benchmark score.
Next, decide whether the component falls within your responsibility. If so, you might need to change how you configure that component. For example, you might configure pod security policies for all your app deployments. For components that are not directly within your responsibility, assess whether you can use another {{site.data.keyword.cloud_notm}} service to meet the recommendation.
What else can I do to increase the security and compliance of my cluster?
See Security for {{site.data.keyword.containerlong_notm}}.
{: #cis-worker-test}
To review the results of the CIS Kubernetes benchmark for Section 4: Worker node security configuration, you can run the test yourself. Because you own the worker nodes and are partially responsible for their compliance, you might make configuration changes that you want to validate on your own. {: shortdesc}
Before you begin: Log in to your account. If applicable, target the appropriate resource group. Set the context for your cluster.
-
Create a namespace for the resources to run the benchmark.
kubectl create ns ibm-kube-bench-test
{: pre}
-
Create a configmap with the
config
andnode
configuration files from the kube-samples{: external} GitHub repository.- Download the the
config
andnode
configuration files into a local directory that is calledibm
. You can also clone the repository and navigate into theibm
directory.config
file{: external}node
file{: external}
- Create the configmap by using the
--from-file
flag to specify theibm
directory where your downloaded the configuration files.{: pre}kubectl create cm kube-bench-node -n ibm-kube-bench-test --from-file ibm
- Download the the
-
Create a job to run the benchmark test based on the configurations that you previously created.
kubectl apply -n ibm-kube-bench-test -f https://raw.githubusercontent.com/IBM-Cloud/kube-samples/master/cis-kube-benchmark/cis-1.5/ibm/job-node.yaml
{: pre}
-
Check that the job successfully completed.
kubectl get pods -n ibm-kube-bench-test -l job-name=kube-bench-node
{: pre}
Example output:
NAME READY STATUS RESTARTS AGE kube-bench-node-hlvhc 0/1 Completed 0 23s
{: screen}
-
Review the CIS Kubernetes benchmark results for your worker nodes by checking the pod logs.
kubectl logs -n ibm-kube-bench-test -l job-name=kube-bench-node --tail=-1
{: pre}
Example output:
== Summary == 20 checks PASS 2 checks FAIL 1 checks WARN 0 checks INFO
{: screen}
-
Optional: When you are done reviewing results, delete the resources that you created.
kubectl delete ns ibm-kube-bench-test
{: pre}
{: #cis-benchmark-15}
Review how {{site.data.keyword.containerlong_notm}} complies with the version 1.5 CIS Kubernetes benchmark for clusters that run Kubernetes versions 1.18 - 1.20. For help understanding the benchmark, see Using the benchmark. {: shortdesc}
- Section 1: Master node security configuration
- Section 2: Etcd node configuration
- Section 3: Control plane configuration
- Section 4: Worker node security configuration
- Section 5: Kubernetes policies
- Explanation and remediation
{: #cis-benchmark-15-1}
Review the benchmark results for the master node security configuration subsections. {: shortdesc}
- Section 1.1: Master node configuration files
- Section 1.2: API server
- Section 1.3: Controller manager
- Section 1.4: Scheduler
{: #cis-benchmark-15-1-1}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
1.1.1 | Ensure that the API server pod specification file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
1.1.2 | Ensure that the API server pod specification file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
1.1.3 | Ensure that the controller manager pod specification file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
1.1.4 | Ensure that the controller manager pod specification file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
1.1.5 | Ensure that the scheduler pod specification file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
1.1.6 | Ensure that the scheduler pod specification file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
1.1.7 | Ensure that the etcd pod specification file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
1.1.8 | Ensure that the etcd pod specification file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
1.1.9 | Ensure that the Container Network Interface file permissions are set to 644 or more restrictive. |
Not Scored | 1 | Pass | IBM |
1.1.10 | Ensure that the Container Network Interface file ownership is set to root:root . |
Not Scored | 1 | Pass | IBM |
1.1.11 | Ensure that the etcd data directory permissions are set to 700 or more restrictive. |
Scored | 1 | Pass | IBM |
1.1.12 | Ensure that the etcd data directory ownership is set to etcd:etcd . |
Scored | 1 | Pass | IBM |
1.1.13 | Ensure that the admin.conf file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
1.1.14 | Ensure that the admin.conf file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
1.1.15 | Ensure that the scheduler.conf file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
1.1.16 | Ensure that the scheduler.conf file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
1.1.17 | Ensure that the controller-manager.conf file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
1.1.18 | Ensure that the controller-manager.conf file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
1.1.19 | Ensure that the Kubernetes PKI directory and file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
1.1.20 | Ensure that the Kubernetes PKI certificate file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
1.1.21 | Ensure that the Kubernetes PKI key file permissions are set to 600 . |
Scored | 1 | Pass | IBM |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 1.1 Master node configuration files benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-1-2}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
1.2.1 | Ensure that the --anonymous-auth argument is set to false . |
Not Scored | 1 | Fail | IBM |
1.2.2 | Ensure that the --basic-auth-file argument is not set. |
Scored | 1 | Pass | IBM |
1.2.3 | Ensure that the --token-auth-file parameter is not set. |
Scored | 1 | Pass | IBM |
1.2.4 | Ensure that the --kubelet-https argument is set to true . |
Scored | 1 | Pass | IBM |
1.2.5 | Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate. |
Scored | 1 | Pass | IBM |
1.2.6 | Ensure that the --kubelet-certificate-authority argument is set as appropriate. |
Scored | 1 | Pass | IBM |
1.2.7 | Ensure that the --authorization-mode argument is not set to AlwaysAllow . |
Scored | 1 | Pass | IBM |
1.2.8 | Ensure that the --authorization-mode argument includes Node . |
Scored | 1 | Pass | IBM |
1.2.9 | Ensure that the --authorization-mode argument includes RBAC . |
Scored | 1 | Pass | IBM |
1.2.10 | Ensure that the admission control plugin EventRateLimit is set. |
Not Scored | 1 | Fail | IBM |
1.2.11 | Ensure that the admission control plugin AlwaysAdmit is not set. |
Scored | 1 | Pass | IBM |
1.2.12 | Ensure that the admission control plugin AlwaysPullImages is set. |
Not Scored | 1 | Fail | IBM |
1.2.13 | Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used. |
Not Scored | 1 | Pass | IBM |
1.2.14 | Ensure that the admission control plugin ServiceAccount is set. |
Scored | 1 | Pass | IBM |
1.2.15 | Ensure that the admission control plugin NamespaceLifecycle is set. |
Scored | 1 | Pass | IBM |
1.2.16 | Ensure that the admission control plugin PodSecurityPolicy is set. |
Scored | 1 | Pass | IBM |
1.2.17 | Ensure that the admission control plugin NodeRestriction is set. |
Scored | 1 | Pass | IBM |
1.2.18 | Ensure that the --insecure-bind-address argument is not set. |
Scored | 1 | Pass | IBM |
1.2.19 | Ensure that the --insecure-port argument is set to 0 . |
Scored | 1 | Pass | IBM |
1.2.20 | Ensure that the --secure-port argument is not set to 0 . |
Scored | 1 | Pass | IBM |
1.2.21 | Ensure that the --profiling argument is set to false . |
Scored | 1 | Fail | IBM |
1.2.22 | Ensure that the --audit-log-path argument is set. |
Scored | 1 | Fail | Shared |
1.2.23 | Ensure that the --audit-log-maxage argument is set to 30 or as appropriate. |
Scored | 1 | Fail | Shared |
1.2.24 | Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate. |
Scored | 1 | Fail | Shared |
1.2.25 | Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate. |
Scored | 1 | Fail | Shared |
1.2.26 | Ensure that the --request-timeout argument is set as appropriate. |
Scored | 1 | Pass | IBM |
1.2.27 | Ensure that the --service-account-lookup argument is set to true . |
Scored | 1 | Pass | IBM |
1.2.28 | Ensure that the --service-account-key-file argument is set as appropriate. |
Scored | 1 | Pass | IBM |
1.2.29 | Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate. |
Scored | 1 | Pass | IBM |
1.2.30 | Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate. |
Scored | 1 | Pass | IBM |
1.2.31 | Ensure that the --client-ca-file argument is set as appropriate. |
Scored | 1 | Pass | IBM |
1.2.32 | Ensure that the --etcd-cafile argument is set as appropriate. |
Scored | 1 | Pass | IBM |
1.2.33 | Ensure that the --encryption-provider-config argument is set as appropriate. |
Scored | 1 | Fail | Shared |
1.2.34 | Ensure that encryption providers are appropriately configured. | Scored | 1 | Fail | Shared |
1.2.35 | Ensure that the API Server only makes use of Strong Cryptographic Ciphers. | Not Scored | 1 | Pass | IBM |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 1.2 API server benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-1-3}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
1.3.1 | Ensure that the --terminated-pod-gc-threshold argument is set as appropriate. |
Scored | 1 | Pass | IBM |
1.3.2 | Ensure that the --profiling argument is set to false . |
Scored | 1 | Pass | IBM |
1.3.3 | Ensure that the --use-service-account-credentials argument is set to true . |
Scored | 1 | Pass | IBM |
1.3.4 | Ensure that the --service-account-private-key-file argument is set as appropriate. |
Scored | 1 | Pass | IBM |
1.3.5 | Ensure that the --root-ca-file argument is set as appropriate. |
Scored | 1 | Pass | IBM |
1.3.6 | Ensure that the RotateKubeletServerCertificate argument is set to true . |
Scored | 2 | Fail | IBM |
1.3.7 | Ensure that the --bind-address argument is set to 127.0.0.1 . |
Scored | 1 | Pass | IBM |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 1.3 Controller manager benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-1-4}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
1.4.1 | Ensure that the --profiling argument is set to false . |
Scored | 1 | Pass | IBM |
1.4.2 | Ensure that the --bind-address argument is set to 127.0.0.1 . |
Scored | 1 | Pass | IBM |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 1.4 Scheduler benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-2}
Review the benchmark results for the etcd node configurations. {: shortdesc}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
2.1 | Ensure that the --cert-file and --key-file arguments are set as appropriate. |
Scored | 1 | Pass | IBM |
2.2 | Ensure that the --client-cert-auth argument is set to true . |
Scored | 1 | Pass | IBM |
2.3 | Ensure that the --auto-tls argument is not set to true . |
Scored | 1 | Pass | IBM |
2.4 | Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate. |
Scored | 1 | Pass | IBM |
2.5 | Ensure that the --peer-client-cert-auth argument is set to true . |
Scored | 1 | Pass | IBM |
2.6 | Ensure that the --peer-auto-tls argument is not set to true . |
Scored | 1 | Pass | IBM |
2.7 | Ensure that a unique certificate authority is used for etcd. | Not Scored | 2 | Pass | IBM |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 2 Etcd node configuration benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-3}
Review the benchmark results for the control plane configuration subsections. {: shortdesc}
{: #cis-benchmark-15-3-1}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
3.1.1 | Client certificate authentication should not be used for users. | Not Scored | 2 | Pass | Shared |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 3.1 Authentication and authorization benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-3-2}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
3.2.1 | Ensure that a minimal audit policy is created. | Scored | 1 | Fail | Shared |
3.2.2 | Ensure that the audit policy covers key security concerns. | Not Scored | 2 | Fail | Shared |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 3.2 Logging benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-4}
Review the benchmark results for the worker node security configuration subsections. If you want to generate results for your own worker nodes, see Running the worker node CIS Kubernetes benchmark. {: shortdesc}
{: #cis-benchmark-15-4-1}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
4.1.1 | Ensure that the kubelet service file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
4.1.2 | Ensure that the kubelet service file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
4.1.3 | Ensure that the proxy kubeconfig file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
4.1.4 | Ensure that the proxy kubeconfig file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
4.1.5 | Ensure that the kubelet.conf file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
4.1.6 | Ensure that the kubelet.conf file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
4.1.7 | Ensure that the certificate authorities file permissions are set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
4.1.8 | Ensure that the client certificate authorities file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
4.1.9 | Ensure that the kubelet configuration file has permissions set to 644 or more restrictive. |
Scored | 1 | Pass | IBM |
4.1.10 | Ensure that the kubelet configuration file ownership is set to root:root . |
Scored | 1 | Pass | IBM |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 4.1 Worker node configuration files benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-4-2}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
4.2.1 | Ensure that the --anonymous-auth argument is set to false . |
Scored | 1 | Pass | IBM |
4.2.2 | Ensure that the --authorization-mode argument is not set to AlwaysAllow . |
Scored | 1 | Pass | IBM |
4.2.3 | Ensure that the --client-ca-file argument is set as appropriate. |
Scored | 1 | Pass | IBM |
4.2.4 | Ensure that the --read-only-port argument is set to 0 . |
Scored | 1 | Pass | IBM |
4.2.5 | Ensure that the --streaming-connection-idle-timeout argument is not set to 0 . |
Scored | 1 | Pass | IBM |
4.2.6 | Ensure that the --protect-kernel-defaults argument is set to true . |
Scored | 1 | Fail | IBM |
4.2.7 | Ensure that the --make-iptables-util-chains argument is set to true . |
Scored | 1 | Pass | IBM |
4.2.8 | Ensure that the --hostname-override argument is not set. |
Not Scored | 1 | Fail | IBM |
4.2.9 | Ensure that the --event-qps argument is set to 0 or a level which ensures appropriate event capture. |
Not Scored | 2 | Pass | IBM |
4.2.10 | Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate. |
Scored | 1 | Pass | IBM |
4.2.11 | Ensure that the --rotate-certificates argument is not set to false. |
Scored | 1 | Pass | IBM |
4.2.12 | Ensure that the RotateKubeletServerCertificate argument is set to true. |
Scored | 1 | Fail | IBM |
4.2.13 | Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers. | Not Scored | 1 | Pass | IBM |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 4.2 Kubelet benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-5}
Review the benchmark results for the Kubernetes policies subsections. {: shortdesc}
- Section 5.1: RBAC and service accounts
- Section 5.2: Pod security policies
- Section 5.3: Network policies and CNI
- Section 5.4: Secrets management
- Section 5.5: Extensible admission control
- Section 5.6: General policies
{: #cis-benchmark-15-5-1}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
5.1.1 | Ensure that the cluster-admin role is only used where required. |
Not Scored | 1 | Pass | Shared |
5.1.2 | Minimize access to secrets. | Not Scored | 1 | Fail | Shared |
5.1.3 | Minimize wildcard use in Roles and ClusterRoles . |
Not Scored | 1 | Fail | Shared |
5.1.4 | Minimize access to create pods. | Not Scored | 1 | Pass | Shared |
5.1.5 | Ensure that default service accounts are not actively used. | Scored | 1 | Fail | Shared |
5.1.6 | Ensure that Service Account Tokens are only mounted where necessary. | Not Scored | 1 | Fail | Shared |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 5.1 RBAC and service accounts benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-5-2}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
5.2.1 | Minimize the admission of privileged containers. | Not Scored | 1 | Pass | Shared |
5.2.2 | Minimize the admission of containers wishing to share the host process ID namespace. | Scored | 1 | Pass | Shared |
5.2.3 | Minimize the admission of containers wishing to share the host IPC namespace. | Scored | 1 | Pass | Shared |
5.2.4 | Minimize the admission of containers wishing to share the host network namespace. | Scored | 1 | Pass | Shared |
5.2.5 | Minimize the admission of containers with allowPrivilegeEscalation . |
Scored | 1 | Pass | Shared |
5.2.6 | Minimize the admission of root containers. | Not Scored | 2 | Pass | Shared |
5.2.7 | Minimize the admission of containers with the NET_RAW capability. |
Not Scored | 1 | Pass | Shared |
5.2.8 | Minimize the admission of containers with added capabilities. | Not Scored | 1 | Pass | Shared |
5.2.9 | Minimize the admission of containers with capabilities assigned. | Not Scored | 2 | Pass | Shared |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 5.2 Pod security policies benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-5-3}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
5.3.1 | Ensure that the CNI in use supports Network Policies. | Not Scored | 1 | Pass | IBM |
5.3.2 | Ensure that all Namespaces have Network Policies defined. | Scored | 2 | Fail | Shared |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 5.3 Network policies and CNI benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-5-4}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
5.4.1 | Prefer using secrets as files over secrets as environment variables. | Not Scored | 1 | Pass | Shared |
5.4.2 | Consider external secret storage. | Not Scored | 2 | Fail | Shared |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 5.4 Secrets management benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-5-5}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
5.5.1 | Configure Image Provenance using ImagePolicyWebhook admission controller. |
Not Scored | 2 | Fail | Shared |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 5.5 Extensible admission control benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-5-6}
Section # | Recommendation | Scoring | Level | Result | Responsibility |
---|---|---|---|---|---|
5.6.1 | Create administrative boundaries between resources using namespaces. | Not Scored | 1 | Pass | Shared |
5.6.2 | Ensure that the seccomp profile is set to docker/default in your pod definitions. |
Not Scored | 2 | Fail | Shared |
5.6.3 | Apply Security Context to Your Pods and Containers. | Not Scored | 2 | Fail | Shared |
5.6.4 | The default namespace should not be used. | Scored | 2 | Fail | Shared |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column is the benchmark recommendation. The third column is the scoring of the recommendation, either scored or not scored. The fourth column is the level of the recommendation, either 1 for basic or 2 for more advanced and performance-impacting. The fifth column contains the result of whether the service passes or fails the recommendation. The sixth column designates the responsibility of passing the recommendation, either IBM or shared between IBM and you."} | |||||
{: caption="Section 5.6 General policies benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |
{: #cis-benchmark-15-remediation}
Review the following explanations and possible remediation actions that you can take to address recommendations that are not met in the default configuration for {{site.data.keyword.containerlong_notm}} version 1.18 clusters. {: shortdesc}
Section # | Description |
---|---|
1.2.1 | Your cluster uses RBAC to control access to the cluster, but allows anonymous discovery, which is considered reasonable per CIS Kubernetes Benchmark{: external}. |
1.2.10 | {{site.data.keyword.containershort}} does not enable the EventRateLimit {: external} admission controller because the admission controller is a Kubernetes alpha feature. |
1.2.12 | {{site.data.keyword.containershort}} does not enable the AlwaysPullImages {: external} admission controller because this setting overrides the imagePullPolicy of a container and might impact performance. |
1.2.21 | {{site.data.keyword.containershort}} enables profiling for cluster administrator troubleshooting purposes. |
1.2.22 | You can optionally enable Kubernetes API server auditing. |
1.2.23 | You can optionally enable Kubernetes API server auditing. |
1.2.24 | You can optionally enable Kubernetes API server auditing. |
1.2.25 | You can optionally enable Kubernetes API server auditing. |
1.2.33 | You can optionally enable a Kubernetes Key Management Service (KMS) provider. |
1.2.34 | You can optionally enable a Kubernetes Key Management Service (KMS) provider. |
1.3.6 | {{site.data.keyword.containershort}} rotates certificates on every worker node reload or update that you choose to perform. |
3.2.1 | You can optionally enable Kubernetes API server auditing. |
3.2.2 | You can optionally enable Kubernetes API server auditing. |
4.2.6 | {{site.data.keyword.containershort}} does not protect kernel defaults so that you can optionally tune kernel parameters. |
4.2.8 | {{site.data.keyword.containershort}} ensures that the hostname matches the name that is issued by the infrastructure provider. |
4.2.11 | {{site.data.keyword.containershort}} rotates certificates on every worker node reload or update that you choose to perform. |
4.2.12 | {{site.data.keyword.containershort}} rotates certificates on every worker node reload or update that you choose to perform. |
5.1.2 | {{site.data.keyword.containershort}} deploys some system components that might have their Kubernetes secret access further restricted. |
5.1.3 | {{site.data.keyword.containershort}} deploys some system components that might have their Kubernetes resource access further restricted. |
5.1.5 | {{site.data.keyword.containershort}} does not set automountServiceAccountToken: false for each default service account. |
5.1.6 | {{site.data.keyword.containershort}} deploys some system components that could set automountServiceAccountToken: false . |
5.2.1 | You can optionally configure pod security policies. |
5.2.2 | You can optionally configure pod security policies. |
5.2.3 | You can optionally configure pod security policies. |
5.2.4 | You can optionally configure pod security policies. |
5.2.5 | You can optionally configure pod security policies. |
5.2.6 | You can optionally configure pod security policies. |
5.2.7 | You can optionally configure pod security policies. |
5.2.8 | You can optionally configure pod security policies. |
5.2.9 | You can optionally configure pod security policies. |
5.3.2 | {{site.data.keyword.containershort}} has a set of default Calico and Kubernetes network policies defined, and you can optionally add your own network policies. |
5.4.2 | You can optionally enable a Kubernetes Key Management Service (KMS) provider. |
5.5.1 | You can optionally enable enforcing image security by using a project such as Portieris. |
5.6.2 | {{site.data.keyword.containershort}} does not annotate all pods with seccomp profiles{: external}. |
5.6.3 | {{site.data.keyword.containershort}} deploys some system components that do not set a pod or container securityContext . |
5.6.4 | {{site.data.keyword.containershort}} deploys some Kubernetes resources to the default namespace. |
{: summary="The rows are read from left to right. The first column is the section number for the benchmark recommendation. The second column contains the description of why the benchmark recommendation is not met and possible remediation actions."} | |
{: caption="Explanation and remediation for benchmark results for clusters that run Kubernetes 1.18" caption-side="top"} |