3장. Gatekeeper Operator
Gatekeeper는 OCI(Open Policy Agent)로 실행되는 사용자 정의 리소스 정의 기반 정책을 적용할 수 있는 감사 기능이 있는 검증 웹 후크입니다. Gatekeeper Operator 정책을 사용하여 클러스터에 Gatekeeper를 설치할 수 있습니다. Gatekeeper 제약 조건을 사용하여 Kubernetes 리소스 규정 준수를 평가할 수 있습니다. OPA를 정책 엔진으로 활용하고 Rego를 정책 언어로 사용할 수 있습니다.
사전 요구 사항: Gatekeeper를 설치하고 클러스터에 Gatekeeper 정책을 적용하려면 Red Hat Advanced Cluster Management for Kubernetes 또는 Red Hat OpenShift Container Platform Plus 서브스크립션이 필요합니다. Gatekeeper는 최신 버전의 Red Hat Advanced Cluster Management에서 지원되는 버전 3.11을 제외한 OpenShift Container Platform 버전에서만 지원됩니다.
Gatekeeper Operator 사용에 대해 자세히 알아보려면 계속 읽으십시오.
3.1. Gatekeeper 제약 조건 및 제약 조건 템플릿 통합
게이트키퍼 정책은 제약 조건 템플릿(ConstraintTemplates
) 및 제약 조건을 사용하여 작성됩니다. Red Hat Advanced Cluster Management 정책에서 Gatekeeper 제약 조건을 사용하는 다음 YAML 예제를 확인합니다.
ConstraintTemplates
및 제약 조건: Gatekeeper 제약 조건 및 Gatekeeper 감사 결과 집계에 Red Hat Advanced Cluster Management 정책을 사용하여 Gatekeeper 통합 기능을 사용합니다. 다음 예제에서는 GatekeeperConstraintTemplate
및 제약 조건(K8sRequiredLabels
)을 정의하여 모든 네임스페이스에gatekeeper
라벨이 설정되어 있는지 확인합니다.apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: require-gatekeeper-labels-on-ns spec: remediationAction: inform 1 disabled: false policy-templates: - objectDefinition: apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8srequiredlabels annotations: policy.open-cluster-management.io/severity: low 2 spec: crd: spec: names: kind: K8sRequiredLabels validation: openAPIV3Schema: properties: labels: type: array items: string targets: - target: admission.k8s.gatekeeper.sh rego: | package k8srequiredlabels violation[{"msg": msg, "details": {"missing_labels": missing}}] { provided := {label | input.review.object.metadata.labels[label]} required := {label | label := input.parameters.labels[_]} missing := required - provided count(missing) > 0 msg := sprintf("you must provide labels: %v", [missing]) } - objectDefinition: apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sRequiredLabels metadata: name: ns-must-have-gk annotations: policy.open-cluster-management.io/severity: low 3 spec: enforcementAction: dryrun match: kinds: - apiGroups: [""] kinds: ["Namespace"] parameters: labels: ["gatekeeper"]
- 1
remediationAction
이알리는
것으로 설정되어 있으므로 Gatekeeper 제약 조건의enforcementAction
필드가warn
로 재정의됩니다. 즉, Gatekeeper는 게이트키퍼
레이블이 누락된 네임스페이스 생성 또는 업데이트에 대해 탐지하고 경고합니다. 정책수정
을적용하도록 설정된 경우 Gatekeeper 제약 조건
시행
필드를거부하도록 덮어씁니다
. 이 컨텍스트에서 이 구성을 사용하면 모든 사용자가gatekeeper
레이블이 없는 네임스페이스를 생성하거나 업데이트할 수 없습니다.- 2 3
- 선택 사항: 각 Gatekeeper 제약 조건 또는 제약 조건 템플릿에 대해
policy.open-cluster-management.io/severity
주석의 심각도 값을 설정합니다. 유효한 값은 다른 Red Hat Advanced Cluster Management 정책 유형(낮음
,중간
,높음
또는 심각)과동일합니다
.
이전 정책에서는 다음과 같은 정책 상태 메시지를 수신할 수 있습니다.
warn - you must provide labels: {"gatekeeper"} (On Namespace default); warn - you must provide labels: {"gatekeeper"} (on Namespace gatekeeper-system)
. Gatekeeper 제약 조건 또는ConstraintTemplates
를 포함하는 정책이 삭제되면 관리 클러스터에서 제약 조건 및ConstraintTemplates
도 삭제됩니다.콘솔에서 Gatekeeper 감사 결과를 보려면 정책 템플릿 결과 페이지로 이동합니다. search가 활성화된 경우 감사에 실패한 Kubernetes 오브젝트의 YAML을 확인합니다.
참고:
- 관련 리소스 섹션은 Gatekeeper 버전 3.9 이상에서 감사 결과가 생성되는 경우에만 사용할 수 있습니다.
- Gatekeeper 감사 기능은 기본적으로 1분마다 실행됩니다. 관리 클러스터의 Red Hat Advanced Cluster Management 정책 상태에서 볼 수 있도록 감사 결과가 hub 클러스터로 다시 전송됩니다.
policy-gatekeeper-admission
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gatekeeper-admission spec: remediationAction: inform # will be overridden by remediationAction in parent policy severity: low object-templates: - complianceType: mustnothave objectDefinition: apiVersion: v1 kind: Event metadata: namespace: openshift-gatekeeper-system # set it to the actual namespace where gatekeeper is running if different annotations: constraint_action: deny constraint_kind: K8sRequiredLabels constraint_name: ns-must-have-gk event_type: violation
3.1.1. 추가 리소스
-
자세한 내용은
policy-gatekeeper-operator.yaml
을 참조하십시오. - 자세한 내용은 OPA Gatekeeper 의 내용을 참조하십시오.
- 다른 정책 관리에 대한 자세한 내용은 구성 정책 관리를 참조하십시오.
- 보안 프레임워크에 대한 자세한 내용은 Governance 를 참조하십시오.