2.3. ハブクラスターポリシーフレームワーク


ポリシーを作成および管理し、可視性を高め、標準に合わせて設定を修正するには、Red Hat Advanced Cluster Management for Kubernetes Governance のセキュリティーポリシーフレームワークを使用します。Red Hat Advanced Cluster Management for Kubernetes ガバナンスは、企業が独自のセキュリティーポリシーを導入するための拡張可能なポリシーフレームワークを提供します。

Policy リソースは、マネージドクラスターの namespace を除き、ハブクラスター上の任意の namespace に作成できます。マネージドクラスターの namespace にポリシーを作成すると、そのポリシーは Red Hat Advanced Cluster Management によって削除されます。Red Hat Advanced Cluster Management の各ポリシーは、1 つ以上のポリシーテンプレート定義にまとめることができます。ポリシー要素の詳細は、このページの ポリシー YAML の表 のセクションを参照してください。

2.3.1. 要件

  • 各ポリシーに、ポリシードキュメントの適用先のクラスターを定義する Placement リソースと、Red Hat Advanced Cluster Management for Kubernetes ポリシーをバインドする PlacementBinding リソースが必要です。

    ポリシーリソースは、関連付けられた Placement 定義に基づいてクラスターに適用され、特定の条件に一致するマネージドクラスターのリストを表示できます。environment=dev ラベルを持つすべてのクラスターに一致するサンプルの Placement リソースは、次の YAML のようになります。

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: placement-policy-role
    spec:
      predicates:
      - requiredClusterSelector:
        labelSelector:
        matchExpressions:
          - {key: environment, operator: In, values: ["dev"]}
        tolerations:
          - key: cluster.open-cluster-management.io/unavailable
            operator: Exists
          - key: cluster.open-cluster-management.io/unreachable
            operator: Exists
    Copy to Clipboard Toggle word wrap

    配置とサポートされる基準の詳細は、クラスターライフサイクルドキュメントの 配置の概要 を参照してください。

  • Placement リソースに加えて、Placement リソースをポリシーにバインドするための PlacementBinding を作成する必要があります。environment=dev ラベルを持つすべてのクラスターに一致するサンプルの Placement リソースは、次の YAML のようになります。

    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-role
    placementRef:
      name: placement-policy-role 
    1
    
      kind: Placement
      apiGroup: cluster.open-cluster-management.io
    subjects: 
    2
    
    - name: policy-role
      kind: Policy
      apiGroup: policy.open-cluster-management.io
    Copy to Clipboard Toggle word wrap
    1
    前のサンプルを使用する場合は、配置名と一致するように、placementRef セクションの Placement リソースの名前を更新してください。
    2
    ポリシー名と一致するように、subjects セクションのポリシー名を更新する必要があります。oc apply -f resource.yaml -n namespace コマンドを使用して、Placement リソースと Placementbinding リソースの両方を適用します。ポリシー、配置、配置バインディングがすべて同じ namespace に作成されていることを確認します。
  • Placement リソースを使用するには、ManagedClusterSetBinding リソースを使用して、ManagedClusterSet リソースを Placement リソースの namespace にバインドする必要があります。詳細は、ManagedClusterSetBinding リソースの作成 を参照してください。
  • コンソールからポリシーの Placement リソースを作成すると、配置の容認のステータスが Placement リソースに自動的に追加されます。詳細は、配置への容認の追加 参照してください。

ベストプラクティス: Placement リソースの使用時には、コマンドラインインターフェイス (CLI) を使用してポリシーの更新を行います。

2.3.2. ハブクラスターのポリシーコンポーネント

以下のセクションでは、ポリシーコンポーネントを説明します。

2.3.2.1. ポリシー YAML の設定

ポリシーの作成時に、必須パラメーターフィールドと値を含める必要があります。ポリシーコントローラーによっては、他の任意のフィールドおよび値の追加が必要になる場合があります。ポリシーの YAML 設定を以下に示します。

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name:
  annotations:
    policy.open-cluster-management.io/standards:
    policy.open-cluster-management.io/categories:
    policy.open-cluster-management.io/controls:
    policy.open-cluster-management.io/description:
spec:
  disabled:
  remediationAction:
  dependencies:
  - apiVersion: policy.open-cluster-management.io/v1
    compliance:
    kind: Policy
    name:
    namespace:
  policy-templates:
    - objectDefinition:
        apiVersion:
        kind:
        metadata:
          name:
        spec:
---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
bindingOverrides:
  remediationAction:
subFilter:
  name:
placementRef:
  name:
  kind: Placement
  apiGroup: cluster.open-cluster-management.io
subjects:
- name:
  kind:
  apiGroup:
---
apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
  name:
spec:
Copy to Clipboard Toggle word wrap

2.3.2.2. ポリシー YAML の表

ポリシーパラメーターの説明は、以下の表を参照してください。

Expand
表2.1 パラメーターの表
フィールド任意または必須説明

apiVersion

必須

この値は policy.open-cluster-management.io/v1 に設定します。

kind

必須

ポリシーのタイプを指定するには、値を Policy に設定します。

metadata.name

必須

ポリシーリソースを識別する名前。

metadata.annotations

任意

ポリシーが検証を試みる標準セットを記述する、一連のセキュリティー情報の指定に使用します。ここに記載されているすべてのアノテーションは、コンマ区切りリストを含む文字列として表示されます。

注記: コンソールの ポリシー ページで、ポリシー定義の標準およびカテゴリーに基づいてポリシー違反を表示できます。

bindingOverrides.remediationAction

任意

このパラメーターを enforce に設定すると、設定ポリシーに関連する PlacementBinding リソースの修復アクションをオーバーライドする方法が提供されます。デフォルト値は null です。

subFilter

任意

バインドされたポリシーのサブセットを選択するには、このパラメーターを restriction に設定します。デフォルト値は null です。

annotations.policy.open-cluster-management.io/standards

任意

ポリシーが関連するセキュリティー標準の名前。たとえば、アメリカ国立標準技術研究所 (NIST: National Institute of Standards and Technology) および Payment Card Industry (PCI) などがあります。

annotations.policy.open-cluster-management.io/categories

任意

セキュリティーコントロールカテゴリーは、1 つ以上の標準に関する特定要件を表します。たとえば、システムおよび情報の整合性カテゴリーには、HIPAA および PCI 標準で必要とされているように、個人情報保護のデータ転送プロトコルが含まれる場合があります。

annotations.policy.open-cluster-management.io/controls

任意

チェックされるセキュリティー制御の名前。たとえば、アクセス制御やシステムと情報のインテグリティーです。

spec.disabled

必須

この値は true または false に設定します。disabled パラメーターを使用すると、ポリシーを有効または無効にできます。

spec.remediationAction

任意

ポリシーの修正を指定します。パラメーターの値は enforce および inform です。指定すると、定義した spec.remediationAction 値は、policy-templates セクションの子ポリシーに定義した remediationAction パラメーターより優先されます。たとえば、spec.remediationAction の値のセクションを enforce に設定すると、policy-templatesremediationAction はランタイム時に enforce に設定されます。

spec.copyPolicyMetadata

任意

ポリシーをマネージドクラスターに複製するときに、ポリシーのラベルとアノテーションをコピーするかどうかを指定します。true に設定すると、ポリシーのすべてのラベルとアノテーションが複製されたポリシーにコピーされます。false に設定すると、ポリシーフレームワーク固有のポリシーラベルとアノテーションのみが複製されたポリシーにコピーされます。

spec.dependencies

任意

コンプライアンスに関する特別な考慮事項を含む詳細な依存オブジェクトのリストを作成するために使用されます。

spec.policy-templates

必須

1 つ以上のポリシーを作成し、マネージドクラスターに適用するのに使用します。

spec.policy-templates.extraDependencies

任意

ポリシーテンプレートの場合は、これを使用して、コンプライアンスに関する特別な考慮事項を詳述した依存オブジェクトのリストを作成します。

spec.policy-templates.ignorePending

任意

依存関係の基準が検証されるまで、ポリシーテンプレートを準拠としてマークするために使用されます。

重要: 一部のポリシーの種類は、強制機能をサポートしていない場合があります。

2.3.2.3. ポリシーサンプルファイル

ロールの設定ポリシーである以下の YAML ファイルを確認します。

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name: policy-role
  annotations:
    policy.open-cluster-management.io/standards: NIST SP 800-53
    policy.open-cluster-management.io/categories: AC Access Control
    policy.open-cluster-management.io/controls: AC-3 Access Enforcement
    policy.open-cluster-management.io/description:
spec:
  remediationAction: inform
  disabled: false
  policy-templates:
    - objectDefinition:
        apiVersion: policy.open-cluster-management.io/v1
        kind: ConfigurationPolicy
        metadata:
          name: policy-role-example
        spec:
          remediationAction: inform # the policy-template spec.remediationAction is overridden by the preceding parameter value for spec.remediationAction.
          severity: high
          namespaceSelector:
            include: ["default"]
          object-templates:
            - complianceType: mustonlyhave # role definition should exact match
              objectDefinition:
                apiVersion: rbac.authorization.k8s.io/v1
                kind: Role
                metadata:
                  name: sample-role
                rules:
                  - apiGroups: ["extensions", "apps"]
                    resources: ["deployments"]
                    verbs: ["get", "list", "watch", "delete","patch"]
---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
  name: binding-policy-role
placementRef:
  name: placement-policy-role
  kind: Placement
  apiGroup: cluster.open-cluster-management.io
subjects:
- name: policy-role
  kind: Policy
  apiGroup: policy.open-cluster-management.io
---
apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
  name: placement-policy-role
spec:
  predicates:
  - requiredClusterSelector:
      labelSelector:
        matchExpressions:
        - {key: environment, operator: In, values: ["dev"]}
    tolerations:
        - key: cluster.open-cluster-management.io/unavailable
          operator: Exists
        - key: cluster.open-cluster-management.io/unreachable
          operator: Exists
Copy to Clipboard Toggle word wrap

2.3.3. 関連情報

Red Hat Advanced Cluster Management ガバナンスフレームワークの関連トピックを参照してください。

2.3.4. ポリシーの依存関係

依存関係を使用すると、クラスター上の他のポリシーが特定の状態にある場合にのみ、ポリシーをアクティブ化できます。依存関係の基準が満たされないと、ポリシーは Pending と表示され、マネージドクラスターにリソースは作成されません。基準ステータスの詳細は、ポリシーステータスを参照してください。

ポリシーの依存関係を使用して、オブジェクトの適用順序を制御できます。たとえば、Operator 用のポリシーと、Operator が管理するリソース用の別のポリシーがある場合は、Operator がインストールされるまでリソースの作成を試行しないように、2 番目のポリシーに依存関係を設定できます。これは、マネージドクラスターのパフォーマンスの向上に役立ちます。

必要なアクセス権: ポリシー管理者

次のポリシー依存関係の例を表示します。ここで、ScanSettingBindingupstream-compliance-operator ポリシーがマネージドクラスターですでに準拠している場合にのみ作成されます。

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  annotations:
    policy.open-cluster-management.io/categories: CM Configuration Management
    policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
    policy.open-cluster-management.io/standards: NIST SP 800-53
    policy.open-cluster-management.io/description:
  name: moderate-compliance-scan
  namespace: default
spec:
  dependencies: 
1

  - apiVersion: policy.open-cluster-management.io/v1
    compliance: Compliant
    kind: Policy
    name: upstream-compliance-operator
    namespace: default
  disabled: false
  policy-templates:
  - extraDependencies: 
2

    - apiVersion: policy.open-cluster-management.io/v1
      kind: ConfigurationPolicy
      name: scan-setting-prerequisite
      compliance: Compliant
    ignorePending: false 
3

    objectDefinition:
      apiVersion: policy.open-cluster-management.io/v1
      kind: ConfigurationPolicy
      metadata:
        name: moderate-compliance-scan
      spec:
        object-templates:
        - complianceType: musthave
          objectDefinition:
            apiVersion: compliance.openshift.io/v1alpha1
            kind: ScanSettingBinding
            metadata:
              name: moderate
              namespace: openshift-compliance
            profiles:
            - apiGroup: compliance.openshift.io/v1alpha1
              kind: Profile
              name: ocp4-moderate
            - apiGroup: compliance.openshift.io/v1alpha1
              kind: Profile
              name: ocp4-moderate-node
            settingsRef:
              apiGroup: compliance.openshift.io/v1alpha1
              kind: ScanSetting
              name: default
        remediationAction: enforce
        severity: low
Copy to Clipboard Toggle word wrap
1
dependencies フィールドは Policy オブジェクトに設定され、要件はポリシー内のすべてのポリシーテンプレートに適用されます。
2
extraDependencies フィールドは、個々のポリシーテンプレートで設定できます。たとえば、パラメーターは設定ポリシーに対して設定でき、ポリシーで設定された dependencies に加えて満たす必要がある基準を定義します。
3
ignorePending フィールドは、個々のポリシーテンプレートごとに設定でき、全体的なポリシーコンプライアンスが計算されるときに、そのテンプレートの Pending 状態が Compliant または NonCompliant と見なされるかを設定します。デフォルトでは、これは false に設定されており、Pending テンプレートによりポリシーは NonCompliant になります。これを true に設定すると、このテンプレートが Pending の場合でもポリシーは Compliant のままになります。これは、それがテンプレートの予想されるステータスである場合に便利です。

注記: 依存関係を使用して、別のクラスターのポリシーのステータスに基づいて、あるクラスターにポリシーを適用することはできません。

2.3.5. ポリシーコンプライアンス履歴 API の設定 (テクノロジープレビュー) (非推奨)

ポリシーコンプライアンス履歴 API は、Red Hat Advanced Cluster Management for Kubernetes のポリシーコンプライアンスイベントをクエリー可能な形式で長期間保存する場合に使用できる、オプションのテクニカルプレビュー機能です。この API を使用すると、spec フィールドなどの追加の詳細を取得して、ポリシーを監査およびトラブルシューティングできます。また、ポリシーが無効化されたりクラスターから削除されたりしたときに、コンプライアンスイベントを取得できます。

ポリシーコンプライアンス履歴 API は、監査とトラブルシューティングに役立つ、ポリシーコンプライアンスイベントのコンマ区切り値 (CSV) スプレッドシートを生成することもできます。

2.3.5.1. 前提条件

  • ポリシーコンプライアンス履歴 API には、バージョン 13 以降の PostgreSQL サーバーが必要です。

    Red Hat がサポートする方式は、registry.redhat.io/rhel9/postgresql-15 コンテナーイメージ、registry.redhat.io/rhel8/postgresql-13 コンテナーイメージ、postgresql-server RPM、または postgresql/server モジュールの使用です。各方式のセットアップと設定は、該当する Red Hat 公式ドキュメントを確認してください。ポリシーコンプライアンス履歴 API は、あらゆる標準 PostgreSQL と互換性があり、Red Hat が公式にサポートする製品に限定されません。

  • この PostgreSQL サーバーには、Red Hat Advanced Cluster Management ハブクラスターからアクセスできる必要があります。PostgreSQL サーバーがハブクラスターの外部で実行されている場合は、ハブクラスターが PostgreSQL サーバーのポート 5432 に接続できるように、ルーティングとファイアウォールの設定を確認してください。このポートは、PostgreSQL 設定で上書きされている場合、異なる値である場合があります。

2.3.5.2. コンプライアンス履歴 API の有効化

ポリシーコンプライアンスイベントを API に記録するようにマネージドクラスターを設定します。これは、すべてのクラスターまたはクラスターのサブセットで有効にできます。以下の手順を実行します。

  1. PostgreSQL サーバーをクラスター管理者として設定します。Red Hat Advanced Cluster Management ハブクラスターに PostgreSQL をデプロイした場合は、psql コマンドを使用するために PostgreSQL ポートを一時的にポート転送します。以下のコマンドを実行します。

    oc -n <PostgreSQL namespace> port-forward <PostgreSQL pod name> 5432:5432
    Copy to Clipboard Toggle word wrap
  2. 別のターミナルで、次のようなコマンドを使用して PostgreSQL サーバーにローカルで接続します。

    psql 'postgres://postgres:@127.0.0.1:5432/postgres'
    Copy to Clipboard Toggle word wrap
  3. 次の SQL ステートメントを使用して、Red Hat Advanced Cluster Management ハブクラスターのユーザーとデータベースを作成します。

    CREATE USER "rhacm-policy-compliance-history" WITH PASSWORD '<replace with password>';
    CREATE DATABASE "rhacm-policy-compliance-history" WITH OWNER="rhacm-policy-compliance-history";
    Copy to Clipboard Toggle word wrap
  4. ポリシーコンプライアンス履歴 API にこのデータベースを使用するには、governance-policy-database Secret リソースを作成します。以下のコマンドを実行します。

    oc -n open-cluster-management create secret generic governance-policy-database \ 
    1
    
        --from-literal="user=rhacm-policy-compliance-history" \
        --from-literal="password=rhacm-policy-compliance-history" \
        --from-literal="host=<replace with host name of the Postgres server>" \ 
    2
    
        --from-literal="dbname=ocm-compliance-history" \
      --from-literal="sslmode=verify-full" \
        --from-file="ca=<replace>" 
    3
    Copy to Clipboard Toggle word wrap
    1
    Red Hat Advanced Cluster Management がインストールされている namespace を追加します。デフォルトでは、Red Hat Advanced Cluster Management は open-cluster-management namespace にインストールされます。
    2
    PostgresQL サーバーのホスト名を追加します。PostgreSQL サーバーを Red Hat Advanced Cluster Management ハブクラスターにデプロイし、クラスターの外部に公開されていない場合は、ホスト値に Service オブジェクトを使用できます。形式は <service name>.<namespace>.svc です。このアプローチは、Red Hat Advanced Cluster Management ハブクラスターのネットワークポリシーに依存することに注意してください。
    3
    PostgreSQL サーバーの TLS 証明書に署名した証明機関の証明書ファイルを ca データフィールドに指定する必要があります。この値を指定しない場合は、それに応じて sslmode 値を変更する必要があります。ただし、これはデータベース接続のセキュリティーが低下するため、推奨しません。
  5. Red Hat Advanced Cluster Management ハブクラスターの復元操作のために Secret リソースをバックアップするには、cluster.open-cluster-management.io/backup ラベルを追加します。以下のコマンドを実行します。

    oc -n open-cluster-management label secret governance-policy-database cluster.open-cluster-management.io/backup=""
    Copy to Clipboard Toggle word wrap
  6. PostgreSQL 接続をさらにカスタマイズするには、connectionURL データフィールドを直接使用し、PostgreSQL 接続 URI の形式で値を指定します。パスワード内の特殊文字は URL エンコードする必要があります。1 つの方法として、Python を使用してパスワードの URL エンコード形式を生成する方法があります。たとえば、パスワードが $uper<Secr&t%> の場合は、次の Python コマンドを実行して出力 %24uper%3CSecr%26t%25%3E を取得します。

    python -c 'import urllib.parse; import sys; print(urllib.parse.quote(sys.argv[1]))' '$uper<Secr&t%>'
    Copy to Clipboard Toggle word wrap
  7. governance-policy-database Secret を作成した後、コマンドを実行してポリシーコンプライアンス履歴 API をテストします。OpenShift Route オブジェクトが同じ namespace に自動的に作成されます。Red Hat Advanced Cluster Management ハブクラスターのルートが信頼できる証明書を利用していない場合は、curl コマンドで -k フラグを指定して TLS 検証をスキップすることもできます。ただし、これは推奨されません。

    curl -H "Authorization: Bearer $(oc whoami --show-token)" \
        "https://$(oc -n open-cluster-management get route governance-history-api -o jsonpath='{.spec.host}')/api/v1/compliance-events"
    Copy to Clipboard Toggle word wrap
    • 成功すると、curl コマンドは次のメッセージのような値を返します。

      {"data":[],"metadata":{"page":1,"pages":0,"per_page":20,"total":0}}
      Copy to Clipboard Toggle word wrap
    • 成功しないと、curl コマンドは次の 2 つのメッセージのいずれかを返す可能性があります。

      {"message":"The database is unavailable"}
      Copy to Clipboard Toggle word wrap
      {"message":"Internal Error"}
      Copy to Clipboard Toggle word wrap
    • メッセージを受け取った場合は、次のコマンドを使用して、open-cluster-management namespace 内の Kubernetes イベントを表示します。

      oc -n open-cluster-management get events --field-selector reason=OCMComplianceEventsDBError
      Copy to Clipboard Toggle word wrap
      1. イベントから governance-policy-propagator ログを表示する指示を受け取った場合は、次のコマンドを実行します。

        oc -n open-cluster-management logs -l name=governance-policy-propagator -f
        Copy to Clipboard Toggle word wrap

      ユーザー、パスワード、またはデータベースが正しく指定されていないことを示すエラーメッセージが表示される場合があります。次のメッセージの例を参照してください。

    2024-03-05T12:17:14.500-0500	info	compliance-events-api	complianceeventsapi/complianceeventsapi_controller.go:261	The database connection failed: pq: password authentication failed for user "rhacm-policy-compliance-history"
    Copy to Clipboard Toggle word wrap
  8. 次のコマンドを使用して、governance-policy-database Secret リソースを正しい PostgreSQL 接続設定で更新します。

    oc -n open-cluster-management edit secret governance-policy-database
    Copy to Clipboard Toggle word wrap

2.3.5.3. コンプライアンス履歴 API URL の設定

マネージドクラスターで機能を有効にするには、ポリシーコンプライアンス履歴 API URL を設定します。以下の手順を実行します。

  1. 次のコマンドを使用して、ポリシーコンプライアンス履歴 API の外部 URL を取得します。

    echo "https://$(oc -n open-cluster-management get route governance-history-api -o=jsonpath='{.spec.host}')"
    Copy to Clipboard Toggle word wrap

    出力は、次の情報のようになり、Red Hat Advanced Cluster Management ハブクラスターのドメイン名を含んでいます。

    https://governance-history-api-open-cluster-management.apps.openshift.redhat.com
    Copy to Clipboard Toggle word wrap
  2. 次の例のような AddOnDeploymentConfig オブジェクトを作成します。

    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: AddOnDeploymentConfig
    metadata:
      name: governance-policy-framework
      namespace: open-cluster-management
    spec:
      customizedVariables:
        - name: complianceHistoryAPIURL
          value: <replace with URL from previous command>
    Copy to Clipboard Toggle word wrap
    • value パラメーター値は、コンプライアンス履歴の外部 URL に置き換えます。
2.3.5.3.1. すべてのマネージドクラスターで有効にする

すべてのマネージドクラスターでコンプライアンス履歴 API を有効にして、マネージドクラスターからのコンプライアンスイベントを記録します。以下の手順を実行します。

  1. 次のコマンドを使用して、governance-policy-framework ClusterManagementAddOn オブジェクトが AddOnDeploymentConfig を使用するように設定します。

    oc edit ClusterManagementAddOn governance-policy-framework
    Copy to Clipboard Toggle word wrap
  2. spec.supportedConfigs 配列を追加または更新します。リソースの設定は次のようになります。

      - group: addon.open-cluster-management.io
        resource: addondeploymentconfigs
        defaultConfig:
          name: governance-policy-framework
          namespace: open-cluster-management
    Copy to Clipboard Toggle word wrap
2.3.5.3.2. 単一のマネージドクラスターでコンプライアンス履歴を有効にする

単一のマネージドクラスターでコンプライアンス履歴 API を有効にして、マネージドクラスターからのコンプライアンスイベントを記録します。以下の手順を実行します。

  1. マネージドクラスター namespace で、governance-policy-framework ManagedClusterAddOn リソースを設定します。次のコマンドを使用して、Red Hat Advanced Cluster Management ハブクラスターから次のコマンドを実行します。

    oc -n <manage-cluster-namespace> edit ManagedClusterAddOn governance-policy-framework
    Copy to Clipboard Toggle word wrap
    • <manage-cluster-namespace> プレースホルダーは、有効にするマネージドクラスターの名前に置き換えます。
  2. spec.configs 配列を追加または更新し、次の例のようなエントリーを含めます。

    - group: addon.open-cluster-management.io
      resource: addondeploymentconfigs
      name: governance-policy-framework
      namespace: open-cluster-management
    Copy to Clipboard Toggle word wrap
  3. 設定を確認するには、マネージドクラスター上のデプロイメントで --compliance-api-url コンテナー引数が使用されていることを確認します。以下のコマンドを実行します。

    oc -n open-cluster-management-agent-addon get deployment governance-policy-framework -o jsonpath='{.spec.template.spec.containers[1].args}'
    Copy to Clipboard Toggle word wrap

    出力は次の例のような内容になります。

    ["--enable-lease=true","--hub-cluster-configfile=/var/run/klusterlet/kubeconfig","--leader-elect=false","--log-encoder=console","--log-level=0","--v=-1","--evaluation-concurrency=2","--client-max-qps=30","--client-burst=45","--disable-spec-sync=true","--cluster-namespace=local-cluster","--compliance-api-url=https://governance-history-api-open-cluster-management.apps.openshift.redhat.com"]
    Copy to Clipboard Toggle word wrap

    新しいポリシーコンプライアンスイベントが、すべてポリシーコンプライアンス履歴 API に記録されます。

    1. 特定のマネージドクラスターのポリシーコンプライアンスイベントが記録されていない場合は、影響を受けるマネージドクラスターの governance-policy-framework ログを表示します。

      oc -n open-cluster-management-agent-addon logs deployment/governance-policy-framework -f
      Copy to Clipboard Toggle word wrap
    2. 次のメッセージに類似したログメッセージが表示されます。message 値が空の場合は、ポリシーコンプライアンス履歴 API の URL が正しくないか、ネットワーク通信の問題が発生しています。

      024-03-05T19:28:38.063Z        info    policy-status-sync      statussync/policy_status_sync.go:750    Failed to record the compliance event with the compliance API. Will requeue.       {"statusCode": 503, "message": ""}
      Copy to Clipboard Toggle word wrap
    3. ポリシーコンプライアンス履歴 API URL が正しくない場合は、次のコマンドを使用してハブクラスターの URL を編集します。
    oc -n open-cluster-management edit AddOnDeploymentConfig governance-policy-framework
    Copy to Clipboard Toggle word wrap

    注記: ネットワーク通信の問題が発生した場合は、ネットワークインフラストラクチャーに基づき問題を診断する必要があります。

2.3.5.4. 関連情報

2.3.6. ポリシージェネレータの統合

ポリシージェネレーターを統合すると、Red Hat Advanced Cluster Management for Kubernetes ポリシーを自動的にビルドできます。ポリシージェネレーターを統合するには、ポリシージェネレーター を参照してください。

ポリシージェネレーターで実行できる操作の例は、Compliance Operator をインストールするポリシーの生成 を参照してください。

2.3.7. ポリシージェネレーター

ポリシージェネレーターは、Kustomize を使用して Red Hat Advanced Cluster Management ポリシーを生成する Red Hat Advanced Cluster Management for Kubernetes アプリケーションライフサイクルサブスクリプション Red Hat OpenShift GitOps ワークフローに含まれています。ポリシージェネレーターは、設定に使用される PolicyGenerator マニフェスト YAML ファイル提供の Kubernetes マニフェスト YAML ファイルから Red Hat Advanced Cluster Management ポリシーをビルドします。ポリシージェネレーターは、Kustomize ジェネレータープラグインとして実装されます。Kustomize の詳細は、Kustomize のドキュメント を参照してください。

ポリシージェネレーターの詳細は、次のセクションを参照してください。

2.3.7.1. ポリシージェネレーター機能

ポリシージェネレーターと Red Hat Advanced Cluster Management アプリケーションライフサイクルサブスクリプション OpenShift GitOps ワークフローとの統合により、OpenShift Container Platform マネージドクラスターへの Kubernetes リソースオブジェクトの配布と、Red Hat Advanced Cluster Management ポリシーによる Kubernetes クラスターへの配布がシンプルになります。

ポリシージェネレーターを使用して、次のアクションを実行します。

  • Kustomize ディレクトリーから作成されたマニフェストを含む、任意の Kubernetes マニフェストファイルを Red Hat Advanced Cluster Management 設定ポリシーに変換します。
  • 生成された Red Hat Advanced Cluster Management ポリシーに挿入される前に、入力された Kubernetes マニフェストにパッチを適用します。
  • Red Hat Advanced Cluster Management for Kubernetes で、Gatekeeper ポリシー違反を報告できるように追加の設定ポリシーを生成します。
  • ハブクラスターでポリシーセットを生成します。

2.3.7.2. ポリシージェネレーターの設定構造

ポリシージェネレーターは、PolicyGenerator の種類および policy.open-cluster-management.io/v1 API バージョンのマニフェストで設定される Kustomize ジェネレータープラグインです。以下に、設定構造の詳細を記載しています。

  • プラグインを使用するには、kustomization.yaml ファイルに generators セクションを追加します。以下の例を参照してください。

    generators:
      - policy-generator-config.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    直前の例で参照される policy-generator-config.yaml ファイルは、生成するポリシーの手順を含む YAML ファイルです。
  • 以下は、policyDefaultspolicies を含むシンプルな PolicyGenerator 設定ファイルの例です。

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
      name: config-data-policies
    policyDefaults:
      namespace: policies
      policySets: []
    policies:
      - name: config-data
        manifests:
          - path: configmap.yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    configmap.yaml は、ポリシーに組み込まれる Kubernetes マニフェスト YAML ファイルを表します。また、Kustomize ディレクトリー、または複数の Kubernetes マニフェスト YAML ファイルを含むディレクトリーへのパスを設定できます。以下は、ConfigMap の例です。
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-config
      namespace: default
    data:
      key1: value1
      key2: value2
    Copy to Clipboard Toggle word wrap
  • また、object-templates-raw マニフェストを使用して、追加したコンテンツを含む ConfigurationPolicy を自動的に生成できます。たとえば、次の構文でマニフェストファイルを作成できます。

    object-templates-raw: |
      {{- range (lookup "v1" "ConfigMap" "my-namespace" "").items }}
      - complianceType: musthave
        objectDefinition:
          kind: ConfigMap
          apiVersion: v1
          metadata:
            name: {{ .metadata.name }}
            namespace: {{ .metadata.namespace }}
            labels:
              i-am-from: template
      {{- end }}
    Copy to Clipboard Toggle word wrap
  • マニフェストファイルを作成した後に、PolicyGenerator 設定ファイルを作成できます。次の YAML の例を参照し、path には manifest.yaml ファイルへのパスを入力します。

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
      name: config-data-policies
    policyDefaults:
      namespace: policies
      policySets: []
    policies:
      - name: config-data
        manifests:
          - path: manifest.yaml
    Copy to Clipboard Toggle word wrap
  • 生成された Policy リソース、生成された Placement リソース、および PlacementBinding リソースは、次の例のようになります。注記: リソースの仕様は、ポリシージェネレーター設定表 (参照用) に記載されています。

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: placement-config-data
      namespace: policies
    spec:
      predicates:
      - requiredClusterSelector:
          labelSelector:
            matchExpressions: []
        tolerations:
            - key: cluster.open-cluster-management.io/unavailable
              operator: Exists
            - key: cluster.open-cluster-management.io/unreachable
              operator: Exists
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-config-data
      namespace: policies
    placementRef:
      apiGroup: cluster.open-cluster-management.io
      kind: Placement
      name: placement-config-data
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: config-data
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/description:
      name: config-data
      namespace: policies
    spec:
      disabled: false
      policy-templates:
      - objectDefinition:
          apiVersion: policy.open-cluster-management.io/v1
          kind: ConfigurationPolicy
          metadata:
            name: config-data
          spec:
            object-templates:
            - complianceType: musthave
              objectDefinition:
                apiVersion: v1
                data:
                  key1: value1
                  key2: value2
                kind: ConfigMap
                metadata:
                  name: my-config
                  namespace: default
            remediationAction: inform
            severity: low
    Copy to Clipboard Toggle word wrap

2.3.7.3. ポリシージェネレーター設定表 (参照用)

policyDefaults セクションのすべてのフィールド (namespace を除く) はポリシーごとにオーバーライドでき、policySetDefaults セクションのすべてのフィールドはポリシーセットごとにオーバーライドできます。

Expand
表2.2 パラメーターの表
フィールド任意または必須説明

apiVersion

必須

この値は policy.open-cluster-management.io/v1 に設定します。

kind

必須

ポリシーのタイプを指定するには、値を PolicyGenerator に設定します。

metadata.name

必須

ポリシーリソースを識別する名前。

placementBindingDefaults.name

任意

複数のポリシーが同じ配置を使用する場合、この名前は結果の PlacementBinding の一意の名前を生成するために使用され、配置とそれを参照するポリシーの配列がバインドされます。

policyDefaults

必須

namespace 以外の policies 配列のエントリーによって、ここでリスト表示されるデフォルト値は上書きされます。

policyDefaults.namespace

必須

すべてのポリシーの namespace。

policyDefaults.complianceType

任意

マニフェストとクラスターのオブジェクトを比較する場合のポリシーコントローラーの動作を決定します。使用できる値は、musthavemustonlyhave、または mustnothave です。デフォルト値は musthave です。

policyDefaults.metadataComplianceType

任意

マニフェストメタデータセクションをクラスター上のオブジェクトと比較するときに、complianceType をオーバーライドします。使用できる値は musthavemustonlyhave です。メタデータの complianceType のオーバーライドを避けるため、デフォルト値は空 ({}) です。

policyDefaults.categories

任意

policy.open-cluster-management.io/categories アノテーションで使用されるカテゴリーの配列。デフォルト値は CM Configuration Management です。

policyDefaults.controls

任意

policy.open-cluster-management.io/controls アノテーションで使用されるコントロールの配列。デフォルト値は CM-2 Baseline Configuration です。

policyDefaults.standards

任意

policy.open-cluster-management.io/standards アノテーションで使用する標準の配列。デフォルト値は NIST SP 800-53 です。

policyDefaults.policyAnnotations

任意

ポリシーの metadata.annotations セクションに含まれるアノテーションです。ポリシーで指定されていない限り、すべてのポリシーに適用されます。デフォルト値は空です ({}).。

policyDefaults.configurationPolicyAnnotations

任意

生成された設定ポリシーに設定するアノテーションのキーと値のペアです。たとえば、{"policy.open-cluster-management.io/disable-templates": "true"} というパラメーターを定義することで、ポリシーテンプレートを無効にすることができます。デフォルト値は空です ({}).。

policyDefaults.copyPolicyMetadata

任意

すべてのポリシーのラベルとアノテーションをコピーし、レプリカポリシーに追加します。デフォルトでは true に設定されます。false に設定すると、ポリシーフレームワーク固有のポリシーラベルとアノテーションのみがレプリケートされたポリシーにコピーされます。

policyDefaults.customMessage

任意

設定ポリシーにより発行されるコンプライアンスメッセージを、現在のコンプライアンスに基づき、指定された Go テンプレートの 1 つを使用するように設定します。

policyDefaults.severity

任意

ポリシー違反の重大度。デフォルト値は low です。

policyDefaults.disabled

任意

ポリシーが無効になっているかどうか、つまり、ポリシーが伝播されておらず、結果としてステータスがないことを意味します。ポリシーを有効にするデフォルト値は false です。

policyDefaults.remediationAction

任意

ポリシーの修復メカニズム。パラメーターの値は enforce および inform です。デフォルト値は inform です。

policyDefaults.namespaceSelector

namespace に属するオブジェクトに namespace が指定されていない場合に必須

オブジェクトが適用されるマネージドクラスター内の namespace を決定します。include および exclude パラメーターは、名前で namespace を含めるまたは除外するためのファイルパス式を受け入れます。matchExpressions および matchLabels パラメーターは、対象とする namespace をラベルで指定します。Kubernetes のラベルとセレクター のドキュメントを読んでください。結果のリストは、すべてのパラメーターからの結果の共通部分を使用してコンパイルされます。

policyDefaults.evaluationInterval

任意

特定のコンプライアンス状態にある場合にポリシーを評価する頻度を指定します。compliant および noncompliant パラメーターを使用します。compliant および noncompliant パラメーターのデフォルト値は watch です。これは、Kubernetes API サーバーをポーリングする代わりに Kubernetes API ウォッチを活用します。

マネージドクラスターのリソースが少ない場合は、評価間隔のポーリング間隔を長く設定して、Kubernetes API とポリシーコントローラーでの CPU とメモリーの使用量を削減できます。これらは期間を表す形式です。たとえば、1h25m3s は 1 時間 25 分 3 秒を表します。これらは、特定のコンプライアンス状態になった後にポリシーを評価しないように、never に設定することもできます。

policyDefaults.evaluationInterval.compliant

任意

準拠ポリシーの評価頻度を指定します。以前のポーリング動作を有効にする場合は、このパラメーターを 10s に設定します。

policyDefaults.evaluationInterval.noncompliant

任意

非準拠ポリシーの評価頻度を指定します。以前のポーリング動作を有効にする場合は、このパラメーターを 10s に設定します。

policyDefaults.pruneObjectBehavior

任意

ポリシーが削除されたときに、ポリシーによって作成または監視されているオブジェクトを削除するかどうかを決定します。プルーニングは、ポリシーの修復アクションが enforce に設定されている場合にのみ行われます。値の例は、DeleteIfCreatedDeleteAll、または None です。デフォルト値は None です。

policyDefaults.recreateOption

任意

更新が必要な場合に、オブジェクトを削除して再作成するかどうかを記述します。IfRequired 値は、イミュータブルフィールドを更新する場合にオブジェクトを再作成します。ドライラン更新のサポートがない場合、IfRequired はクラスターに影響しません。Always 値を指定すると、不一致が検出された場合は必ずオブジェクトが再作成されます。

remediationAction パラメーターが inform に設定されている場合、RecreateOption 値は効果がありません。デフォルト値は None です。

policyDefaults.recordDiff

任意

クラスター上のオブジェクトとポリシー内の objectDefinition との差異をログに記録するかどうか、および記録する場所を指定します。コントローラーログに差異を記録する場合は Log に設定し、差異を記録しない場合は None に設定します。デフォルトでは、このパラメーターは空であり、差異はログに記録されません。

policyDefaults.dependencies

任意

このポリシーが適用される前に、特定のコンプライアンス状態にある必要があるオブジェクトのリスト。policyDefaults.orderPoliciestrue に設定されている場合は指定できません。

policyDefaults.dependencies[].name

必須

依存しているオブジェクトの名前。

policyDefaults.dependencies[].namespace

任意

依存しているオブジェクトの namespace。デフォルトは、ポリシージェネレーターに設定されたポリシーの namespace です。

policyDefaults.dependencies[].compliance

任意

オブジェクトが必要とするコンプライアンス状態。デフォルト値は Compliant です。

policyDefaults.dependencies[].kind

任意

オブジェクトの種類。デフォルトでは、種類は Policy に設定されていますが、ConfigurationPolicy などのコンプライアンス状態を持つ他の種類にすることもできます。

policyDefaults.dependencies[].apiVersion

任意

オブジェクトの API バージョン。デフォルト値は policy.open-cluster-management.io/v1 です。

policyDefaults.description

任意

作成するポリシーの説明。

policyDefaults.extraDependencies

任意

このポリシーが適用される前に、特定のコンプライアンス状態にある必要があるオブジェクトのリスト。定義した依存関係は、dependencies リストとは別に各ポリシーテンプレート (ConfigurationPolicy など) に追加されます。policyDefaults.orderManifeststrue に設定されている場合は指定できません。

policyDefaults.extraDependencies[].name

必須

依存しているオブジェクトの名前。

policyDefaults.extraDependencies[].namespace

任意

依存しているオブジェクトの namespace。デフォルトでは、値はポリシージェネレーターに設定されたポリシーの namespace 間に設定されます。

policyDefaults.extraDependencies[].compliance

任意

オブジェクトが必要とするコンプライアンス状態。デフォルト値は Compliant です。

policyDefaults.extraDependencies[].kind

任意

オブジェクトの種類。デフォルト値は Policy ですが、ConfigurationPolicy など、コンプライアンス状態を持つ他の種類にすることもできます。

policyDefaults.extraDependencies[].apiVersion

任意

オブジェクトの API バージョン。デフォルト値は policy.open-cluster-management.io/v1 です。

policyDefaults.ignorePending

任意

ポリシージェネレーターがその依存関係が目的の状態に達するのを待機しているときに、コンプライアンスステータスチェックをバイパスします。デフォルト値は false です。

policyDefaults.orderPolicies

任意

ポリシーの dependencies を自動的に生成して、ポリシーリストで定義した順序で適用されるようにします。デフォルトでは、値は false に設定されています。policyDefaults.dependencies と同時に指定することはできません。

policyDefaults.orderManifests

任意

ポリシーテンプレートに extraDependencies を自動的に生成して、そのポリシーのマニフェストリストで定義した順序で適用されるようにします。policyDefaults.consolidateManifeststrue に設定されている場合は指定できません。policyDefaults.extraDependencies と同時に指定することはできません。

policyDefaults.consolidateManifests

任意

これは、ポリシーでラップされるすべてのマニフェストに対して設定ポリシーを 1 つ生成するかどうかを決定します。false に設定すると、マニフェストごとの設定ポリシーが生成されます。デフォルト値は true です。

policyDefaults.informGatekeeperPolicies (非推奨)

任意

Gatekeeper マニフェストを設定ポリシーで定義せずに直接使用するには、informGatekeeperPolicies を false に設定します。ポリシーが違反した Gatekeeper ポリシーマニフェストを参照している場合は、Red Hat Advanced Cluster Management でポリシー違反を受け取るために追加の設定ポリシーが生成されます。デフォルト値は true です。

policyDefaults.informKyvernoPolicies

任意

このポリシーが Kyverno ポリシーマニフェストを参照すると、Kyverno ポリシーの違反時に Red Hat Advanced Cluster Management でポリシー違反を受け取るために、設定ポリシーを追加で生成するかどうかが決定されます。デフォルト値は true です。

policyDefaults.policyLabels

任意

ポリシーの metadata.labels セクションに含めるラベル。ポリシーで指定されていない限り、policyLabels パラメーターはすべてのポリシーに適用されます。

policyDefaults.gatekeeperEnforcementAction

任意

Gatekeeper 制約の spec.enforcementAction フィールドをオーバーライドします。これは Gatekeeper 制約にのみ適用され、他のマニフェストでは無視されます。設定されていない場合、spec.enforcementAction フィールドは変更されません。

policyDefaults.policySets

任意

ポリシーが参加するポリシーセットの配列。ポリシーセットの詳細は、policySets セクションで定義できます。ポリシーがポリシーセットの一部であると、配置バインディングはそのセットに対して生成されるため、ポリシーに対しては生成されません。policies[].generatePlacementWhenInSet または policyDefaults.generatePlacementWhenInSet を設定して、policyDefaults.policySets をオーバーライドします。

policyDefaults.generatePolicyPlacement

任意

ポリシーの配置マニフェストを生成します。デフォルトでは true に設定されます。false に設定すると、placement が指定されている場合でも、プレースメントマニフェストの生成はスキップされます。

policyDefaults.generatePlacementWhenInSet

任意

ポリシーがポリシーセットの一部である場合、デフォルトでは、ポリシーセットの配置が生成されるため、ジェネレーターはこのポリシーの配置を生成しません。ポリシーの配置とポリシーセットの配置の両方でポリシーをデプロイするには、generatePlacementWhenInSettrue に設定します。デフォルト値は false です。

policyDefaults.placement

任意

ポリシーの配置設定。このデフォルトは、すべてのクラスターに一致する配置設定になります。

policyDefaults.placement.name

任意

同じクラスターラベルセレクターを含む配置を統合するための名前を指定します。

policyDefaults.placement.labelSelector

任意

key:value を使用してクラスターラベルセレクターを定義するか、matchExpressionsmatchLabels、またはその両方に適切な値を指定して、配置を指定します。既存のファイルを指定するには、placementPath を参照してください。

policyDefaults.placement.placementName

任意

クラスターにすでに存在する配置を使用するには、このパラメーターを定義します。Placement は作成されませんが、PlacementBinding はポリシーをこの Placement にバインドします。

policyDefaults.placement.placementPath

任意

既存の配置を再利用するには、kustomization.yaml ファイルの場所を基準とした相対パスを指定します。指定した場合には、デフォルトですべてのポリシーがこの配置を使用します。新しい Placement を生成するには、labelSelector 参照してください。

policyDefaults.placement.clusterSelector (非推奨)

任意

PlacementRule は非推奨になりました。代わりに labelSelector を使用して placement を生成します。key:value を使用してクラスターセレクターを定義するか、matchExpressionsmatchLabels、またはその両方を適切な値で指定することにより、配置ルールを指定します。既存のファイルを指定する場合は、placementRulePath を参照してください。

policyDefaults.placement.placementRuleName (非推奨)

任意

PlacementRule は非推奨になりました。あるいは、placementName を使用して placement を指定します。クラスター上で既存の配置ルールを使用するには、このパラメーターの名前を指定します。PlacementRule は作成されませんが、PlacementBinding によってポリシーが既存の PlacementRule にバインドされます。

policyDefaults.placement.placementRulePath (非推奨)

任意

PlacementRule は非推奨になりました。あるいは、placementPath を使用して配置を指定します。既存の配置ルールを再利用するには、kustomization.yaml ファイルの場所に対する相対パスを指定します。指定した場合は、デフォルトですべてのポリシーがこの配置ルールを使用します。新しい PlacementRule を生成するには、clusterSelector を参照してください。

policySetDefaults

任意

ポリシーセットのデフォルト値。このパラメーターにリストされているデフォルト値は、policySets 配列のエントリーによってオーバーライドされます。

policySetDefaults.placement

任意

ポリシーの配置設定。このデフォルトは、すべてのクラスターに一致する配置設定になります。このフィールドの説明は、policyDefaults.placement を参照してください。

policySetDefaults.generatePolicySetPlacement

任意

ポリシーセットの配置マニフェストを生成します。デフォルトでは true に設定されます。false に設定すると、配置が指定されている場合でも、配置マニフェストの生成はスキップされます。

policies

必須

デフォルト値または policyDefaults で設定される値のいずれかを上書きする値と合わせて作成するポリシーのリスト。追加のフィールドと説明は、policyDefaults を参照してください。

policies.description

任意

作成するポリシーの説明。

policies[].name

必須

作成するポリシーの名前。

policies[].manifests

必須

デフォルト値、この policies 項目に設定された値、または policyDefaults に設定された値のいずれかへのオーバーライドとともに、ポリシーに含める Kubernetes オブジェクトマニフェストのリスト。追加のフィールドと説明は、policyDefaults を参照してください。consolidateManifeststrue に設定されていると、policies[].manifests レベルでオーバーライドできるのは、complianceTypemetadataComplianceType、および recordDiff のみです。

policies[].manifests[].path

必須

単一のファイル、ファイルのフラットディレクトリー、または kustomization.yaml ファイルに関連する Kustomize ディレクトリーへのパス。ディレクトリーが Kustomize ディレクトリーの場合、ジェネレーターは、ポリシーを生成する前にディレクトリーに対して Kustomize を実行します。Kustomize ディレクトリーの Helm チャートを処理する必要がある場合は、ポリシージェネレーターが実行されている環境で POLICY_GEN_ENABLE_HELMtrue に設定して、ポリシージェネレーターの Helm を有効にします。

次のマニフェストがサポートされています。

  • CertificatePolicyConfigurationPolicyOperatorPolicy など、接尾辞に Policy を持つ非ルートポリシータイプのマニフェスト。以前のマニフェストはパッチを除いて変更されず、Policy リソースの policy-templates エントリーとして直接追加されます。informGatekeeperPoliciesfalse に設定されている場合、ゲートキーパー制約も直接含まれます。
  • object-templates-raw キーのみを含むマニフェスト。対応する値は、生成された ConfigurationPolicy リソースで変更されることなく直接使用され、Policy エントリーの policy-templates エントリーとして追加されます。
  • それ以外は、前述のマニフェストをラップするために ConfigurationPolicy オブジェクトが生成されます。結果として得られる ConfigurationPolicy マニフェストは、Policy リソースの policy-templates エントリーとして追加されます。

policies[].manifests[].name

任意

ConsolidateManifestsfalse に設定されている場合に、ConfigurationPolicy リソース名として機能します。パスに複数のマニフェストが存在する場合は、インデックス番号が追加されます。複数のマニフェストが存在し、その名前が指定されている場合、consolidateManifeststrue に設定されていれば、最初のマニフェストの名前がすべてのマニフェストパスに使用されます。

policies[].manifests[].patches

任意

パスのマニフェストに適用する Kustomize パッチのリスト。複数のマニフェストがある場合は、Kustomize がパッチの適用先のマニフェストを特定できるように、パッチに apiVersionkindmetadata.name、および metadata.namespace (該当する場合) フィールドを設定する必要があります。マニフェストが 1 つの場合には、metadata.name および metadata.namespace フィールドにパッチを適用できます。

policies.policyLabels

任意

ポリシーの metadata.labels セクションに含めるラベル。ポリシーで指定されていない限り、policyLabels パラメーターはすべてのポリシーに適用されます。

policySets

任意

作成するポリシーセットのリストと、デフォルト値または policySetDefaults に設定されている値のいずれかへのオーバーライド。ポリシーセットにポリシーを含めるには、policyDefaults.policySetspolicies[].policySets、または policySets.policies を使用します。追加のフィールドと説明は、policySetDefaults を参照してください。

policySets[].name

必須

作成するポリシーセットの名前です。

policySets[].description

任意

作成するポリシーセットの説明です。

policySets[].policies

任意

ポリシーセットに含まれるポリシーのリストです。policyDefaults.policySets または policies[].policySets も指定されていると、リストがマージされます。

2.3.7.4. 関連情報

2.3.8. Compliance Operator をインストールするポリシーの生成

クラスターに Compliance Operator をインストールするポリシーを生成します。Compliance Operator などの namespaced インストールモードを使用する Operator の場合は、OperatorGroup マニフェストも必要になります。

以下の手順を実行します。

  1. NamespaceSubscription、および compliance-operator.yaml という OperatorGroup マニフェストを含む YAML ファイルを作成します。以下の例では、これらのマニフェストを compliance-operator namespace にインストールします。

    apiVersion: v1
    kind: Namespace
    metadata:
      name: openshift-compliance
    ---
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: compliance-operator
      namespace: openshift-compliance
    spec:
      targetNamespaces:
        - openshift-compliance
    ---
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: compliance-operator
      namespace: openshift-compliance
    spec:
      channel: release-0.1
      name: compliance-operator
      source: redhat-operators
      sourceNamespace: openshift-marketplace
    Copy to Clipboard Toggle word wrap
  2. PolicyGenerator 設定ファイルを作成します。すべての OpenShift Container Platform マネージドクラスターに Compliance Operator をインストールする以下の PolicyGenerator ポリシーの例を表示します。

    apiVersion: policy.open-cluster-management.io/v1
    kind: PolicyGenerator
    metadata:
      name: install-compliance-operator
    policyDefaults:
      namespace: policies
      placement:
        labelSelector:
          matchExpressions:
            - key: vendor
              operator: In
              values:
                - "OpenShift"
    policies:
      - name: install-compliance-operator
        manifests:
          - path: compliance-operator.yaml
    Copy to Clipboard Toggle word wrap
  3. ポリシージェネレーターを kustomization.yaml ファイルに追加します。generators セクションの設定は次のようになります。

    generators:
      - policy-generator-config.yaml
    Copy to Clipboard Toggle word wrap

    その結果、生成されたポリシーは次のファイルのようになります。

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: placement-install-compliance-operator
      namespace: policies
    spec:
      predicates:
      - requiredClusterSelector:
          labelSelector:
            matchExpressions:
            - key: vendor
              operator: In
              values:
              - OpenShift
         tolerations:
            - key: cluster.open-cluster-management.io/unavailable
              operator: Exists
            - key: cluster.open-cluster-management.io/unreachable
              operator: Exists
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-install-compliance-operator
      namespace: policies
    placementRef:
      apiGroup: cluster.open-cluster-management.io
      kind: Placement
      name: placement-install-compliance-operator
    subjects:
      - apiGroup: policy.open-cluster-management.io
        kind: Policy
        name: install-compliance-operator
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      annotations:
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/description:
      name: install-compliance-operator
      namespace: policies
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: install-compliance-operator
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: Namespace
                    metadata:
                      name: openshift-compliance
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: operators.coreos.com/v1alpha1
                    kind: Subscription
                    metadata:
                      name: compliance-operator
                      namespace: openshift-compliance
                    spec:
                      channel: release-0.1
                      name: compliance-operator
                      source: redhat-operators
                      sourceNamespace: openshift-marketplace
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: operators.coreos.com/v1
                    kind: OperatorGroup
                    metadata:
                      name: compliance-operator
                      namespace: openshift-compliance
                    spec:
                      targetNamespaces:
                        - compliance-operator
              remediationAction: enforce
              severity: low
    Copy to Clipboard Toggle word wrap

その結果、生成されたポリシーが表示されます。

2.3.9. ガバナンスポリシーフレームワークのアーキテクチャー

Red Hat Advanced Cluster Management for Kubernetes ガバナンスライフサイクルを使用してクラスターのセキュリティーを強化します。製品ガバナンスのライフサイクルは、サポートポリシー、プロセス手順の使用をもとに、中央のインターフェイスページからセキュリティーおよびコンプライアンスを管理します。ガバナンスアーキテクチャーの以下の図を参照してください。

Governance architecture diagram

ガバナンスアーキテクチャーの図は、以下のコンポーネントの説明を参照してください。

  • ガバナンスポリシーフレームワーク: 前のイメージは、マネージドクラスター上で governance-policy-framework Pod として実行され、次のコントローラーを含むフレームワークを表しています。

    • 仕様同期コントローラー: ハブクラスター上のマネージドクラスター namespace 内の複製されたポリシーを、マネージドクラスター上のマネージドクラスター namespace に同期します。
    • ステータス同期コントローラー: ハブおよびマネージドクラスター上の複製されたポリシー内のポリシーコントローラーからのコンプライアンスイベントを記録します。ステータスには、現在のポリシーに関連する更新のみが含まれます。ポリシーが削除されて再作成されると、過去のステータスは考慮されなくなります。
    • テンプレート同期コントローラー: 複製されたポリシー spec.policy-templates エントリーの定義に基づいて、マネージドクラスター上のマネージドクラスター namespace 内のオブジェクトを作成、更新、および削除します。
    • Gatekeeper 同期コントローラー: Gatekeeper 制約監査結果を、対応する Red Hat Advanced Cluster Management ポリシーのコンプライアンスイベントとして記録します。
  • ポリシープロパゲーターコントローラー: Red Hat Advanced Cluster Management ハブクラスター上で実行され、ルートポリシーにバインドされた配置に基づいて、ハブ上のマネージドクラスター namespace に複製されたポリシーを生成します。また、複製されたポリシーのコンプライアンスステータスをルートポリシーステータスに集約し、ルートポリシーにバインドされたポリシー自動化に基づいて自動化を開始します。
  • ガバナンスポリシーアドオンコントローラー: Red Hat Advanced Cluster Management ハブクラスター上で実行され、マネージドクラスター上のポリシーコントローラーのインストールを管理します。

2.3.9.1. ガバナンスアーキテクチャーコンポーネント

ガバナンスアーキテクチャーには、以下のコンポーネントも含まれます。

  • ガバナンスダッシュボード: ポリシーおよびクラスターの違反を含むクラウドガバナンスおよびリスクの詳細の概要を提供します。Red Hat Advanced Cluster Management for Kubernetes ポリシーフレームワークの構造、および Red Hat Advanced Cluster Management for Kubernetes Governance ダッシュボードの使用方法は、Governance ダッシュボードの管理 セクションを参照してください。

    注記:

    • ポリシーがマネージドクラスターに伝播すると、最初にハブクラスターのクラスター namespace にレプリケートされ、namespaceName.policyName を使用して名前とラベルが付けられます。ポリシーを作成するときは、ラベル値の Kubernetes の長さ制限により、namespaceName.policyName の長さが 63 文字を超えないようにしてください。
    • ハブクラスターでポリシーを検索すると、マネージドクラスター namespace で複製されたポリシー名が返される場合もあります。たとえば、default namespace で policy-dhaz-cert を検索すると、ハブクラスターのポリシー名 (default.policy-dhaz-cert) がマネージドクラスターの namespace にも表示される場合があります。
  • ポリシーベースのガバナンスフレームワーク: 地理的リージョンなどのクラスターに関連付けられた属性に基づいて、さまざまなマネージドクラスターへのポリシー作成およびデプロイメントをサポートします。オープンソースコミュニティー には、デフォルトのポリシーの例、およびクラスターにポリシーをデプロイするための手順があります。また、ポリシーに違反した場合は、ユーザーが選択したアクションを実行するように、自動化を設定できます。
  • オープンソースコミュニティー: Red Hat Advanced Cluster Management ポリシーフレームワークの基盤を使用したコミュニティーの貢献をサポートします。ポリシーコントローラーとサードパーティーのポリシーも open-cluster-management/policy-collection リポジトリー に含まれます。GitOps を使用して、ポリシーを投稿およびデプロイできます。

2.3.9.2. 関連情報

2.3.10. ガバナンスダッシュボード

Governance ダッシュボードを使用してリソースを作成、表示、編集し、セキュリティーポリシーとポリシー違反を管理します。コマンドラインとコンソールからポリシーの YAML ファイルを作成できます。コンソールからの ガバナンス ダッシュボードの詳細は、引き続きお読みください。

2.3.10.1. Governance ページ

Governance ページの OverviewPolicy setsPolicies には次のタブが表示されます。どの情報が表示されるかを確認するには、次の説明をお読みください。

  • 概要

    Overview タブで、Policy set violationsPolicy violationsClustersCategoriesControls、および Standards タブから概要カードが表示されます。

  • ポリシーセット

    ハブクラスターポリシーセットを作成および管理します。

  • ポリシー

    • セキュリティーポリシーを作成および管理します。ポリシーの表には、ポリシーの次の詳細がリストされます。NameNamespace、および Cluster violations が表示されます。
    • Actions アイコンを選択すると、修復を編集、有効化、無効化の設定をして、ポリシーの通知、有効化、または削除ができます。特定のポリシーのカテゴリーおよび標準を表示するには、ドロップダウン矢印を選択して行を展開します。
    • Manage column ダイアログボックスでテーブルの列の順序を変更します。Manage column アイコンを選択すると、ダイアログボックスが表示されます。列の順序を変更するには、Reorder アイコンを選択して列名を移動します。表に列を表示するには、その列名のチェックボックスをクリックし、Save ボタンを選択します。
    • 複数のポリシーを選択して Actions ボタンをクリックして、完全な一括処理を行います。Filter ボタンをクリックしてポリシーテーブルをカスタマイズすることもできます。

      表一覧でポリシーを選択すると、コンソールで、以下の情報タブが表示されます。

      • Details: Details タブを選択して、ポリシーの情報、配置の情報を表示します。Placement の表の コンプライアンス 列には、表示されるクラスターのコンプライアンスを確認するためのリンクがあります。
      • Results: Results タブを選択して、ポリシーに関連付けられた全クラスターの表リストを表示します。
  • Message 列から View details リンクをクリックして、テンプレートの詳細、テンプレート YAML、および関連リソースを表示します。関連リソースを表示することもできます。View history リンクをクリックして、違反メッセージと最後のレポートの時間を表示します。

2.3.10.2. ガバナンスの自動化設定

特定のポリシーに設定済みの自動化がある場合は、自動化を選択して詳細を表示できます。自動化のスケジュール頻度オプションに関する以下の説明を参照してください。

  • Manual run: この自動化を手動で設定して 1 回実行します。自動化の実行後に、disabled に設定されます。注記: スケジュール頻度が無効になっている場合のみ Manual run モードを選択できます。
  • Run once mode: ポリシーに違反すると、自動化が 1 回実行されます。自動化の実行後に、disabled に設定されます。自動化が disabled に設定された後は、引き続き自動化を手動で実行する必要があります。once mode を実行すると、target_clusters の追加変数にはポリシーに違反するクラスターのリストが自動的に指定されます。Ansible Automation Platform Job テンプレートでは、EXTRA VARIABLES セクション (extra_vars とも呼ばれる) に対して PROMPT ON LAUNCH が有効になっている必要があります。
  • Run everyEvent モード: ポリシーに違反すると、自動化はマネージドクラスターごとに固有のポリシー違反が発生するたびに毎回実行します。DelayAfterRunSeconds パラメーターを使用して、同じクラスターで自動化を再開できるようになるまでの最小秒数を設定します。ポリシーが遅延期間中に複数回違反され、違反状態のままであると、自動化は遅延期間後に 1 回実行されます。デフォルトは 0 秒で、everyEvent モードにのみ適用されます。everyEvent モードを実行すると、target_clusters と Ansible Automation Platform Job テンプレートの追加変数は once モード と同じになります。
  • Disable automation: スケジュールされた自動化を disabled に設定すると、設定が更新されるまで自動化は実行されません。

以下の変数は、Ansible Automation Platform ジョブの extra_vars で自動的に提供されます。

  • policy_name: ハブクラスターで Ansible Automation Platform ジョブを開始する非準拠のルートポリシーの名前。
  • policy_namespace: ルートポリシーの namespace。
  • hub_cluster: clusters DNS オブジェクトの値によって決定されるハブクラスターの名前。
  • policy_sets: このパラメーターには、ルートポリシーに関連付けられたすべてのポリシーセット名が含まれます。ポリシーがポリシーセット内にないと、policy_set パラメーターは空になります。
  • policy_violations: このパラメーターには、非準拠のクラスター名のリストが含まれており、値は非準拠の各クラスターのポリシー status フィールドです。

2.3.10.3. 関連情報

セキュリティーポリシーの作成および更新の詳細は、以下のトピックを参照してください。

2.3.11. 設定ポリシーの作成

設定ポリシーの YAML ファイルは、コマンドラインインターフェイス (CLI) またはコンソールから作成できます。コンソールから設定ポリシーを作成すると、YAML エディターに YAML ファイルが表示されます。

2.3.11.1. 前提条件

  • 必要なアクセス権限: 管理者およびクラスター管理者
  • 既存の Kubernetes マニフェストがある場合は、ポリシージェネレーターを使用して、ポリシーにマニフェストを自動的に含めることを検討してください。ポリシージェネレーター ドキュメントを参照してください。

2.3.11.2. CLI からの設定ポリシーの作成

CLI から設定ポリシーを作成するには、以下の手順を実行します。

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

    oc create -f configpolicy-1.yaml
    Copy to Clipboard Toggle word wrap

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

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-1
      namespace: my-policies
    policy-templates:
    - apiVersion: policy.open-cluster-management.io/v1
      kind: ConfigurationPolicy
      metadata:
        name: mustonlyhave-configuration
      spec:
        namespaceSelector:
          include: ["default"]
          exclude: ["kube-system"]
        remediationAction: inform
        disabled: false
        complianceType: mustonlyhave
        object-templates:
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドを実行してポリシーを適用します。

    oc apply -f <policy-file-name>  --namespace=<namespace>
    Copy to Clipboard Toggle word wrap
  3. 以下のコマンドを実行してポリシーのリストを確認します。

    oc get policies.policy.open-cluster-management.io --namespace=<namespace>
    Copy to Clipboard Toggle word wrap

設定ポリシーが作成されました。

2.3.11.2.1. CLI からの設定ポリシーの表示

CLI から設定ポリシーを表示するには、以下の手順を実行します。

  1. 以下のコマンドを実行して、特定の設定ポリシーの詳細を表示します。

    oc get policies.policy.open-cluster-management.io <policy-name> -n <namespace> -o yaml
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドを実行して、設定ポリシーの詳細を表示します。

    oc describe policies.policy.open-cluster-management.io <name> -n <namespace>
    Copy to Clipboard Toggle word wrap
2.3.11.2.2. コンソールからの設定ポリシーの表示

コンソールから設定ポリシーおよびそのステータスを表示します。

コンソールからクラスターにログインしたら、Governance を選択してポリシー表の一覧を表示します。注記: ポリシー表の一覧をフィルタリングするには、All policies タブまたは Cluster violations タブを選択します。

詳細を表示するポリシーを 1 つ選択します。DetailsClusters、および Templates タブが表示されます。

2.3.11.3. 設定ポリシーの無効化

設定ポリシーを無効にするには、ポリシーの Actions メニューから Disable policy を選択します。ポリシーは無効になっていますが、削除されていません。

2.3.11.4. 設定ポリシーの削除

CLI またはコンソールから設定ポリシーを削除します。以下の手順を実行します。

  1. ターゲットクラスターからポリシーを削除するには、次のコマンドを実行します。

    oc delete policies.policy.open-cluster-management.io <policy-name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドを実行して、ポリシーが削除されていることを確認します。

    oc get policies.policy.open-cluster-management.io <policy-name> -n <namespace>
    Copy to Clipboard Toggle word wrap
  3. コンソールから設定ポリシーを削除するには、ポリシー違反テーブルで削除するポリシーの Actions アイコンをクリックし、Delete をクリックします。

ポリシーが削除されました。

2.3.11.5. 関連情報

2.3.12. ガバナンスのための Ansible Automation Platform の設定

Red Hat Advanced Cluster Management for Kubernetes ガバナンスを Red Hat Ansible Automation Platform と統合して、ポリシー違反の自動化を作成できます。Red Hat Advanced Cluster Management コンソールで、自動化を設定できます。

2.3.12.1. 前提条件

  • サポート対象の OpenShift Container Platform バージョン
  • Ansible Automation Platform バージョン 3.7.3 以降のバージョンがインストールされている。サポートされている最新バージョンの Ansible Automation Platform をインストールすることを推奨します。詳細は、Red Hat Ansible Automation Platform ドキュメント を参照してください。
  • Operator Lifecycle Manager から Ansible Automation Platform Resource Operator がインストールされている。Update Channel セクションで、stable-2.x-cluster-scoped を選択します。All namespaces on the cluster (default) インストールモードを選択します。

    注記: Ansible Automation Platform ジョブテンプレートを実行する際は、べき等であることを確認してください。Ansible Automation Platform Resource Operator がない場合は、Red Hat OpenShift Container Platform OperatorHub ページから確認することができる。

Red Hat Ansible Automation Platform のインストールと設定の詳細は、Ansible タスクの設定 を参照してください。

2.3.12.2. コンソールからのポリシー違反自動化の作成

Red Hat Advanced Cluster Management ハブクラスターにログインし、ナビゲーションメニューから Governance を選択し、Policies タブをクリックしてポリシーテーブルを表示します。

Automation 列の Configure をクリックして、特定のポリシーの自動化を設定します。ポリシー自動化パネルが表示されたら、自動化を作成できます。Ansible credential セクションから、ドロップダウンメニューをクリックして Ansible 認証情報を選択します。認証情報を追加する必要がある場合は、認証情報の管理 を参照してください。

注記: この認証情報は、ポリシーと同じ namespace にコピーされます。自動化の開始用に作成された AnsibleJob リソースで、この認証情報を使用します。コンソールの Credentials セクションで Ansible 認証情報に加えられた変更は、自動的に更新されます。

認証情報を選択したら、Ansible ジョブドロップダウンリストをクリックしてジョブテンプレートを選択します。Extra variables セクションで、PolicyAutomationextra_vars セクションからパラメーター値を追加します。自動化の頻度を選択します。Run once modeRun everyEvent mode、または Disable automation を選択できます。

Submit を選択して、ポリシー違反の自動化を保存します。Ansible ジョブの詳細パネルから View Job リンクを選択すると、このリンクから Search ページのジョブテンプレートが表示されます。自動化が正常に作成されると、Automation 列に表示されます。

注意: ポリシー自動化が関連付けられているポリシーを削除すると、ポリシー自動化はクリーンアップの一部として自動的に削除されます。

コンソールからポリシー違反の自動化が作成されました。

2.3.12.3. CLI からのポリシー違反自動化の作成

CLI からポリシー違反の自動化を設定するには、以下の手順を実行します。

  1. ターミナルから、oc login コマンドを使用して Red Hat Advanced Cluster Management ハブクラスターに再度ログインします。
  2. 自動化を追加するポリシーを検索するか、作成します。ポリシー名と namespace をメモします。
  3. 以下のサンプルをガイドとして使用して、PolicyAutomation リソースを作成します。

    apiVersion: policy.open-cluster-management.io/v1beta1
    kind: PolicyAutomation
    metadata:
      name: policyname-policy-automation
    spec:
      automationDef:
        extra_vars:
          your_var: your_value
        name: Policy Compliance Template
        secret: ansible-tower
        type: AnsibleJob
      mode: disabled
      policyRef: policyname
    Copy to Clipboard Toggle word wrap
  4. 前のサンプルの Automation テンプレート名は Policy Compliance Template です。この値は、ジョブテンプレート名と一致するように変更してください。
  5. extra_vars セクションで、Automation テンプレートに渡す必要があるパラメーターを追加します。
  6. モードを onceeveryEvent、または disabled に設定します。
  7. policyRef は、ポリシーの名前に設定します。
  8. Ansible Automation Platform 認証情報を含むこの PolicyAutomation リソースと同じ namespace にシークレットを作成します。上記の例では、シークレット名は ansible-tower です。アプリケーションライフサイクルからのサンプル を使用して、シークレットの作成方法を確認します。
  9. PolicyAutomation リソースを作成します。

    注記:

    • 以下のアノテーションを PolicyAutomation リソースに追加することで、ポリシー自動化の即時実行を開始できます。

      metadata:
        annotations:
          policy.open-cluster-management.io/rerun: "true"
      Copy to Clipboard Toggle word wrap
    • ポリシーが once モードの場合は、ポリシーがコンプライアンス違反があると自動化が実行されます。target_clusters という名前の extra_vars 変数が追加され、値はコンプライアンス違反のポリシーが含まれる、各マネージドクラスター名の配列です。
    • ポリシーが everyEvent モードであり、DelayAfterRunSeconds が定義された時間値を超えると、ポリシーは非準拠となり、ポリシー違反ごとに自動化が実行されます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat