일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Kopf
- Model Serving
- blue/green
- Argo
- knative
- tekton
- 카오스 엔지니어링
- Kubernetes 인증
- opensearch
- CI/CD
- gitops
- Litmus
- keda
- operator
- eBPF
- xdp
- mlops
- Kubernetes
- Pulumi
- kubernetes operator
- Kubeflow
- argocd
- seldon core
- Continuous Deployment
- 오퍼레이터
- CANARY
- opentelemetry
- MLflow
- nginx ingress
- serving
- Today
- Total
Kubernetes 이야기
pod security admission 본문
Kubernetes v1.22에는 Pod 보안 승인 (PSA)이라는 새로운 승인 컨트롤러가 내장되어 있다. ( 기존 Pod Security Policy ( PSP ) 는 Kubernetes 1.21부터 더 이상 사용되지 않으며 1.25버전부터 제거될 예정이다. )
PSA 컨트롤러의 목적은 Pod 보안 정책 (PSP)을 효과적으로 대체하지만 PSS( Pod 보안 표준 ) 라고 하는 공식 제어를 사용하는 것이다. PSS는 이름에서 알 수 있듯이 기술이 아니고 표준에 불과하다. 표준은 어떤 일이 일어나야 하는지를 지시하는 반면 기술(예: PSP)은 표준을 방법으로 구현한 것이다.. PSA는 PSS를 구현하는 기술로, 이 모든 것이 Kubernetes API 서버에 직접 내장되어 있다. Kubernetes v1.23부터 PSA는 기본적으로 활성화된다.
PSA를 사용하려면 적절한 레이블로 네임스페이스에 레이블만 지정하면 된다 . 형식은 다음과 같다.
# The per-mode level label indicates which policy level to apply for the mode.
#
# MODE must be one of `enforce`, `audit`, or `warn`.
# LEVEL must be one of `privileged`, `baseline`, or `restricted`.
pod-security.kubernetes.io/<MODE>: <LEVEL>
또는
pod-security.kubernetes.io/<MODE>-version: <VERSION>
레이블에는 접두사, 모드 및 수준의 세 부분(선택적으로 네 부분)이 있다. 접두사 pod-security.kubernetes.io 뒤에는 항상 슬래시가 온다. MODE는 해당 네임스페이스에서 수행되어야 하는 동작을 지정한다. 옵션은 enforce(차단됨), audit(허용되지만 감사 로그에 표시됨) 및 warn(허용되지만 경고가 표시됨). LEVEL은 PSS의 어떤 프로파일이 privileged(완전히 제한되지 않음), baseline(최소한으로 제한됨), restricted (매우 제한적으로) 옵션인지를 나타낸다.
예)
apiVersion: v1
kind: Namespace
metadata:
name: my-baseline-namespace
labels:
pod-security.kubernetes.io/enforce: baseline
pod-security.kubernetes.io/enforce-version: v1.25
# We are setting these to our _desired_ `enforce` level.
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/audit-version: v1.25
만약 다음과 같이 설정되어 있다고 해보자.
pod-security.kubernetes.io/enforce: restricted
그리고, 해당 네임스페이스에 다음과 같은 기본적인 Nginx Pod를 생성해보자.
# k create ns psa
# k label namespaces psa pod-security.kubernetes.io/enforce=restricted --overwrite=true
# cat <<EOF | kubectl create -n psa -f -
apiVersion: v1
kind: Pod
metadata:
name: my-nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
protocol: TCP
EOF
Pod를 생성 시 다음과 같은 오류를 볼 수 있다.
Error from server (Forbidden): error when creating "STDIN": pods "my-nginx-pod" is forbidden: violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "nginx" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "nginx" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "nginx" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "nginx" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
클러서트 전체에 정책을 적용하려는 경우에는 AdmissionConfiguration을 사용할 수 있다. 이 리소스를 사용하면 정책 정의가 기본적으로 클러스터 전체에 적용되며 네임스페이스 레이블을 통해 적용된 모든 정책이 우선 적용된다.
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
configuration:
apiVersion: pod-security.admission.config.k8s.io/v1beta1
kind: PodSecurityConfiguration
# Defaults applied when a mode label is not set.
#
# Level label values must be one of:
# - "privileged" (default)
# - "baseline"
# - "restricted"
#
# Version label values must be one of:
# - "latest" (default)
# - specific version like "v1.25"
defaults:
enforce: "privileged"
enforce-version: "latest"
audit: "privileged"
audit-version: "latest"
warn: "privileged"
warn-version: "latest"
exemptions:
# Array of authenticated usernames to exempt.
usernames: []
# Array of runtime class names to exempt.
runtimeClasses: []
# Array of namespaces to exempt.
namespaces: []
PSP로 작업하는 데 상당한 시간을 보내지만 PSA는 훨씬 더 간단하게 동일한 결과를 얻을 수 있다. Pod 사양의 모든 보안 관련 필드를 이해하기 위해 힘들게 세부적으로 들어가지 않고도 보안 모범 사례를 훨씬 쉽게 적용할 수 있다. 또한 네임스페이스 레이블을 사용하면 정책을 쉽게 적용하고 정책이 작동하는 모드를 선택할 수 있다.
'Kubernetes > 보안' 카테고리의 다른 글
OWASP Kubernetes Top Ten (0) | 2022.12.22 |
---|---|
NGINX WAF (0) | 2022.09.24 |
KubeClarity (0) | 2022.08.25 |
Container/Kubernetes Compliance ( 컨테이너/쿠베네티스 규정 준수 ) (0) | 2022.06.17 |
Kubernetes scan 도구 - popeye (0) | 2022.05.15 |