반응형

 

k8s Audit Policy 설명이다.

감사로그 설정 자체는 가이드에 잘 되어있어서 그대로 따라하면된다.

https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/

 

1.감사로그에는 단계 및 레벨이 존재한다.

단계

Stage Description
RequestReceived Audit Handler 가 요청을 수신한 직후
ResponseStarted 요청은 받았으나 응답 전
ResponseComplete 요청을 완전히 처리하고 응답 완료
Panic 요청을 처리하는 동안 오류가 발생할 때

 

레벨

Level Description
None 해당 규칙에 해당되는 이벤트는 로깅하지 않음
Metadata 요청된 메타데이터(사용자, 리소스, 시간,verbs) 등은 로깅하지만 요청/응답 내용은 로깅안함
Request 이벤트 메타데이터 및 요청 내용은 로깅하지만 응답은 로깅 안함
RequestReponse 메타데이터, 요청, 응답 로깅 함

 

또한 omitStages 라는 것이 있는데, 해당 필드는 전역으로 줄 수도 있고 지역으로도 설정하여 단계를 제외시킬 수 있다.

기본적으로 단계를 설정하지않으면, 모든 단계(발생할 경우)를 호출한다.

 

2. 예제

2.1 Level 을 Metadata로 설정 했을 경우

본문 내용은 로깅되지않고 기본적인 메타데이터와 RequestReceived, ResponseComplete 호출

(ResposneStarted와 Panic 은 특수한 경우에 호출되는 듯함)

# audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: metadata
    resources:
      - group: ""
        resources: ["*"]
        

# result
{
    "kind" : 
    "apiVersion" :
    "level" : "Metadata"
    "auditID" :
    "stage" : "RequestReceived"
    "requestURI" :
    "verb":
    "user": {
    }
    ...
}
{
    "kind" : 
    "apiVersion" :
    "level" : "Metadata"
    "auditID" :
    "stage" : "ResponseComplete"
    "requestURI" :
    "verb":
    "user": {
    }
    ...
}

 

2.2 모든 요청의 단계 대해 RequestReceived 제외하고 Level은 Metadata인 경우

위의 결과와 달리 RequestReceived 로깅안함.

# audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:
  - "RequestReceived"
rules:
  - level: metadata
    resources:
      - group: ""
        resources: ["*"]
        

# result
{
    "kind" : 
    "apiVersion" :
    "level" : "Metadata"
    "auditID" :
    "stage" : "ResponseComplete"
    "requestURI" :
    "verb":
    "user": {
    }
    ...
}

 

omitStages는 위에 설명한대로 전역 또는 지역에도 설정 가능

# audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: metadata
    omitStages:
      - "RequestReceived"
    resources:
      - group: ""
        resources: ["*"]

 

2.3 모든 요청의 단계 대해 RequestReceived 제외하고 Level은 Request인 경우

RequestReceived 로깅안하며, 요청내용의 Body만 로깅, 응답 Body는 로깅안함.

# audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
omitStages:
  - "RequestReceived"
rules:
  - level: Request
    resources:
      - group: ""
        resources: ["*"]
        

# result
{
    "kind" : 
    "apiVersion" :
    "level" : "Request"
    "auditID" :
    "stage" : "ResponseComplete"
    "requestURI" :
    "verb" :
    "user" : {
    }
    "responseStatus": {
    }
    "requestObject": {
    	"kind" : "Pod",
        "apiversion" :
        "metadata" : {
        }
        "spec : {
          "volumes" : {
          }
          "containers" : {
          }
        ...
    }
}

 

이 외에도 특정 namspace 및 특정 사용자만 로깅 또는 로깅제외 시킬 수가 있다.

 

참고 :

https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/

반응형

+ Recent posts