Kubernetes는 컨테이너 오케스트레이션을 위한 강력한 도구입니다. 그러나 보안 및 컴플라이언스를 위해 클러스터 내에서 발생하는 모든 이벤트를 감사하는 것도 중요합니다. Kubernetes는 기본적으로 감사 기능을 제공하며, 이를 통해 어떤 객체가 생성되었는지, 누가 생성했는지, 언제 생성되었는지, 어느 네임스페이스에 생성되었는지, 어디서 요청이 시작되었는지 등의 정보를 모니터링할 수 있습니다. 이번 글에서는 Kubernetes의 감사 기능을 활성화하고 사용하는 방법을 다루어보겠습니다.
Kubernetes 클러스터에서 이루어지는 모든 요청은 kube-apiserver
를 거칩니다. 예를 들어, 새로운 Nginx 포드를 생성하는 요청이 클러스터로 전송되면, 이 요청을 받는 것은 kube-apiserver
입니다. 요청은 다음과 같은 여러 단계를 거칩니다:
kube-apiserver
에 도착하면 이벤트가 생성됩니다.이러한 단계에서 발생하는 이벤트를 통해 클러스터에서 어떤 일이 일어나는지 상세히 추적할 수 있습니다. 그러나 기본적으로 감사 기능이 활성화되어 있지 않으며, 필요한 경우 특정 이벤트만 기록하도록 설정할 수 있습니다.
감사 이벤트를 효율적으로 기록하기 위해서는 정책 객체를 사용합니다. 정책 객체는 kube-apiserver
가 조건에 맞는 이벤트를 기록하도록 설정하는 규칙을 포함합니다. 이를 위해 정책 객체 구성 파일을 생성합니다.
예시 정책 파일은 다음과 같습니다:
apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:
- "RequestReceived"
rules:
- level: Metadata
resources:
- group: ""
resources: ["pods"]
verbs: ["delete"]
namespaces: ["prod-namespace"]
- level: Metadata
resources:
- group: ""
resources: ["secrets"]
이 파일은 prod-namespace
에서 포드 삭제 작업을 기록하고, 모든 네임스페이스에서 secrets 객체에 대한 모든 작업을 기록합니다.
정책 파일을 생성한 후, kube-apiserver
가 이를 사용하도록 구성해야 합니다. 이를 위해 감사 로그 경로와 정책 파일 경로를 지정하는 플래그를 kube-apiserver
실행 명령에 추가합니다.
예시 설정은 다음과 같습니다:
# /etc/kubernetes/manifests/kube-apiserver.yaml 파일 업데이트
command:
- kube-apiserver
- --audit-log-path=/var/log/k8s-audit.log
- --audit-policy-file=/etc/kubernetes/audit-policy.yaml
- --audit-log-maxage=10
- --audit-log-maxbackup=5
- --audit-log-maxsize=100
이 설정은 감사 로그를 /var/log/k8s-audit.log
파일에 기록하고, 최대 10일 동안 로그를 보관하며, 최대 5개의 백업 파일을 유지하고, 파일 크기가 100MB를 초과하면 회전하도록 설정합니다. 설정 파일을 저장하고 kube-apiserver
를 재시작하면 감사 기능이 활성화됩니다.
이제 감사 정책이 성공적으로 설정되었는지 테스트해봅시다. prod-namespace
내에서 webapp-pod
를 삭제하면, 해당 이벤트가 감사 로그에 기록됩니다. 다음은 이벤트 생성 및 로그 확인 절차입니다:
webapp-pod
삭제 명령 실행:kubectl delete pod webapp-pod -n prod-namespace
tail -f /var/log/k8s-audit.log
로그 파일에서 삭제 이벤트와 관련된 메타데이터가 기록된 것을 확인할 수 있습니다.
Kubernetes에서 감사 기능을 활성화하고 정책을 구성하는 방법을 살펴보았습니다. 이를 통해 클러스터 내에서 발생하는 중요한 이벤트를 모니터링하고, 보안 및 컴플라이언스 요구 사항을 충족할 수 있습니다.