2.5.14. gatekeeper ポリシーの統合

gatekeeper ポリシーの作成、適用、表示、および更新について説明します。

必要なアクセス権限:: クラスターの管理者

前提条件: Gatekeeper をインストールしておく必要があります。詳細は、open-policy-agent/gatekeeper リポジトリー を参照してください。

2.5.14.1. gatekeeper ポリシーの作成

コマンドラインインターフェース (CLI) から gatekeeper ポリシーの YAML ファイルを作成できます。Red Hat Advanced Cluster Management for Kubernetes 設定ポリシーを使用して、ハブクラスターからマネージドクラスターに gatekeeper ポリシーを伝播します。以下のセクションを参照して、受付および監査シナリオの gatekeeper ポリシーを作成します。

2.5.14.1.1. 受付シナリオの gatekeeper ポリシーの作成

Red Hat Advanced Cluster Management 設定ポリシーを使用して gatekeeper ポリシーを作成し、gatekeeper 受付 Webhook が生成するイベントを検索します。

注記: Gatekeeper は、emit-admission-eventstrue に設定してデプロイする必要があります。

  1. gatekeeper ポリシーの YAML ファイルを作成します。以下のコマンドを実行します。

    kubectl create -f policy-gatekeeper-admission.yaml

    gatekeeper ポリシーは以下のポリシーのようになります。

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name: policy-gatekeeper
  namespace: default
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
spec:
  disabled: false
  policy-templates:
    - objectDefinition:
        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"]
                  parameters:
                    labels: ["gatekeeper"]
    - objectDefinition:
        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: gatekeeper-system
                  annotations:
                    constraint_action: deny
                    constraint_kind: K8sRequiredLabels
                    constraint_name: ns-must-have-gk
                    event_type: violation
2.5.14.1.2. 監査シナリオの gatekeeper ポリシーの作成

製品設定ポリシーを使用して gatekeeper ポリシーを作成して、その gatekeeper ポリシーに対して既存のリソースを定期的に確認して評価します。Red Hat Advanced Cluster Management 設定ポリシーは、gatekeeper 制約の status フィールドで違反をチェックします。

  1. gatekeeper ポリシーの YAML ファイルを作成します。以下のコマンドを実行します。

    kubectl create -f policy-gatekeeper-audit.yaml

    gatekeeper ポリシーは以下のポリシーのようになります。

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-gatekeeper
      namespace: default
      annotations:
        policy.open-cluster-management.io/standards:
        policy.open-cluster-management.io/categories:
        policy.open-cluster-management.io/controls:
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            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
                      violations: []

サードパーティーポリシーと製品の統合に関する詳細は、「サードパーティーポリシー コントローラーの統合 」を参照してください。