Kubernetes - OPA Gatekeeper
Reading time: 3 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
이 페이지의 원래 저자는 Guillaume입니다.
정의
Open Policy Agent (OPA) Gatekeeper는 Kubernetes에서 입장 정책을 시행하는 데 사용되는 도구입니다. 이러한 정책은 OPA에서 제공하는 정책 언어인 Rego를 사용하여 정의됩니다. 아래는 OPA Gatekeeper를 사용한 정책 정의의 기본 예입니다:
package k8srequiredlabels
violation[{"msg": msg}] {
provided := {label | input.review.object.metadata.labels[label]}
required := {label | label := input.parameters.labels[label]}
missing := required - provided
count(missing) > 0
msg := sprintf("Required labels missing: %v", [missing])
}
default allow = false
이 Rego 정책은 Kubernetes 리소스에 특정 레이블이 있는지 확인합니다. 필요한 레이블이 누락된 경우 위반 메시지를 반환합니다. 이 정책은 클러스터에 배포된 모든 리소스가 특정 레이블을 갖도록 보장하는 데 사용할 수 있습니다.
제약 조건 적용
이 정책을 OPA Gatekeeper와 함께 사용하려면 Kubernetes에서 ConstraintTemplate 및 Constraint를 정의해야 합니다:
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8srequiredlabels
spec:
crd:
spec:
names:
kind: K8sRequiredLabels
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8srequiredlabels
violation[{"msg": msg}] {
provided := {label | input.review.object.metadata.labels[label]}
required := {label | label := input.parameters.labels[label]}
missing := required - provided
count(missing) > 0
msg := sprintf("Required labels missing: %v", [missing])
}
default allow = false
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredLabels
metadata:
name: ensure-pod-has-label
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
parameters:
labels:
requiredLabel1: "true"
requiredLabel2: "true"
이 YAML 예제에서는 레이블을 요구하는 ConstraintTemplate을 정의합니다. 그런 다음 이 제약 조건의 이름을 ensure-pod-has-label
로 지정하고, 이는 k8srequiredlabels
ConstraintTemplate을 참조하며 필수 레이블을 지정합니다.
Gatekeeper가 Kubernetes 클러스터에 배포되면, 이 정책을 시행하여 지정된 레이블이 없는 포드의 생성을 방지합니다.
References
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.