5.5. Gatekeeper の制約および制約テンプレートの統合
Gatekeeper ポリシーを作成するには、ConstraintTemplates
と制約を使用します。Policy
リソースの policy-templates
にテンプレートと制約を追加します。Red Hat Advanced Cluster Management ポリシーで Gatekeeper 制約を使用する以下の YAML の例を表示します。
ConstraintTemplates
と制約: Red Hat Advanced Cluster Management ポリシーを使用して Gatekeeper 統合機能を使用し、Gatekeeper 制約のマルチクラスター分散とハブクラスターでの Gatekeeper 監査結果の集約を行います。次の例では、GatekeeperConstraintTemplate
と制約 (K8sRequiredLabels
) を定義して、gatekeeper
ラベルがすべての namespace に設定されていることを確認します。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
がinform
に設定されているため、Gatekeeper 制約のenforcementAction
フィールドはwarn
にオーバーライドされます。これは、gatekeeper
ラベルが欠落している namespace の作成または更新を Gatekeeper が検出し、警告することを意味します。remediationAction
ポリシーがenforce
に設定されている場合、Gatekeeper 制約のenforcementAction
フィールドはdeny
にオーバーライドされます。このコンテキストでは、この設定により、gatekeeper
ラベルが欠落している namespace をユーザーが作成または更新できなくなります。- 2 3
- オプション: 各 Gatekeeper 制約または制約テンプレートに対して、
policy.open-cluster-management.io/severity
アノテーションの重大度値を設定します。有効な値は、他の Red Hat Advanced Cluster Management ポリシータイプと同じです (low
、medium
、high
、またはcritical
)。
以前のポリシーでは、ポリシーステータスメッセージ
warn - you must provide labels: {"gatekeeper"} (on Namespace default); warn - you must provide labels: {"gatekeeper"} (on Namespace gatekeeper-system)
が表示される場合があります。ポリシーから Gatekeeper 制約またはConstraintTemplates
を削除すると、その制約とConstraintTemplates
もマネージドクラスターから削除されます。コンソールから特定のマネージドクラスターの Gatekeeper 監査結果を表示するには、ポリシーテンプレートの Results ページに移動します。検索が有効になっている場合は、監査に失敗した Kubernetes オブジェクトの YAML を表示します。
注記:
- 関連資料 セクションは、Gatekeeper が監査結果を生成した場合にのみ使用できます。
- Gatekeeper 監査は、デフォルトでは 1 分ごとに実行されます。監査結果はハブクラスターに返送され、マネージドクラスターの Red Hat Advanced Cluster Management ポリシーステータスで表示されます。
policy-gatekeeper-admission
: Red Hat Advanced Cluster Management ポリシー内のpolicy-gatekeeper-admission
設定ポリシーを使用して、Gatekeeper アドミッション Webhook によって拒否された Kubernetes API リクエストを確認します。以下の例を参照してください。apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gatekeeper-admission spec: remediationAction: inform 1 severity: low object-templates: - complianceType: mustnothave objectDefinition: apiVersion: v1 kind: Event metadata: namespace: openshift-gatekeeper-system 2 annotations: constraint_action: deny constraint_kind: K8sRequiredLabels constraint_name: ns-must-have-gk event_type: violation
5.5.1. 関連情報
詳細は、以下のリソースを参照してください。