CIS k8s benchmark (1)

Sbae·2025년 1월 16일

CIS

목록 보기
2/4

현재 k8s 자동 프로비저닝 툴을 개발 중입니다.

그게뭔데 씹덕아

시작하며

k8s version : v1.30.7

k8s 자동 프로비저닝을 개발하면서 시간이 없어서 해결하지 못했던 보안 과정을 CIS kubernetes benchmark에 맞춰서 구성하는 과정이다.

간단한 것들도 제외하고 내가 직접 해본것만 작성할 예정이다.

히히 보안싫어

1.2.1 비인증 접근 차단

[root@temp-cp-node-1 ~]# curl -k https://localhost:6443
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
  "reason": "Forbidden",
  "details": {},
  "code": 403
}

[root@temp-cp-node-1 ~]# ps -ef | grep kube-apiserver | grep anonoymous-auth

[root@temp-cp-node-1 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml

## 해당 옵션을 추가한다.
# --anonymous-auth=false

[root@temp-cp-node-1 ~]# curl -k https://localhost:6443
{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "Unauthorized",
  "reason": "Unauthorized",
  "code": 401
}

1.2.9 API server Event 제한

  • etc/kubernetes/admission-config.yaml 생성
kind: AdmissionConfiguration
apiVersion: apiserver.k8s.io/v1alpha1
plugins:
  - name: EventRateLimit
    path: /etc/kubernetes/admission-config-eventratelimit.yaml
  • /etc/kubernetes/admission-config-eventratelimit.yaml 생성
apiVersion: eventratelimit.admission.k8s.io/v1alpha1
kind: Configuration
limits:
  - type: Namespace
    qps: 1048576
    burst: 1048576
    cacheSize: 4096
  - type: User
    qps: 1048576
    burst: 1048576
    cacheSize: 4096
  - type: Server
    qps: 1048576
    burst: 1048576
  • /etc/kubernetes/manifests/kube-apiserver.yaml 수정
  • --enable-admission-plugins=...,EventRateLimit,... 추가
  • admission-control-config-file: /etc/kubernetes/admission-config.yaml 추가

1.2.11 AlwaysPullImages 추가

항상 이미지 pull

  • /etc/kubernetes/manifests/kube-apiserver.yaml 수정
  • --enable-admission-plugins=...,AlwaysPullImages,... 추가

1.2.14 NodeRestriction 추가

Kubelet은 자신이 관리하는 노드의 Node API 객체만 수정할 수 있도록 제한

  • /etc/kubernetes/manifests/kube-apiserver.yaml 수정
  • --enable-admission-plugins=...,NodeRestriction,... 추가

1.2.15 profiling 추가

병목 현상을 감시하고 시스템 성능 문제를 찾기 위해서 사용하는 도구
문제가 없거나 필요하지않다면 비활성화

  • /etc/kubernetes/manifests/kube-apiserver.yaml 수정
  • --profiling=false 추가

1.2.20 request-timeout

API server 요청 타임아웃 제한
기본은 60초

  • /etc/kubernetes/manifests/kube-apiserver.yaml 수정
  • --request-timeout=300s로 변경

1.2.27 etcd 암호화 프로바이더 설정

etcd 보안을 위해 암호화 프로바이더 설정
https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/

  • /etc/kubernetes/secrets_encryption.yaml 생성
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
    - secrets
    providers:
    - secretbox:
        keys:
        - name: ---
          secret: ---
    - identity: {}
  • /etc/kubernetes/manifests/kube-apiserver.yaml 수정
  • --encryption-provider-config=/etc/kubernetes/secrets_encryption.yaml 추가

1.2.29 API server 암호화

알고리즘에 맞춰서 API server 암호화

  • /etc/kubernetes/manifests/kube-apiserver.yaml 수정
  • tls-cipher-suites: 자신이 원하는 알고리즘 추가
profile
끄적이는 일반인

0개의 댓글