Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Medium Level #20] Kubernetes 환경에서 보안 및 감사 로깅 설정

ygtoken 2025. 3. 17. 12:03
728x90

 

쿠버네티스 환경에서는 보안 이벤트를 추적하고, 클러스터 내에서 발생하는 주요 작업을 모니터링하는 것이 필수적입니다.

이를 위해 Kubernetes Audit Logging을 활성화하고, 감사 로그를 활용하여 보안 이벤트를 분석하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

1. Kubernetes Audit Logging을 활성화하여 보안 이벤트 추적

2. Audit 로그를 파일로 저장하고, kubectl을 활용하여 분석

3. kubectl 및 직접적인 로그 파일 조회를 활용한 감사 로그 점검 및 트러블슈팅

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ Kubernetes Audit Logging을 활성화하여 보안 이벤트 추적

 

❓ 문제 상황

 

운영팀에서 관리자가 클러스터 내에서 수행하는 API 요청을 추적하고, 특정 이벤트(예: 권한 변경, 서비스 계정 생성 등)를 감시해야 합니다.

이를 위해 Audit Logging을 활성화하고, 중요 이벤트를 로그 파일에 저장해야 합니다.

로그 저장 위치: /var/log/kubernetes/audit.log

기록할 이벤트: 권한 변경, 서비스 계정 생성, 네임스페이스 변경

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

1. Kube-apiserver에 감사 로깅을 활성화하는 설정을 추가합니다.

2. audit-policy.yaml을 생성하여 특정 이벤트를 필터링하여 저장합니다.

 


✅ 정답 Manifest (Audit Logging 설정)

 

🔹 kube-apiserver에 감사 로깅 활성화 (kube-apiserver.yaml 수정)

apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - name: kube-apiserver
    command:
    - kube-apiserver
    - --audit-policy-file=/etc/kubernetes/audit-policy.yaml
    - --audit-log-path=/var/log/kubernetes/audit.log
    - --audit-log-maxage=30
    - --audit-log-maxbackup=10
    - --audit-log-maxsize=100

이제 API 서버에서 발생하는 이벤트가 감사 로그로 기록됨

 


📌 적용 후 예상 결과 값

 

1. kube-apiserver에서 감사 로깅 설정 확인

kubectl get pod -n kube-system | grep apiserver

 

💡 예상 출력 값

kube-apiserver-node1    1/1     Running   0     5m

kube-apiserver가 정상적으로 실행 중이며, 감사 로그가 활성화됨

 


2️⃣ Audit 로그를 파일로 저장하고, kubectl을 활용하여 분석

 

❓ 문제 상황

 

운영팀에서 Audit 로그를 시스템 파일로 저장하고, 특정 이벤트를 빠르게 조회해야 합니다.

이를 위해 kubectl 및 기본 리눅스 명령어를 활용하여 감사 로그를 분석해야 합니다.

로그 저장 위치: /var/log/kubernetes/audit.log

분석 대상 이벤트: RoleBinding 변경, 서비스 계정 생성

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Audit 로그를 /var/log/kubernetes/audit.log에 저장하고, jq를 활용하여 JSON 형식으로 분석합니다.

 

2. grep 및 awk를 활용하여 특정 이벤트를 필터링합니다.

 


✅ Audit 로그 분석 명령어

 

🔹 감사 로그 파일 직접 확인

cat /var/log/kubernetes/audit.log | jq .

 

💡 예상 출력 값

{
  "kind": "Event",
  "apiVersion": "audit.k8s.io/v1",
  "level": "Request",
  "user": { "username": "admin" },
  "verb": "create",
  "objectRef": {
    "resource": "rolebindings",
    "name": "admin-binding",
    "namespace": "default"
  }
}

RoleBinding 생성 이벤트가 정상적으로 감사 로그에 기록됨

 


3️⃣ kubectl 및 직접적인 로그 파일 조회를 활용한 감사 로그 점검 및 트러블슈팅

 

❓ 문제 상황

 

운영팀에서 특정 보안 이벤트(예: RoleBinding 변경, 서비스 계정 생성 등)가 감사 로그에 기록되고 있는지 확인하고, 해당 이벤트를 필터링하여 분석해야 합니다.

kubectl 및 직접적인 로그 파일 분석을 활용하여 Audit 로그에서 특정 이벤트를 검색해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. kubectl logs 및 cat 명령어를 활용하여 감사 로그를 직접 분석합니다.

 

2. grep 및 awk를 사용하여 특정 이벤트를 필터링합니다.

 


✅ 감사 로그 필터링 및 이벤트 분석 명령어

 

🔹 RoleBinding 변경 이벤트 검색

cat /var/log/kubernetes/audit.log | jq '. | select(.objectRef.resource=="rolebindings")'

 

💡 예상 출력 값

{
  "kind": "Event",
  "apiVersion": "audit.k8s.io/v1",
  "level": "Request",
  "user": { "username": "devops-user" },
  "verb": "update",
  "objectRef": {
    "resource": "rolebindings",
    "name": "developer-binding",
    "namespace": "dev-team"
  }
}

RoleBinding 변경 이벤트가 감사 로그에서 검색됨

 


🔹 특정 사용자의 작업 내역 검색

cat /var/log/kubernetes/audit.log | jq '. | select(.user.username=="devops-user")'

 

💡 예상 출력 값

{
  "kind": "Event",
  "apiVersion": "audit.k8s.io/v1",
  "level": "Request",
  "user": { "username": "devops-user" },
  "verb": "create",
  "objectRef": {
    "resource": "secrets",
    "name": "api-token",
    "namespace": "default"
  }
}

특정 사용자가 수행한 작업이 감사 로그에서 검색됨

728x90