Merge pull request #2023 from rawmind0/master

Updated hardening guide to build RKE clusters CIS compliant
This commit is contained in:
Catherine Luse
2020-01-09 21:31:10 -07:00
committed by GitHub
5 changed files with 3954 additions and 12 deletions
+7 -5
View File
@@ -49,7 +49,8 @@ The Rancher Hardening Guide is based off of controls and best practices found in
- [Hardening Guide for Rancher v2.1.x with Kubernetes 1.11]({{< baseurl >}}/rancher/v2.x/en/security/hardening-2.1/) - [Hardening Guide for Rancher v2.1.x with Kubernetes 1.11]({{< baseurl >}}/rancher/v2.x/en/security/hardening-2.1/)
- [Hardening Guide for Rancher v2.2.x with Kubernetes 1.13]({{< baseurl >}}/rancher/v2.x/en/security/hardening-2.2/) - [Hardening Guide for Rancher v2.2.x with Kubernetes 1.13]({{< baseurl >}}/rancher/v2.x/en/security/hardening-2.2/)
- [Hardening Guide for Rancher v2.3.x with Kubernetes 1.15]({{< baseurl >}}/rancher/v2.x/en/security/hardening-2.3/) - [Hardening Guide for Rancher v2.3.0-v2.3.2 with Kubernetes 1.15]({{< baseurl >}}/rancher/v2.x/en/security/hardening-2.3/)
- [Hardening Guide for Rancher v2.3.3+ with Kubernetes 1.16]({{< baseurl >}}/rancher/v2.x/en/security/hardening-2.3.3/)
### The CIS Benchmark and Self-Assessment ### The CIS Benchmark and Self-Assessment
@@ -57,10 +58,11 @@ The benchmark self-assessment is a companion to the Rancher security hardening g
Because Rancher and RKE install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark don't apply. This guide will walk through the various controls and provide updated example commands to audit compliance in Rancher created clusters. The original benchmark documents can be downloaded from the [CIS website](https://www.cisecurity.org/benchmark/kubernetes/). Because Rancher and RKE install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark don't apply. This guide will walk through the various controls and provide updated example commands to audit compliance in Rancher created clusters. The original benchmark documents can be downloaded from the [CIS website](https://www.cisecurity.org/benchmark/kubernetes/).
- [CIS Kubernetes Benchmark 1.3.0 - Rancher 2.1.x with Kubernetes 1.11]({{< baseurl >}}/rancher/v2.x/en/security/benchmark-2.1/) * [CIS Kubernetes Benchmark 1.3.0 - Rancher 2.1.x with Kubernetes 1.11]({{< baseurl >}}/rancher/v2.x/en/security/benchmark-2.1/)
- [CIS Kubernetes Benchmark 1.4.0 - Rancher 2.2.x with Kubernetes 1.13]({{< baseurl >}}/rancher/v2.x/en/security/benchmark-2.2/#cis-kubernetes-benchmark-1-4-0-rancher-2-2-x-with-kubernetes-1-13/) * [CIS Kubernetes Benchmark 1.4.0 - Rancher 2.2.x with Kubernetes 1.13]({{< baseurl >}}/rancher/v2.x/en/security/benchmark-2.2/#cis-kubernetes-benchmark-1-4-0-rancher-2-2-x-with-kubernetes-1-13/)
- [CIS Kubernetes Benchmark 1.4.1 - Rancher 2.2.x with Kubernetes 1.13]({{< baseurl >}}/rancher/v2.x/en/security/benchmark-2.2/#cis-kubernetes-benchmark-1-4-1-rancher-2-2-x-with-kubernetes-1-13) * [CIS Kubernetes Benchmark 1.4.1 - Rancher 2.2.x with Kubernetes 1.13]({{< baseurl >}}/rancher/v2.x/en/security/benchmark-2.2/#cis-kubernetes-benchmark-1-4-1-rancher-2-2-x-with-kubernetes-1-13)
- [CIS Kubernetes Benchmark 1.4.1 - Rancher 2.3.x with Kubernetes 1.15]({{< baseurl >}}/rancher/v2.x/en/security/benchmark-2.3/#cis-kubernetes-benchmark-1-4-1-rancher-2-3-x-with-kubernetes-1-15) * [CIS Kubernetes Benchmark 1.4.1 - Rancher 2.3.0-2.3.2 with Kubernetes 1.15]({{< baseurl >}}/rancher/v2.x/en/security/benchmark-2.3/#cis-kubernetes-benchmark-1-4-1-rancher-2-3-0-2-3-2-with-kubernetes-1-15)
* [CIS Kubernetes Benchmark 1.4.1 - Rancher 2.3.3+ with Kubernetes 1.16]({{< baseurl >}}/rancher/v2.x/en/security/benchmark-2.3.3/#cis-kubernetes-benchmark-1-4-1-rancher-2-3-3-+-with-kubernetes-1-16)
### Third-party Penetration Test Reports ### Third-party Penetration Test Reports
File diff suppressed because it is too large Load Diff
@@ -1,9 +1,9 @@
--- ---
title: CIS Benchmark Rancher Self-Assessment Guide - Rancher v2.3.x title: CIS Benchmark Rancher Self-Assessment Guide - Rancher v2.3.0-v2.3.2
weight: 103 weight: 103
--- ---
### CIS Kubernetes Benchmark 1.4.1 - Rancher 2.3.x with Kubernetes 1.15 ### CIS Kubernetes Benchmark 1.4.1 - Rancher 2.3.0-2.3.2 with Kubernetes 1.15
[Click here to download a PDF version of this document](https://releases.rancher.com/documents/security/2.3.x/Rancher_Benchmark_Assessment.pdf) [Click here to download a PDF version of this document](https://releases.rancher.com/documents/security/2.3.x/Rancher_Benchmark_Assessment.pdf)
@@ -445,6 +445,7 @@ docker inspect kube-apiserver | jq -e '.[0].Args[] | match("--client-ca-file=.*"
``` ```
**Returned Value:** `--client-ca-file=/etc/kubernetes/ssl/kube-ca.pem` **Returned Value:** `--client-ca-file=/etc/kubernetes/ssl/kube-ca.pem`
**Result:** Pass **Result:** Pass
#### 1.1.30 - Ensure that the API Server only makes use of strong cryptographic ciphers (Not Scored) #### 1.1.30 - Ensure that the API Server only makes use of strong cryptographic ciphers (Not Scored)
@@ -536,6 +537,7 @@ docker inspect kube-apiserver | jq -e '.[0].Args[] | match("--authorization-mode
``` ```
**Returned Value:** `--authorization-mode=Node,RBAC` **Returned Value:** `--authorization-mode=Node,RBAC`
**Result:** Pass **Result:** Pass
#### 1.1.33 - Ensure that the admission control plugin `NodeRestriction` is set (Scored) #### 1.1.33 - Ensure that the admission control plugin `NodeRestriction` is set (Scored)
@@ -673,6 +675,7 @@ docker inspect kube-scheduler | jq -e '.[0].Args[] | match("--profiling=false").
``` ```
**Returned Value:** `--profiling=false` **Returned Value:** `--profiling=false`
**Result:** Pass **Result:** Pass
#### 1.2.2 - Ensure that the `--address` argument is set to 127.0.0.1 (Scored) #### 1.2.2 - Ensure that the `--address` argument is set to 127.0.0.1 (Scored)
@@ -684,6 +687,7 @@ docker inspect kube-scheduler | jq -e '.[0].Args[] | match("--address=127\\.0\\.
``` ```
**Returned Value:** `--address=127.0.0.1` **Returned Value:** `--address=127.0.0.1`
**Result:** Pass **Result:** Pass
### 1.3 - Controller Manager ### 1.3 - Controller Manager
File diff suppressed because it is too large Load Diff
@@ -39,6 +39,8 @@ Items in this profile extend the “Level 1” profile and exhibit one or more o
## 1.1 - Rancher HA Kubernetes cluster host configuration ## 1.1 - Rancher HA Kubernetes cluster host configuration
(See Appendix A. for full ubuntu `cloud-config` example)
### 1.1.1 - Configure default sysctl settings on all hosts ### 1.1.1 - Configure default sysctl settings on all hosts
**Profile Applicability** **Profile Applicability**
@@ -65,6 +67,12 @@ This supports the following control:
sysctl vm.overcommit_memory sysctl vm.overcommit_memory
``` ```
- Verify `vm.panic_on_oom = 0`
``` bash
sysctl vm.panic_on_oom
```
- Verify `kernel.panic = 10` - Verify `kernel.panic = 10`
``` bash ``` bash
@@ -77,17 +85,32 @@ sysctl kernel.panic
sysctl kernel.panic_on_oops sysctl kernel.panic_on_oops
``` ```
- Verify `kernel.keys.root_maxkeys = 1000000`
``` bash
sysctl kernel.keys.root_maxkeys
```
- Verify `kernel.keys.root_maxbytes = 25000000`
``` bash
sysctl kernel.keys.root_maxbytes
```
**Remediation** **Remediation**
- Set the following parameters in `/etc/sysctl.conf` on all nodes: - Set the following parameters in `/etc/sysctl.d/90-kubelet.conf` on all nodes:
``` plain ``` plain
vm.overcommit_memory=1 vm.overcommit_memory=1
vm.panic_on_oom=0
kernel.panic=10 kernel.panic=10
kernel.panic_on_oops=1 kernel.panic_on_oops=1
kernel.keys.root_maxkeys=1000000
kernel.keys.root_maxbytes=25000000
``` ```
- Run `sysctl -p` to enable the settings. - Run `sysctl -p /etc/sysctl.d/90-kubelet.conf` to enable the settings.
### 1.1.2 - Install the encryption provider configuration on all control plane nodes ### 1.1.2 - Install the encryption provider configuration on all control plane nodes
@@ -442,7 +465,7 @@ services:
## 2.1 - Rancher HA Kubernetes Cluster Configuration via RKE ## 2.1 - Rancher HA Kubernetes Cluster Configuration via RKE
(See Appendix A. for full RKE `cluster.yml` example) (See Appendix B. for full RKE `cluster.yml` example)
### 2.1.1 - Configure kubelet options ### 2.1.1 - Configure kubelet options
@@ -1122,7 +1145,97 @@ If a disallowed node driver is active, visit the _Node Drivers_ page under _Glob
--- ---
## Appendix A - Complete RKE `cluster.yml` Example ## Appendix A - Complete ubuntu `cloud-config` Example
`cloud-config` file to automate hardening manual steps on nodes deployment.
```
#cloud-config
bootcmd:
- apt-get update
- apt-get install -y apt-transport-https
apt:
sources:
docker:
source: "deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable"
keyid: 0EBFCD88
packages:
- [docker-ce, '5:19.03.5~3-0~ubuntu-bionic']
- jq
write_files:
# 1.1.1 - Configure default sysctl settings on all hosts
- path: /etc/sysctl.d/90-kubelet.conf
owner: root:root
permissions: '0644'
content: |
vm.overcommit_memory=1
vm.panic_on_oom=0
kernel.panic=10
kernel.panic_on_oops=1
kernel.keys.root_maxkeys=1000000
kernel.keys.root_maxbytes=25000000
# 1.1.2 encription provider
- path: /opt/kubernetes/encryption.yaml
owner: root:root
permissions: '0600'
content: |
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: QRCexFindur3dzS0P/UmHs5xA6sKu58RbtWOQFarfh4=
- identity: {}
# 1.1.3 audit log
- path: /opt/kubernetes/audit.yaml
owner: root:root
permissions: '0600'
content: |
apiVersion: audit.k8s.io/v1beta1
kind: Policy
rules:
- level: Metadata
# 1.1.4 event limit
- path: /opt/kubernetes/admission.yaml
owner: root:root
permissions: '0600'
content: |
apiVersion: apiserver.k8s.io/v1alpha1
kind: AdmissionConfiguration
plugins:
- name: EventRateLimit
path: /opt/kubernetes/event.yaml
- path: /opt/kubernetes/event.yaml
owner: root:root
permissions: '0600'
content: |
apiVersion: eventratelimit.admission.k8s.io/v1alpha1
kind: Configuration
limits:
- type: Server
qps: 5000
burst: 20000
# 1.4.12 etcd user
groups:
- etcd
users:
- default
- name: etcd
gecos: Etcd user
primary_group: etcd
homedir: /var/lib/etcd
# 1.4.11 etcd data dir
runcmd:
- chmod 0700 /var/lib/etcd
- usermod -G docker -a ubuntu
- sysctl -p /etc/sysctl.d/90-kubelet.conf
```
## Appendix B - Complete RKE `cluster.yml` Example
``` yaml ``` yaml
nodes: nodes:
@@ -1315,7 +1428,7 @@ addons: |
name: system:authenticated name: system:authenticated
``` ```
## Appendix B - Complete RKE Template Example ## Appendix C - Complete RKE Template Example
``` yaml ``` yaml
# #