|
# kubernetes_hardening Role |
|
|
|
## Structure |
|
|
|
``` |
|
kubernetes_hardening/ |
|
βββ tasks/ |
|
β βββ main.yml |
|
βββ handlers/ |
|
β βββ main.yml |
|
βββ templates/ |
|
β βββ audit-policy.yaml.j2 |
|
β βββ encryption-config.yaml.j2 |
|
βββ vars/ |
|
β βββ main.yml |
|
βββ defaults/ |
|
β βββ main.yml |
|
βββ meta/ |
|
β βββ main.yml |
|
βββ README.md |
|
``` |
|
|
|
--- |
|
|
|
### tasks/main.yml |
|
```yaml |
|
--- |
|
- name: Disable anonymous authentication |
|
lineinfile: |
|
path: /etc/kubernetes/manifests/kube-apiserver.yaml |
|
regexp: '--anonymous-auth=' |
|
line: '--anonymous-auth=false' |
|
|
|
- name: Enable RBAC |
|
lineinfile: |
|
path: /etc/kubernetes/manifests/kube-apiserver.yaml |
|
regexp: '--authorization-mode=' |
|
line: '--authorization-mode=RBAC' |
|
|
|
- name: Set audit policy file |
|
lineinfile: |
|
path: /etc/kubernetes/manifests/kube-apiserver.yaml |
|
regexp: '--audit-policy-file=' |
|
line: "--audit-policy-file={{ audit_policy_path }}" |
|
|
|
- name: Enable audit log file output |
|
lineinfile: |
|
path: /etc/kubernetes/manifests/kube-apiserver.yaml |
|
regexp: '--audit-log-path=' |
|
line: '--audit-log-path=/var/log/kubernetes/audit.log' |
|
|
|
- name: Deploy encryption config |
|
template: |
|
src: encryption-config.yaml.j2 |
|
dest: "{{ encryption_config_path }}" |
|
mode: '0600' |
|
notify: Restart kube-apiserver |
|
|
|
- name: Set encryption provider config |
|
lineinfile: |
|
path: /etc/kubernetes/manifests/kube-apiserver.yaml |
|
regexp: '--encryption-provider-config=' |
|
line: "--encryption-provider-config={{ encryption_config_path }}" |
|
``` |
|
|
|
--- |
|
|
|
### handlers/main.yml |
|
```yaml |
|
--- |
|
- name: Restart kube-apiserver |
|
command: systemctl restart kubelet |
|
``` |
|
|
|
--- |
|
|
|
### templates/audit-policy.yaml.j2 |
|
```yaml |
|
apiVersion: audit.k8s.io/v1 |
|
kind: Policy |
|
rules: |
|
- level: Metadata |
|
resources: |
|
- group: "" |
|
resources: ["secrets"] |
|
- level: RequestResponse |
|
resources: |
|
- group: "" |
|
resources: ["pods", "services", "deployments"] |
|
``` |
|
|
|
--- |
|
|
|
### templates/encryption-config.yaml.j2 |
|
```yaml |
|
apiVersion: apiserver.config.k8s.io/v1 |
|
kind: EncryptionConfiguration |
|
encryption: |
|
providers: |
|
- aescbc: |
|
keys: |
|
- name: key1 |
|
secret: {{ encryption_key | b64encode }} |
|
- identity: {} |
|
resources: |
|
- secrets |
|
``` |
|
|
|
--- |
|
|
|
### vars/main.yml |
|
```yaml |
|
audit_policy_path: /etc/kubernetes/audit-policy.yaml |
|
encryption_config_path: /etc/kubernetes/encryption-config.yaml |
|
encryption_key: "32byteslongbase64keymaterialhere" |
|
``` |
|
|
|
--- |
|
|
|
### defaults/main.yml |
|
```yaml |
|
# Defaults (overridden by vars if needed) |
|
audit_policy_path: /etc/kubernetes/audit-policy.yaml |
|
encryption_config_path: /etc/kubernetes/encryption-config.yaml |
|
encryption_key: "changeme" |
|
``` |
|
|
|
--- |
|
|
|
### meta/main.yml |
|
```yaml |
|
--- |
|
dependency: [] |
|
``` |
|
|
|
--- |
|
|
|
### README.md |
|
```markdown |
|
# Kubernetes Hardening Role |
|
|
|
This Ansible role implements NSA & CISA Kubernetes hardening controls: |
|
- Disables anonymous access |
|
- Enforces RBAC |
|
- Sets audit policy |
|
- Enables encryption of Secrets at rest |
|
|
|
## Usage |
|
```yaml |
|
- hosts: kube_control_plane |
|
roles: |
|
- kubernetes_hardening |
|
``` |
|
``` |