2.4. CIS 벤치마크
어떨 때 보는가
- 보안 점검 결과를 보고해야 할 때
- 클러스터 설정이 보안 기준에 맞는지 확인할 때
- 감사 대응 자료가 필요할 때
CIS 란 무엇인가
CIS(Center for Internet Security)는 미국의 비영리 단체로, 시스템을 안전하게 설정하는 기준을 만들어 공개합니다. 운영체제, 데이터베이스, 클라우드 서비스 등 100여 종의 기준이 있고 Kubernetes 도 그중 하나입니다.
이 기준은 특정 제품 회사가 만든 것이 아니라 여러 조직의 보안 전문가가 함께 합의한 것 이라, 많은 나라의 보안 감사에서 근거로 인정됩니다.
CIS 벤치마크란
Kubernetes 용 CIS 기준을 CIS Kubernetes Benchmark 라고 합니다. 항목마다 세 가지가 적혀 있습니다.
| 구성 | 내용 |
|---|---|
| 무엇을 확인하는가 | 예: "API 서버가 익명 접근을 허용하지 않는지" |
| 왜 그래야 하는가 | 익명 접근을 허용하면 인증 없이 클러스터를 조작할 수 있습니다 |
| 어떻게 고치는가 | 설정 파일의 어느 항목을 무엇으로 바꾸는지 |
COP 는 이 기준에 맞는지 자동으로 점검 하고 결과를 화면에 보여 줍니다. 사람이 항목을 하나씩 확인할 필요가 없습니다.
왜 필요한가
Kubernetes 는 기본 설정이 편의 위주 입니다. 처음 설치했을 때 잘 돌아가게 하려고 여러 제약이 풀려 있습니다. 운영 환경에서는 이 제약을 다시 적용해야 합니다.
문제는 다시 적용해야 할 항목이 100개가 넘고, 어디를 어떻게 바꿔야 하는지 알기 어렵다는 것입니다. CIS 벤치마크는 그 목록과 방법을 제공합니다.
| 이 화면이 없으면 | 있으면 |
|---|---|
| 무엇을 점검해야 할지 모릅니다 | 항목이 정해져 있습니다 |
| 노드마다 직접 접속해 파일을 봐야 합니다 | 화면에서 한 번에 봅니다 |
| 감사 대응 자료를 손으로 만듭니다 | 결과를 그대로 씁니다 |
COP 는 설치할 때 이미 적용합니다
직접 설정을 바꿀 일은 없습니다. OPENMARU COP 은 설치 과정에서 CIS 프로파일을 켠 상태로 클러스터를 만들고, 벤치마크 항목에서 실패가 나지 않도록 미리 조치합니다.
| 구성 항목 | 적용 내용 |
|---|---|
| CIS 프로파일 | 클러스터를 CIS 기준 설정으로 기동합니다. 커널 값, 파일 권한, 구성요소 설정이 함께 조정됩니다 |
| 파드 보안 | Pod Security Admission 이 적용되어 과한 권한을 요구하는 파드가 거부됩니다 |
| 감사 로그 | 감사 정책을 설정해 API 서버 호출 기록을 남깁니다 |
| 서비스 어카운트 | 설치 시점에 있던 네임스페이스의 기본 계정에서 토큰 자동 마운트를 끕니다 (아래 주의) |
파드 보안이 실제로 걸립니다. 권한을 넘게 요구하는 파드는 만들어지지 않고 오류가 납니다. 직접 만든 파드가 거부되면 이 설정 때문일 수 있습니다(3.1 장).
그래서 이 화면의 결과는 처음부터 대부분 통과 상태 입니다. 확인해야 할 것은 통과 여부보다 시간이 지나면서 달라진 것이 없는지 입니다.
| 다시 확인해야 하는 때 | 이유 |
|---|---|
| 노드를 추가한 뒤 | 새 노드에 프로파일이 적용됐는지 |
| 네임스페이스를 새로 만든 뒤 | 아래 주의 참고 |
| 설정을 손으로 바꾼 뒤 | 조치가 풀렸을 수 있습니다 |
| 클러스터를 업그레이드한 뒤 | 기본값이 바뀌었을 수 있습니다 |
| 정기 감사 전 | 보고 자료로 씁니다 |
새로 만든 네임스페이스도 자동으로 처리됩니다
서비스 어카운트 토큰 자동 마운트 차단은 새로 만드는 네임스페이스에도 적용됩니다. 따로 하실 일이 없습니다.
| 언제 만든 네임스페이스 | 어떻게 처리되나 |
|---|---|
| 설치할 때 만들어진 것 | 설치 과정에서 처리됩니다 |
| 제품이 나중에 만드는 것 | 만드는 즉시 처리됩니다. 파드가 올라오기 전이라 토큰이 붙지 않습니다 |
| 직접 만드신 것 | 10분 안에 자동으로 처리됩니다 |
기다리지 않고 바로 적용하려면 지금 한 번 실행하십시오.
kubectl create job --from=cronjob/sa-hardening sa-hardening-now -n openmaru-kube-bench
무엇이 처리됐는지는 로그로 확인합니다.
kubectl logs -n openmaru-kube-bench -l job-name --tail=20