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 및 특정 사용자만 로깅 또는 로깅제외 시킬 수가 있다.
참고 :
'Develop > k8s' 카테고리의 다른 글
k8s ServiceAccount Token Refresh (1) | 2024.12.17 |
---|---|
opensearch operator read only mode (0) | 2024.12.02 |
인증서 방식 계정 생성 (Certificates and Certificate Signing Requests) (0) | 2024.11.29 |
OpenSearch Operator Certificate 설정 (0) | 2024.11.28 |
Containerd x509: certificate signed by unknown authority 설정 (0) | 2024.11.19 |