2.4.10. gatekeeper 制約および制約テンプレートの統合
gatekeeper は、Open Policy Agent (OPA) で実行される CustomResourceDefinition (CRD) ベースのポリシーを適用する検証用の Webhook です。gatekeeper をインストールして、Red Hat Advanced Cluster Management for Kubernetes と gatekeeper ポリシーを統合できます。gatekeeper ポリシーを使用して、Kubernetes リソースのコンプライアンスを評価できます。ポリシーエンジンとして OPA を活用し、ポリシー言語に Rego を使用できます。
gatekeeper ポリシーは、Kubernetes 設定ポリシーとして作成されます。gatekeeper ポリシーには、制約テンプレート (ConstraintTemplates
) および制約、監査テンプレート、受付テンプレートが含まれます。詳細は、gatekeeper を参照してください。
前提条件:
-
gatekeeper ポリシーコントローラーを使用するには、gatekeeper をマネージドクラスターにインストールする必要があります。詳細は、
open-policy-agent/gatekeeper リポジトリー
を参照してください。 - Kubernetes バージョン 1.14 以降
Red Hat Advanced Cluster Management では、Red Hat Advanced Cluster Management gatekeeper ポリシーで以下の制約テンプレートを適用します。
ConstraintTemplates
と制約:policy-gatekeeper-k8srequiredlabels
を使用して、マネージドクラスターで gatekeeper 制約テンプレートを作成します。apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gatekeeper-k8srequiredlabels spec: remediationAction: enforce # will be overridden by remediationAction in parent policy severity: low object-templates: - complianceType: musthave objectDefinition: apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8srequiredlabels spec: crd: spec: names: kind: K8sRequiredLabels validation: # Schema for the `parameters` field 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]) } - complianceType: musthave objectDefinition: apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sRequiredLabels metadata: name: ns-must-have-gk spec: match: kinds: - apiGroups: [""] kinds: ["Namespace"] namespaces: - e2etestsuccess - e2etestfail parameters: labels: ["gatekeeper"]
audit
テンプレート:policy-gatekeeper-audit
を使用して、既存の設定ミスを検出するために適用された gatekeeper ポリシーに対して、既存のリソースを定期的に確認して評価します。apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gatekeeper-audit spec: remediationAction: inform # will be overridden by remediationAction in parent policy severity: low object-templates: - complianceType: musthave objectDefinition: apiVersion: constraints.gatekeeper.sh/v1beta1 kind: K8sRequiredLabels metadata: name: ns-must-have-gk status: totalViolations: 0
admission
テンプレート:policy-gatekeeper-admission
を使用して、gatekeeper admission Webhook によって作成される設定ミスを確認します。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
詳細は、policy-gatekeeper-sample.yaml
を参照してください。
Red Hat Advanced Cluster Management gatekeeper Operator ポリシーを使用して gatekeeper をインストールし、Red Hat Advanced Cluster Management gatekeeper Operator オペレーターポリシーを作成する方法は、「 gatekeeper policy integration 」を参照してください。セキュリティーフレームワークに関する他のトピックについては、「ガバナンスおよびリスク」を参照してください。