2.6. セキュリティーポリシーの管理


セキュリティーポリシーおよびポリシー違反の作成、表示、および管理には、ガバナンス ダッシュボードを使用します。CLI およびコンソールからポリシーの YAML ファイルを作成できます。

2.6.1. ガバナンスページ

以下のタブが Governance ページに表示されます。

  • 概要

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

  • ポリシーセット

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

  • ポリシー

    セキュリティーポリシーを作成および管理します。ポリシーの表では、NameNamespaceStatusRemediationPolicy setCluster violationsSourceAutomation および Created のポリシーの詳細を表示します。

    Actions アイコンを選択すると、修復を編集、有効化、無効化の設定をして、ポリシーの通知、有効化、または削除ができます。特定のポリシーのカテゴリーおよび標準を表示するには、ドロップダウン矢印を選択して行を展開します。

    複数のポリシーを選択して Actions ボタンをクリックして、完全な一括処理を行います。Filter ボタンをクリックしてポリシーテーブルをカスタマイズすることもできます。

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

  • Details: Details タブを選択して、ポリシーの情報、配置の情報を表示します。Placement の表の コンプライアンス 列には、表示されるクラスターのコンプライアンスを確認するためのリンクがあります。
  • Results: Results タブを選択して、ポリシーに関連付けられた全クラスターの表リストを表示します。

    Message 列から View details リンクをクリックして、テンプレートの詳細、テンプレート YAML、および関連リソースを表示します。関連リソースを表示することもできます。View history リンクをクリックして、違反メッセージと最後のレポートの時間を表示します。

2.6.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.6.3. ガバナンスのための Ansible Automation Platform の設定

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

2.6.3.1. 前提条件

  • Red Hat OpenShift Container Platform 4.5 以降
  • 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.6.3.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.6.3.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
  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"
    • ポリシーが once モードの場合は、ポリシーがコンプライアンス違反があると自動化が実行されます。target_clusters という名前の extra_vars 変数が追加され、値はコンプライアンス違反のポリシーが含まれる、各マネージドクラスター名の配列です。
    • ポリシーが everyEvent モードであり、DelayAfterRunSeconds が定義された時間値を超えると、ポリシーは非準拠となり、ポリシー違反ごとに自動化が実行されます。

2.6.4. GitOps を使用したポリシーのデプロイ

ガバナンスフレームワークを使用して、マネージドクラスター全体にポリシーセットをデプロイできます。リポジトリーにポリシーを提供して使用することで、オープンソースコミュニティー (policy-collection) に追加できます。詳細は、カスタムポリシーの取得 を参照してください。オープンソースコミュニティーの各 stable および community フォルダーのポリシーは、NIST Special Publication 800-53 に従ってさらに整理されています。

GitOps を使用して Git リポジトリー経由でポリシーの更新や作成を自動化して追跡する時のベストプラクティスを理解するにはこれ以降のセクションを確認してください。

前提条件: 開始する前に、policy-collection リポジトリーをフォークしてください。

2.6.4.1. ローカルリポジトリーのカスタマイズ

stable および community ポリシーを 1 つのフォルダーにまとめて、ローカルリポジトリーをカスタマイズします。使用しないポリシーを削除します。ローカルリポジトリーをカスタマイズするには、以下の手順を実行します。

  1. リポジトリーに新しいディレクトリーを作成し、デプロイするポリシーを保存します。GitOps のメインのデフォルトブランチに、ローカルの policy-collection リポジトリーにあることを確認します。以下のコマンドを実行します。

    mkdir my-policies
  2. stable および community ポリシーのすべてを my-policies ディレクトリーにコピーします。stable フォルダーにコミュニティーで利用可能なものが重複している場合があるため、community ポリシーから始めます。以下のコマンドを実行します。

    cp -R community/* my-policies/
    
    cp -R stable/* my-policies/

    すべてのポリシーの構造は単一の親ディレクトリーとなっているため、フォークでポリシーを編集できます。

    ヒント:

    • 使用の予定がないポリシーを削除するのがベストプラクティスです。
    • 以下のリストでポリシーおよびポリシーの定義について確認してください。

      • 目的: ポリシーのロールを理解する。
      • 修復アクション: ポリシーで、コンプライアンスの通知だけを行うのか、ポリシーを強制して、変更を加えるのか ?spec.remediationAction パラメーターを参照してください。変更が適用される場合は、想定されている機能を理解するようにしてください。強制のサポートがあるポリシーを確認してください。詳細は、Validate セクションを参照してください。

        注記: ポリシーに設定された spec.remediationAction は、個別の spec.policy-templates で設定される修復アクションを上書きします。

      • 配備: ポリシーのデプロイ先のクラスターは ?デフォルトでは、ほとんどのポリシーは、environment: dev ラベルの付いたクラスターを対象にしています。ポリシーによっては、OpenShift Container Platform クラスターまたは別のラベルをターゲットにできます。追加のラベルを更新または追加して、他のクラスターを組み込むことができます。特定の値がない場合、ポリシーはすべてのクラスターに適用されます。また、ポリシーのコピーを複数作成し、クラスターセットごとに各ポリシーをカスタマイズして、別のクラスターセットには別の方法で設定することができます。

2.6.4.2. ローカルリポジトリーへのコミット

ディレクトリーに行った変更に問題がなければ、変更を Git にコミットしてプッシュし、クラスターによるアクセスを可能にします。

注記: この例は、GitOps でポリシーを使用する基本的な方法を示しており、ブランチの変更を取得する場合には別のワークフローを使用する場合があります。

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

  1. ターミナルから git status を実行して、以前に作成したディレクトリーに最新の変更を確認します。以下のコマンドを使用して、コミットする変更リストに新しいディレクトリーを追加します。

    git add my-policies/
  2. 変更をコミットし、メッセージをカスタマイズします。以下のコマンドを実行します。

    git commit -m “Policies to deploy to the hub cluster”
  3. GitOps に使用するフォークしたリポジトリーのブランチに、変更をプッシュします。以下のコマンドを実行します。

    git push origin <your_default_branch>master

変更がコミットされます。

2.6.4.3. クラスターへのポリシーのデプロイ

変更をプッシュしたら、ポリシーを Red Hat Advanced Cluster Management for Kubernetes インストールにデプロイできます。デプロイメント後、ハブクラスターは Git リポジトリーに通知されます。Git リポジトリーの選択したブランチに追加された変更がクラスターに反映されます。

注記: デフォルトでは、GitOps でデプロイされるポリシーは マージ の調整オプションを使用します。代わりに replace 調整オプションを使用する場合は、apps.open-cluster-management.io/reconcile-option: replace アノテーションを Subscription リソースに追加します。詳細は、アプリケーションライフサイクル を参照してください。

deploy.sh スクリプトは、ハブクラスターに Channel および Subscription リソースを作成します。チャネルは Git リポジトリーに接続し、サブスクリプションは、チャネルを介してクラスターに配置するデータを指定します。その結果、指定のサブディレクトリーで定義された全ポリシーがハブに作成されます。サブスクリプションによりポリシーが作成されると、Red Hat Advanced Cluster Management はポリシーを分析し、定義した配置ルールに基づいて、ポリシーが適用される各マネージドクラスターに関連付けられた namespace に追加のポリシーリソースを作成します。

その後、ポリシーはハブクラスター上にある該当するマネージドクラスターの namespace からマネージドクラスターにコピーされます。そのため、Git リポジトリーのポリシーは、ポリシーの配置ルールで定義される clusterSelector に一致するラベルが付いた全マネージドクラスターにプッシュされます。

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

  1. policy-collection フォルダーから、以下のコマンドを実行してディレクトリーを変更します。

    cd deploy
  2. 以下のコマンドで、コマンドラインインターフェイス (CLI) が正しいクラスターでリソースを作成するように設定されていることを確認します。

    oc cluster-info

    コマンドの出力には、Red Hat Advanced Cluster Management がインストールされているクラスターの API サーバーの詳細が表示されます。正しい URL が表示されない場合は、CLI を正しいクラスターを参照するように設定します。詳細情報は、OpenShift CLI の使用 セクションを参照してください。

  3. アクセス制御およびポリシー整理を行うポリシーの作成先の namespace を作成します。以下のコマンドを実行します。

    oc create namespace policy-namespace
  4. 以下のコマンドを実行してクラスターにポリシーをデプロイします。

    ./deploy.sh -u https://github.com/<your-repository>/policy-collection -p my-policies -n policy-namespace

    your-repository は、Git ユーザー名またはリポジトリー名に置き換えます。

    注記: 参考までに、deploy.sh スクリプトの引数の全リストでは、以下の構文を使用します。

    ./deploy.sh [-u <url>] [-b <branch>] [-p <path/to/dir>] [-n <namespace>] [-a|--name <resource-name>]

    引数については、以下のドキュメントを参照してください。

    • URL: メインの policy-collection リポジトリーからフォークしたリポジトリーへの URL。デフォルトの URL は https://github.com/stolostron/policy-collection.git です。
    • ブランチ: 参照する Git リポジトリーのブランチ。デフォルトのブランチは main です。
    • サブディレクトリーパス: 使用するポリシーを含めるために作成したサブディレクトリーパス。上記のサンプルでは my-policies サブディレクトリーを使用しましたが、開始するフォルダーを指定することもできます。たとえば、my-policies/AC-Access-Control を使用できます。デフォルトのフォルダーは stable です。
    • Namespace: リソースおよびポリシー作成先のハブクラスター上の namespace。これらの手順では、namespace policy-namespace を使用します。デフォルトの namespace は policies です。
    • 名前のプレ接頭辞: Channel および Subscription リソースの接頭辞。デフォルトは demo-stable-policies です。

deploy.sh スクリプトの実行後に、リポジトリーにアクセスできるユーザーはブランチに変更をコミットできます。これにより、クラスターの既存のポリシーに変更がプッシュされます。

注意: サブスクリプションを使用してポリシーをデプロイするには、次の手順を実行します。

  1. open-cluster-management:subscription-admin ClusterRole をサブスクリプションを作成するユーザーにバインドします。
  2. サブスクリプションで許可リストを使用している場合は、次の API エントリーを含めます。

        - apiVersion: policy.open-cluster-management.io/v1
          kinds:
            - "*"
        - apiVersion: policy.open-cluster-management.io/v1beta1
          kinds:
            - "*"
        - apiVersion: apps.open-cluster-management.io/v1
          kinds:
            - PlacementRule
        - apiVersion: cluster.open-cluster-management.io/v1beta1
          kinds:
            - Placement

2.6.4.4. コンソールからの GitOps ポリシーデプロイメントの確認

変更がコンソールからポリシーに適用されていることを確認します。コンソールからポリシーをさらに変更することもできますが、Subscription と Git リポジトリーと調整すると、これらの変更は元に戻されます。以下の手順を実行します。

  1. Red Hat Advanced Cluster Management クラスターにログインします。
  2. ナビゲーションメニューから Govern を選択します。
  3. 表にデプロイされたポリシーを見つけます。GitOps を使用してデプロイしたポリシーには、Source 列に Git ラベルが付いています。ラベルをクリックして、Git リポジトリーの詳細を表示します。
2.6.4.4.1. CLI からの GitOps ポリシーデプロイメントの確認

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

  1. 以下のポリシーの詳細を確認してください。

    • 配信先のクラスターで特定のポリシーが準拠している/準拠していないのはなぜか ?
    • ポリシーが正しいクラスターに適用されているか ?
    • このポリシーがクラスターに配布されていない場合は、なぜか ?
  2. 作成または変更した GitOps のデプロイポリシーを特定します。GitOps のデプロイポリシーは、自動適用されるアノテーションで特定できます。GitOps のデプロイポリシーのアノテーションは、以下のパスのようになります。

    apps.open-cluster-management.io/hosting-deployable: policies/deploy-stable-policies-Policy-policy-role9
    
    apps.open-cluster-management.io/hosting-subscription: policies/demo-policies
    
    apps.open-cluster-management.io/sync-source: subgbk8s-policies/demo-policies

    GitOps アノテーションは、ポリシーが作成されたサブスクリプションを確認するのに役立ちます。独自のラベルをポリシーに追加して、ラベルに基づいてポリシーを選択するランタイムクエリーを作成することもできます。

    たとえば、次のコマンドを使用してポリシーにラベルを追加できます。

    oc label policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace> <key>=<value>

    続いて、以下のコマンドでラベルのあるポリシーをクエリーします。

    oc get policies.policy.open-cluster-management.io -n <policy-namespace> -l <key>=<value>

ポリシーは GitOps を使用してデプロイされます。

2.6.5. 設定ポリシーでのテンプレートのサポート

設定ポリシーは、オブジェクト定義での Golang テキストテンプレートの追加をサポートします。これらのテンプレートは、そのクラスターに関連する設定を使用して、ハブクラスターまたはターゲットのマネージドクラスターでランタイム時に解決されます。これにより、動的コンテンツで設定ポリシーを定義でき、ターゲットクラスターに、カスタマイズされた Kubernetes リソースを通知したり、強制的に実行したりできます。

2.6.5.1. 前提条件

  • テンプレート構文は Golang テンプレート言語仕様に準拠し、解決されたテンプレートから生成されるリソース定義は有効な YAML である必要がある。詳細は、Golang ドキュメントの Package templates を参照。テンプレート検証のエラーは、ポリシー違反として認識されます。カスタムのテンプレート関数を使用する場合、値はランタイム時に置き換えられる。

2.6.5.2. テンプレート関数

リソース固有および汎用の lookup テンプレート関数など、テンプレート関数は、ハブクラスター ({{hub …​ hub}} 区切り文字の使用) またはマネージドクラスター ({{ …​ }} 区切り文字の使用) 上の Kubernetes リソースを参照するために用意されています。詳細は、設定ポリシーでのハブクラスターテンプレートのサポート を参照してください。リソース固有の関数は利便性があり、リソースの内容の使いやすさを高めます。より高度な汎用関数 lookup を使用する場合には、検索されるリソースの YAML 構造について理解しておくことが推奨されます。これらの関数に加えて、base64enc、base64dec、indent、autoindent、toInt、toBool などのユーティリティー関数も使用できます。

YAML 構文でテンプレートに準拠するには、テンプレートは引用符またはブロック文字 (| または >) を使用して文字列としてポリシーリソースで設定する必要があります。これにより、解決済みのテンプレート値も文字列になります。これを上書きするには、toInt または toBool をテンプレート内で最終関数として使用して、値を整数またはブール値として強制的に解釈する追加の処理を開始します。

サポート対象のカスタムテンプレート関数の説明と例について確認するには、以下を参照してください。

2.6.5.2.1. fromSecret 関数

fromSecret 関数は、シークレット内にある指定のデータキーの値を返します。関数については、以下の構文を確認してください。

func fromSecret (ns string, secretName string, datakey string) (dataValue string, err error)

この関数を使用するには、Kubernetes Secret リソースの namespace、名前、およびデータキーを入力します。ハブクラスターテンプレートの関数を使用する場合は、ポリシーに使用されるのと同じ namespace を使用する必要があります。詳細は、設定ポリシーでのハブクラスターテンプレートのサポート を参照してください。

注意: この関数をハブクラスターテンプレートで使用すると、保護関数 を使用して出力が自動的に暗号化されます。

Kubernetes Secret がターゲットクラスターに存在しない場合は、ポリシー違反が表示されます。データキーがターゲットクラスターに存在しない場合は、値が空の文字列になります。以下で、ターゲットクラスターで Secret リソースを有効にする設定ポリシーを確認します。PASSWORD データキーの値は、ターゲットクラスターのシークレットを参照するテンプレートを指します。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
      apiVersion: v1
      data:
        USER_NAME: YWRtaW4=
        PASSWORD: '{{ fromSecret "default" "localsecret" "PASSWORD" }}'
      kind: Secret
      metadata:
        name: demosecret
        namespace: test
      type: Opaque
  remediationAction: enforce
  severity: low
2.6.5.2.2. fromConfigmap 関数

fromConfigMap 関数は、ConfigMap 内にある指定のデータキーの値を返します。関数については、以下の構文を確認してください。

func fromConfigMap (ns string, configmapName string, datakey string) (dataValue string, err Error)

この関数を使用するには、Kubernetes ConfigMap リソースの namespace、名前、およびデータキーを入力します。ハブクラスターテンプレートの関数を使用するポリシーに使用されるのと同じ namespace を使用する必要があります。詳細は、設定ポリシーでのハブクラスターテンプレートのサポート を参照してください。Kubernetes ConfigMap リソースまたはデータキーがターゲットクラスターに存在しない場合は、ポリシー違反が表示されます。データキーがターゲットクラスターに存在しない場合は、値が空の文字列になります。以下で、ターゲットのマネージドクラスターで Kubernetes リソースを有効にする設定ポリシーを表示します。log-file データキーの値は、ConfigMap から log-filedefault namespace から log-config の値を取得するテンプレートであり、log-level はデータキーの log-level に設定されます。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromcm-lookup
  namespace: test-templates
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
      kind: ConfigMap
      apiVersion: v1
      metadata:
        name: demo-app-config
        namespace: test
      data:
        app-name: sampleApp
        app-description: "this is a sample app"
        log-file: '{{ fromConfigMap "default" "logs-config" "log-file" }}'
        log-level: '{{ fromConfigMap "default" "logs-config" "log-level" }}'
  remediationAction: enforce
  severity: low
2.6.5.2.3. fromClusterClaim 関数

fromClusterClaim 関数は、ClusterClaim リソースの Spec.Value の値を返します。関数については、以下の構文を確認してください。

func fromClusterClaim (clusterclaimName string) (dataValue string, err Error)

この関数を使用する場合は、Kubernetes ClusterClaim リソースの名前を入力します。ClusterClaim リソースが存在しない場合は、ポリシー違反が表示されます。以下で、ターゲットのマネージドクラスターで Kubernetes リソースを有効にする設定ポリシーの例を確認してください。platform データキーの値は、platform.open-cluster-management.io クラスター要求の値を取得するテンプレートです。同様に、productversion の値は ClusterClaim から取得します。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-clusterclaims
  namespace: default
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
      kind: ConfigMap
      apiVersion: v1
      metadata:
        name: sample-app-config
        namespace: default
      data:
        # Configuration values can be set as key-value properties
        platform: '{{ fromClusterClaim "platform.open-cluster-management.io" }}'
        product: '{{ fromClusterClaim "product.open-cluster-management.io" }}'
        version: '{{ fromClusterClaim "version.openshift.io" }}'
  remediationAction: enforce
  severity: low
2.6.5.2.4. lookup 関数

lookup 関数は、JSON と互換性のあるマップとして Kubernetes リソースを返します。要求されたリソースが存在しない場合は、空のマップが返されます。リソースが存在せず、値が別のテンプレート関数に提供されている場合は、エラー invalid value; expected string が発生する可能性があります。

注記: default テンプレート関数を使用して、後のテンプレート関数に正しい型が提供されるようにします。オープンソースコミュニティー機能 セクションを参照してください。

関数については、以下の構文を確認してください。

func lookup (apiversion string, kind string, namespace string, name string) (value string, err Error)

この関数を使用する場合は、Kubernetes リソースの API バージョン、kind、namespace、および name を入力します。ハブクラスターテンプレート内のポリシーに使用されるものと同じ namespace を使用する必要があります。詳細は、設定ポリシーでのハブクラスターテンプレートのサポート を参照してください。以下で、ターゲットのマネージドクラスターで Kubernetes リソースを有効にする設定ポリシーの例を確認してください。metrics-url データキーの値は、default namespace から v1/Service Kubernetes リソースの metrics を取得するテンプレートであり、クエリーされたリソースにある Spec.ClusterIP の値に設定されます。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-lookup
  namespace: test-templates
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
      kind: ConfigMap
      apiVersion: v1
      metadata:
        name: demo-app-config
        namespace: test
      data:
        # Configuration values can be set as key-value properties
        app-name: sampleApp
        app-description: "this is a sample app"
        metrics-url: |
          http://{{ (lookup "v1" "Service" "default" "metrics").spec.clusterIP }}:8080
  remediationAction: enforce
  severity: low
2.6.5.2.5. base64enc 関数

base64enc 関数は、入力 data stringbase64 でエンコードされた値で返します。関数については、以下の構文を確認してください。

func base64enc (data string) (enc-data string)

この関数を使用する場合は、文字列値を入力します。以下は、base64enc 関数を使用する設定ポリシーの例になります。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    data:
      USER_NAME: '{{ fromConfigMap "default" "myconfigmap" "admin-user" | base64enc }}'
2.6.5.2.6. base64dec 関数

base64dec 関数は、入力 enc-data 文字列base64 デコードされた値で返します。関数については、以下の構文を確認してください。

func base64dec (enc-data string) (data string)

この関数を使用する場合は、文字列値を入力します。以下は、base64dec 関数を使用する設定ポリシーの例になります。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    data:
      app-name: |
         "{{ ( lookup "v1"  "Secret" "testns" "mytestsecret") .data.appname ) | base64dec }}"
2.6.5.2.7. indent 関数

indent 関数により、パディングされた データ文字列 が返されます。関数については、以下の構文を確認してください。

func indent (spaces  int,  data string) (padded-data string)

この関数を使用する場合は、特定のスペース数でデータ文字列を入力します。以下は、indent 関数を使用する設定ポリシーの例になります。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    data:
      Ca-cert:  |
        {{ ( index ( lookup "v1" "Secret" "default" "mycert-tls"  ).data  "ca.pem"  ) |  base64dec | indent 4  }}
2.6.5.2.8. autoindent 関数

autoindent 関数は、indent 関数のように機能し、テンプレートの前のスペース数に基づいて自動的に先頭のスペース数を決定します。以下は、autoindent 関数を使用する設定ポリシーの例になります。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-fromsecret
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    data:
      Ca-cert:  |
        {{ ( index ( lookup "v1" "Secret" "default" "mycert-tls"  ).data  "ca.pem"  ) |  base64dec | autoindent }}
2.6.5.2.9. toInt 関数

toInt 関数は入力値の整数値をキャストして返します。また、テンプレートの最後の関数である場合は、ソースコンテンツがさらに処理されます。これは、YAML で値が整数として解釈されるようにするためです。関数については、以下の構文を確認してください。

func toInt (input interface{}) (output int)

この関数を使用する場合は、整数としてキャストする必要があるデータを入力します。以下は、toInt 関数を使用する設定ポリシーの例になります。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-template-function
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    spec:
      vlanid:  |
        {{ (fromConfigMap "site-config" "site1" "vlan")  | toInt }}
2.6.5.2.10. toBool 関数

toBool 関数は、入力文字列をブール値に変換し、ブール値を返します。また、テンプレートの最後の関数である場合は、ソースコンテンツがさらに処理されます。これは、YAML で値がブール値として解釈されるようにするためです。関数については、以下の構文を確認してください。

func toBool (input string) (output bool)

この関数を使用する場合は、ブール値に変換する必要のある文字列データを入力します。以下は、toBool 関数を使用する設定ポリシーの例になります。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-template-function
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    spec:
      enabled:  |
        {{ (fromConfigMap "site-config" "site1" "enabled")  | toBool }}
2.6.5.2.11. protect 関数

protect 機能により、ハブクラスターポリシーテンプレートで文字列を暗号化できます。これは、ポリシーの評価時にマネージドクラスターで自動的に復号化されます。以下は、protect 関数を使用する設定ポリシーの例になります。

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: demo-template-function
  namespace: test
spec:
  namespaceSelector:
    exclude:
    - kube-*
    include:
    - default
  object-templates:
  - complianceType: musthave
    objectDefinition:
    ...
    spec:
      enabled:  |
        {{hub (lookup "v1" "Secret" "default" "my-hub-secret").data.message | protect hub}}

前述の YAML の例では、lookup 関数を使用するために定義した既存のハブクラスターポリシーテンプレートがあります。マネージドクラスターの namespace に複製されたポリシーでは、値は $ocm_encrypted:okrrBqt72oI+3WT/0vxeI3vGa+wpLD7Z0ZxFMLvL204= のようになります。

それぞれの暗号化アルゴリズムは、256 ビットキーを使用した AES-CBC です。各暗号化キーはマネージドクラスターごとに一意で、30 日ごとに自動的にローテーションされます。

これにより、復号化された値がマネージドクラスターのポリシーに保存されることはありません。

即時のローテーションを強制するには、ハブクラスターのマネージドクラスター namespace の policy-encryption-key Secret で policy.open-cluster-management.io/last-rotated アノテーションを削除します。その後、ポリシーが再処理され、新しい暗号化キーが使用されます。

2.6.5.2.12. toLiteral 関数

toLiteral 関数は、処理後にテンプレート文字列を囲む引用符をすべて削除します。この関数を使用して、JSON 文字列を ConfigMap フィールドからマニフェストの JSON 値に変換できます。次の関数を実行して、key パラメーター値から引用符を削除します。

key: '{{ "[\"10.10.10.10\", \"1.1.1.1\"]" | toLiteral }}'

toLiteral 関数を使用すると、次の更新が表示されます。

key: ["10.10.10.10", "1.1.1.1"]
2.6.5.2.13. オープンソースコミュニティー機能

さらに、Red Hat Advanced Cluster Management は、sprig オープンソースプロジェクトに含まれる以下のテンプレート関数をサポートします。

  • cat
  • contains
  • default
  • fromJson
  • hasPrefix
  • hasSuffix
  • join
  • list
  • lower
  • mustFromJson
  • quote
  • replace
  • semver
  • semverCompare
  • split
  • splitn
  • ternary
  • trim
  • until
  • untilStep
  • upper

詳細は、Sprig 関数のドキュメント を参照してください。

2.6.5.3. 設定ポリシーでのハブクラスターテンプレートのサポート

Red Hat Advanced Cluster Management は、ターゲットクラスターに動的にカスタマイズされたマネージドクラスターテンプレートのほかに、ハブクラスターからの値を使用して設定ポリシーを定義するためのハブクラスターテンプレートもサポートします。この組み合わせにより、ポリシー定義の各ターゲットクラスターまたはハードコーディング設定値に個別のポリシーを作成する必要がなくなります。

ハブクラスターテンプレートは Golang テキストテンプレートの仕様をベースとしており、{{hub … hub}} 区切り文字は設定ポリシーのハブクラスターテンプレートを示します。

セキュリティーを確保するには、ハブクラスターテンプレートのリソース固有および一般的なルックアップ機能の両方が、ハブクラスターのポリシーの namespace に制限されます。詳細は、ハブおよびマネージドクラスターテンプレートの比較 をご覧ください。

重要: ハブクラスターテンプレートを使用してシークレットや他の機密データを伝播する場合には、機密データはハブクラスターにあるマネージドクラスターの namespace か、そのポリシーが配布されているマネージドクラスター上に存在します。テンプレートの内容はポリシーで拡張され、 OpenShift Container Platform ETCD 暗号化サポートでは、ポリシーは暗号化されません。これに対処するには、シークレットからの値を自動的に暗号化する fromSecret を使用するか、他の値を暗号化するために protect します。

2.6.5.3.1. テンプレート処理

設定ポリシー定義には、ハブクラスターとマネージドクラスターのテンプレートの両方を含めることができます。ハブクラスターテンプレートは、先にハブクラスターで処理され、解決されたハブクラスターテンプレートを使用したポリシー定義がターゲットクラスターに伝播されます。マネージドクラスターでは、ConfigurationPolicyController はポリシー定義内のマネージドクラスターテンプレートを処理し、その後、完全に解決されたオブジェクト定義を有効にするか、検証します。

2.6.5.3.2. 再処理のための特別なアノテーション

ハブクラスターテンプレートは、ポリシーの作成中、または参照されたリソースが更新されたときに、参照されたリソースのデータに解決されます。

更新を手動で開始する必要がある場合は、特別なアノテーション policy.open-cluster-management.io/trigger-update を使用して、テンプレートによって参照されるデータの変更を示します。特別なアノテーション値を変更すると、テンプレート処理が自動的に開始されます。さらに、参照されたリソースの最新のコンテンツが読み取られ、ポリシー定義で更新されます。ポリシー定義は、マネージドクラスターでの処理のために伝達されます。このアノテーションを使用する方法の 1 つは、値を毎回 1 ずつインクリメントすることです。

2.6.5.4. オブジェクトテンプレートの処理

YAML 文字列表現を使用してオブジェクトテンプレートを設定します。object-template-raw パラメーターは、if-else や range 関数などの高度なテンプレートのユースケースをサポートするオプションのパラメーターです。次の例は、Sea Otter と等しい name キーを持つ defaultの namespace 内の任意の ConfigMap に species-category: mammal ラベルを追加するように定義されています。

object-templates-raw: |
  {{- range (lookup "v1" "ConfigMap" "default" "").items }}
  {{- if eq .data.name "Sea Otter" }}
  - complianceType: musthave
    objectDefinition:
      kind: ConfigMap
      apiVersion: v1
      metadata:
        name: {{ .metadata.name }}
        namespace: {{ .metadata.namespace }}
        labels:
          species-category: mammal
  {{- end }}
  {{- end }}

注記: spec.object-templatesspec.object-templates-raw はオプションですが、2 つのパラメーターフィールドのいずれかを設定する必要があります。

2.6.5.4.1. テンプレート処理のバイパス

Red Hat Advanced Cluster Management による処理を目的としていないテンプレートを含めて、ポリシーを作成する場合があります。デフォルトでは、Red Hat Advanced Cluster Management は全テンプレートを処理します。

ハブクラスターのテンプレート処理を省略するには、{{ template content }}{{ `{{ template content }}` }} に変更する必要があります。

または、PolicyConfigurationPolicy セクションに policy.open-cluster-management.io/disable-templates: "true" のアノテーションを追加します。このアノテーションを追加する場合に、1 つ前の回避策は必要ありません。ConfigurationPolicy のテンプレート処理はバイパスされます。

ハブクラスターとマネージドクラスターのテンプレートの比較は、以下の表を参照してください。

2.6.5.4.2. ハブクラスターとマネージドクラスターテンプレートの比較
表2.13 比較表
テンプレートハブクラスターマネージドクラスター

構文

Golang テキストテンプレートの仕様

Golang テキストテンプレートの仕様

デリミタ

{{hub … hub}}

{{ … }}

コンテキスト

.ManagedClusterName 変数を使用できます。これはランタイム時に、ポリシーが伝播されるターゲットクラスターの名前に解決されます。

コンテキスト変数はありません

アクセス制御

Policy リソースと同じ namespace に存在する namespace を使用した Kubernetes オブジェクトのみを参照できます。

クラスターの任意のリソースを参照できます。

関数

Kubernetes リソースおよび文字列操作への動的なアクセスをサポートするテンプレート関数のセット。詳細は、テンプレート関数 を参照してください。検索制限については、アクセス制御の行を参照してください。

ハブクラスターの fromSecret テンプレート機能は、結果の値をマネージドクラスターの namespace に複製されたポリシーで暗号化された文字列として保存します。

同等の呼び出しは、次の構文を使用する場合があります: {{hub "(lookup "v1" "Secret" "default" "my-hub-secret").data.message | protect hub}}

テンプレート関数セットは、Kubernetes リソースおよび文字列操作への動的なアクセスをサポートします。詳細は、テンプレート関数 を参照してください。

関数出力ストレージ

テンプレート関数の出力は、マネージドクラスターに同期される前に、マネージドクラスターで適用可能な各マネージドクラスター namespace の Policy resource オブジェクトに保存されます。つまり、テンプレート関数からの結果は機密な内容であっても、ハブクラスター上の Policy リソースオブジェクトや、マネージドクラスター上の ConfigurationPolicy リソースオブジェクトへの読み取り権限がある全ユーザーによる読み取りが可能です。さらに、etcd 暗号化 が有効な場合には、Policy および ConfigurationPolicy リソースオブジェクトは暗号化されません。機密な情報の出力を返すテンプレート関数 (シークレットなど) を使用する場合には、この点を慎重に検討することが推奨されます。

テンプレート関数の出力は、ポリシー関連のリソースオブジェクトには保存されません。

処理

複製されたポリシーのクラスターへの伝播中に、ハブクラスターのランタイムで処理が発生します。ポリシーと、そのポリシー内にあるハブクラスターのテンプレートは、テンプレートの作成時または更新時にのみハブクラスターで処理されます。

処理は、マネージドクラスターの ConfigurationPolicyController で実行されます。ポリシーは定期的に処理され、参照されるリソースのデータを使用して解決されたオブジェクト定義を自動的に更新します。

エラーの処理

ハブクラスターテンプレートからのエラーは、ポリシーの適用先のマネージドクラスターの違反として表示されます。

マネージドクラスターテンプレートからのエラーは、違反が発生した特定のターゲットクラスターの違反として表示されます。

2.6.6. セキュリティーポリシーの管理

指定したセキュリティー標準、カテゴリー、および制御に基づいてクラスターのコンプライアンスを報告および検証するためのセキュリティーポリシーを作成します。

以下のセクションを参照してください。

2.6.6.1. セキュリティーポリシーの作成

コマンドラインインターフェイス (CLI) またはコンソールからセキュリティーポリシーを作成できます。

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

重要: ポリシーを特定のクラスターに適用するには、配置ルールおよび配置バインディングを定義する必要があります。Cluster selector フィールドに値を入力して、PlacementRulePlacementBinding を定義します。有効な式については、Kubernetes ドキュメントの セットベースの要件をサポートするリソース を参照してください。Red Hat Advanced Cluster Management for Kubernetes ポリシーに必要なオブジェクトの定義を表示します。

  • PlacementRule: ポリシーをデプロイする必要のある クラスターセレクター を定義します。
  • PlacementBinding: 配置を配置ルールにバインドします。

ポリシー YAML ファイルに関する詳細は、ポリシーの概要 を参照してください。

2.6.6.1.1. コマンドラインインターフェイスからのセキュリティーポリシーの作成

コマンドラインインターフェイス (CLI) からポリシーを作成するには、以下の手順を実行します。

  1. 以下のコマンドを実行してポリシーを作成します。

    kubectl create -f policy.yaml -n <policy-namespace>
  2. ポリシーが使用するテンプレートを定義します。.yaml ファイルを編集し、policy-templates フィールドを追加してテンプレートを定義します。ポリシーは以下の YAML ファイルのようになります。

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy1
    spec:
      remediationAction: "enforce" # or inform
      disabled: false # or true
      namespaceSelector:
        include:
        - "default"
        - "my-namespace"
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: operator
              # namespace: # will be supplied by the controller via the namespaceSelector
            spec:
              remediationAction: "inform"
              object-templates:
              - complianceType: "musthave" # at this level, it means the role must exist and must have the following rules
                apiVersion: rbac.authorization.k8s.io/v1
                kind: Role
                metadata:
                  name: example
                objectDefinition:
                  rules:
                    - complianceType: "musthave" # at this level, it means if the role exists the rule is a musthave
                      apiGroups: ["extensions", "apps"]
                      resources: ["deployments"]
                      verbs: ["get", "list", "watch", "create", "delete","patch"]
  3. PlacementRule を定義します。clusterSelector を調整して、PlacementRule を変更し、ポリシーを適用する必要があるクラスターを指定してください。配置ルールの例の概要 を確認してください。

    PlacementRule は以下のようになります。

    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: placement1
    spec:
      clusterConditions:
        - type: ManagedClusterConditionAvailable
          status: "True"
      clusterNames:
      - "cluster1"
      - "cluster2"
    - clusterSelector
        matchLabels:
          cloud: IBM
  4. PlacementBinding を定義して、ポリシーを PlacementRule をバインドします。PlacementBinding は以下の YAML の例のようになります。

    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding1
    placementRef:
      name: placement1
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
    subjects:
    - name: policy1
      apiGroup: policy.open-cluster-management.io
      kind: Policy
2.6.6.1.1.1. CLI からのセキュリティーポリシーの表示

以下の手順を実行して、CLI からセキュリティーポリシーを表示します。

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

    kubectl get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace> -o yaml
  2. 以下のコマンドを実行して、セキュリティーポリシーの詳細を表示します。

    kubectl describe policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>
2.6.6.1.2. コンソールからのクラスターセキュリティーポリシーの作成

Red Hat Advanced Cluster Management にログインしたら、Governance ページに移動し、Create policy をクリックします。

コンソールから新規ポリシーを作成すると、YAML エディターで YAML ファイルも作成されます。YAML エディターを表示するには、Create policy フォームの最初にトグルを選択して有効にします。

Create policy フォームに入力し、Submit ボタンを選択します。

YAML ファイルは以下のポリシーのようになります。

apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
  name: policy-pod
  annotations:
    policy.open-cluster-management.io/categories: 'SystemAndCommunicationsProtections,SystemAndInformationIntegrity'
    policy.open-cluster-management.io/controls: 'control example'
    policy.open-cluster-management.io/standards: 'NIST,HIPAA'
spec:
  complianceType: musthave
  namespaces:
    exclude: ["kube*"]
    include: ["default"]
    pruneObjectBehavior: None
  object-templates:
  - complianceType: musthave
    objectDefinition:
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod1
      spec:
        containers:
        - name: pod-name
          image: 'pod-image'
          ports:
          - containerPort: 80
  remediationAction: enforce
  disabled: false

---
apiVersion: apps.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
  name: binding-pod
placementRef:
  name: placement-pod
  kind: PlacementRule
  apiGroup: apps.open-cluster-management.io
subjects:
- name: policy-pod
  kind: Policy
  apiGroup: policy.open-cluster-management.io

---
apiVersion: apps.open-cluster-management.io/v1
 kind: PlacementRule
 metadata:
   name: placement-pod
spec:
  clusterConditions: []
  clusterSelector:
     matchLabels:
       cloud: "IBM"

Create Policy をクリックします。コンソールからセキュリティーポリシーが作成されました。

2.6.6.1.2.1. コンソールからのセキュリティーポリシーの表示

コンソールからセキュリティーポリシーおよびそのステータスを表示します。Governance ページに移動し、ポリシー表の一覧を表示します。注記: ポリシー表の一覧をフィルタリングするには、Policies タブまたは Cluster violations タブを選択します。

詳細を表示するポリシーを 1 つ選択します。DetailsClusters、および Templates タブが表示されます。クラスターまたはポリシーのステータスを判断できない場合は、No status メッセージが表示されます。

2.6.6.1.3. CLI からのポリシーセットの作成

デフォルトでは、ポリシーまたは配置のないポリシーセットが作成されます。ポリシーセットの配置を作成し、クラスターに存在するポリシーを 1 つ以上設定する必要があります。ポリシーセットを作成する場合は、多くのポリシーを追加できます。以下のコマンドを実行して CLI からポリシーセットを作成します。

kubectl apply -f <policyset-filename>
2.6.6.1.4. コンソールからのポリシーセットの作成

ナビゲーションメニューから Govern を選択します。次に、Policy sets タブを選択します。Create policy set ボタンを選択し、フォームを完了します。ポリシーセットの詳細情報を追加したら、Submit ボタンを選択します。

デプロイメント用のポリシージェネレーターである PolicySets-- Stable を必要とする安定したポリシー Policyets を表示します。

2.6.6.2. セキュリティーポリシーの更新

以下のセクションを参照して、セキュリティーポリシーを更新します。

2.6.6.2.1. CLI からのポリシーセットへのポリシーの追加

以下のコマンドを実行してポリシーセットを編集します (kubectl edit policysets your-policyset-name)。

ポリシーセットの policies セクションのリストにポリシー名を追加します。kubectl apply -f your-added-policy.yaml のコマンドを使用して、ポリシーセットの配置セクションに、追加したポリシーを適用します。PlacementBinding および PlacementRule が作成されます。注記: 配置バインディングを削除すると、ポリシーはポリシーセットによって配置されます。

2.6.6.2.2. コンソールからのポリシーセットへのポリシーの追加

Policy sets タブを選択して、ポリシーセットにポリシーを追加します。Actions アイコンを選択し、Edit を選択します。Edit policy set フォームが表示されます。

フォームの Policies セクションに移動し、ポリシーセットに追加するポリシーを選択します。

2.6.6.2.3. セキュリティーポリシーの無効化

デフォルトでは、ポリシーは有効です。コンソールからポリシーを無効にします。

Red Hat Advanced Cluster Management for Kubernetes コンソールにログインしたら、Governance ページに移動し、ポリシー表のリストを表示します。

Actions アイコン > Disable policy の順に選択します。Disable Policy ダイアログボックスが表示されます。

Disable policy をクリックします。ポリシーが無効化されました。

2.6.6.3. セキュリティーポリシーの削除

CLI またはコンソールからセキュリティーポリシーを削除します。

  • CLI からセキュリティーポリシーを削除します。

    1. 以下のコマンドを実行してセキュリティーポリシーを削除します。

      kubectl delete policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>

      ポリシーを削除すると、ターゲットクラスターから削除されます。次のコマンドを実行して、ポリシーが削除されていることを確認します: kubectl get policies.policy.open-cluster-management.io <policy-name> -n <policy-namespace>

  • コンソールからセキュリティーポリシーを削除します。

    ナビゲーションメニューから Governance をクリックし、ポリシー表のリストを表示します。ポリシー違反表で、削除するポリシーの Actions アイコンをクリックします。

    Remove をクリックします。Remove policy ダイアログボックスから Remove policy をクリックします。

2.6.6.3.1. コンソールからのポリシーセットの削除

Policy sets タブから、ポリシーセットの Actions アイコンを選択します。Delete をクリックすると、Permanently delete Policyset? ダイアログボックスが表示されます。

Delete ボタンをクリックします。

他のポリシーの管理については、セキュリティーポリシーの管理 を参照してください。ポリシーに関する他のトピックは、ガバナンス を参照してください。

2.6.6.4. ポリシーによって作成されたリソースのクリーンアップ

ポリシーによって作成されたリソースをクリーンアップするには、設定ポリシーで pruneObjectBehavior パラメーターを使用します。pruneObjectBehavior が設定されていると、関連するオブジェクトは、関連する設定ポリシー (または親ポリシー) が削除された後にのみクリーンアップされます。パラメーターに使用できる値は、次の説明を参照してください。

  • DeleteIfCreated: ポリシーによって作成されたすべてのリソースをクリーンアップします。
  • DeleteAll: ポリシーによって管理されるすべてのリソースをクリーンアップします。
  • None: これはデフォルト値であり、関連するリソースが削除されない以前のリリースと同じ動作を維持します。

CLI からポリシーを作成するときに、値を YAML で直接設定できます。コンソールから、Policy templates ステップの Prune Object Behavior セクションで値を選択できます。

注記:

  • Operator をインストールするポリシーに pruneObjectBehavior パラメーターが定義されている場合は、Operator のアンインストールを完了するのに追加のクリーンアップが必要です。このクリーンアップの一環として、Operator の ClusterServiceVersion オブジェクトを削除する必要がある場合があります。
  • マネージドクラスターで config-policy-addon リソースを無効にすると、pruneObjbectBehavior は無視されます。ポリシーの関連リソースを自動的にクリーンアップするには、アドオンを無効にする前に、マネージドクラスターからポリシーを削除する必要があります。

2.6.7. 設定ポリシーの管理

設定ポリシーの作成、適用、表示、および更新を説明します。

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

2.6.7.1. 設定ポリシーの作成

設定ポリシーの YAML ファイルは、コマンドラインインターフェイス (CLI) またはコンソールから作成できます。

既存の Kubernetes マニフェストがある場合は、ポリシージェネレーターを使用して、ポリシーにマニフェストを自動的に含めることを検討してください。ポリシージェネレーター ドキュメントを参照してください。設定ポリシーの作成は、以下のセクションを参照してください。

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

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

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

    oc create -f configpolicy-1.yaml

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

    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:
  2. 以下のコマンドを実行してポリシーを適用します。

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

    oc get policies.policy.open-cluster-management.io --namespace=<namespace>

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

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

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

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

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

    oc describe policies.policy.open-cluster-management.io <name> -n <namespace>
2.6.7.1.3. コンソールからの設定ポリシーの作成

コンソールから設定ポリシーを作成すると、YAML エディターで YAML ファイルも作成されます。

  1. コンソールからクラスターにログインし、ナビゲーションメニューから Governance を選択します。
  2. Create policy をクリックします。仕様パラメーターの設定ポリシーのいずれかを選択して、作成するポリシーを指定します。
  3. ポリシーフォームを完了して、設定ポリシーの作成を続行します。以下のフィールドに適切な値を入力するか、選択します。

    • 名前
    • Specifications
    • Cluster selector
    • Remediation action
    • Standards
    • Categories
    • Controls
  4. Create をクリックします。設定ポリシーが作成されました。
2.6.7.1.4. コンソールからの設定ポリシーの表示

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

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

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

2.6.7.2. 設定ポリシーの更新

設定ポリシーの更新については、以下のセクションを参照してください。

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

設定ポリシーを無効にします。前述の説明と同様に、ログインして ガバナンス ページに移動し、タスクを完了します。

  1. 表リストから設定ポリシーの Actions アイコンを選択し、Disable をクリックします。Disable Policy ダイアログボックスが表示されます。
  2. Disable policy をクリックします。

ポリシーは無効になっていますが、削除されていません。

2.6.7.3. 設定ポリシーの削除

CLI またはコンソールから設定ポリシーを削除します。

  • 次の手順で、CLI から設定ポリシーを削除します。

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

      oc delete policies.policy.open-cluster-management.io <policy-name> -n <namespace>
    2. 以下のコマンドを実行して、ポリシーが削除されていることを確認します。
    oc get policies.policy.open-cluster-management.io <policy-name> -n <namespace>
  • 次の手順で、コンソールから設定ポリシーを削除します。

    1. ナビゲーションメニューから Governance をクリックし、ポリシー表のリストを表示します。
    2. ポリシー違反テーブルで削除するポリシーの Actions アイコンをクリックし、Remove をクリックします。
    3. Remove policy ダイアログボックスから、Remove policy をクリックします。

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

CM-Configuration-Management フォルダーから RedHat Advanced Cluster Management でサポート対象の設定ポリシーのサンプルを参照してください。

または、サンプル設定ポリシーの表 を参照して、コントローラーによってモニターされる他の設定ポリシーを確認することもできます。他のポリシーの管理は、セキュリティーポリシーの管理 を参照してください。

2.6.8. gatekeeper Operator ポリシーの管理

gatekeeper Operator ポリシーを使用して、マネージドクラスターに gatekeeper Operator および gatekeeper をインストールします。以下のセクションでは、gatekeeper Operator ポリシーの作成、表示、および更新について説明します。

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

2.6.8.1. gatekeeper Operator ポリシーを使用した gatekeeper のインストール

ガバナンスフレームワークを使用して gatekeeper Operator をインストールします。gatekeeper Operator は OpenShift Container Platform カタログで利用できます。詳細は、OpenShift Container Platform ドキュメントOperator のクラスターへの追加 を参照してください。

設定ポリシーコントローラーを使用して gatekeeper Operator ポリシーをインストールします。インストール時に、Operator グループおよびサブスクリプションは gatekeeper Operator をプルし、これをマネージドクラスターにインストールします。次に、gatekeeper Operator は gatekeeper CR を作成して gatekeeper を設定します。gatekeeper Operator CR の例を表示します。

gatekeeper Operator ポリシーは、Red Hat Advanced Cluster Management 設定ポリシーコントローラーによって監視されます。ここでは、enforce 修復アクションがサポートされます。gatekeeper Operator ポリシーは、enforce に設定されるとコントローラーによって自動的に作成されます。

2.6.8.2. コンソールからの gatekeeper ポリシーの作成

コンソールから gatekeeper ポリシーを作成して、インストールします。または、サンプル YAML を表示して、policy-gatekeeper-operator.yaml をデプロイすることもできます。

クラスターにログインしたら、Governance ページに移動します。

Create policy を選択します。フォームを完了したら、Specifications フィールドから Gatekeeper Operator を選択します。ポリシーのパラメーター値が自動的に設定され、ポリシーはデフォルトで inform に設定されます。gatekeeper をインストールするには、修復アクションを enforce に設定します。

注記: デフォルト値は Operator によって生成されます。gatekeeper Operator ポリシーに使用できるオプションのパラメーターの説明については、Gatekeeper Helm Chart を参照してください。

2.6.8.2.1. gatekeeper Operator CR
apiVersion: operator.gatekeeper.sh/v1alpha1
kind: Gatekeeper
metadata:
  name: gatekeeper
spec:
  audit:
    replicas: 1
    logLevel: DEBUG
    auditInterval: 10s
    constraintViolationLimit: 55
    auditFromCache: Enabled
    auditChunkSize: 66
    emitAuditEvents: Enabled
    resources:
      limits:
        cpu: 500m
        memory: 150Mi
      requests:
        cpu: 500m
        memory: 130Mi
  validatingWebhook: Enabled
  webhook:
    replicas: 2
    logLevel: ERROR
    emitAdmissionEvents: Enabled
    failurePolicy: Fail
    resources:
      limits:
        cpu: 480m
        memory: 140Mi
      requests:
        cpu: 400m
        memory: 120Mi
  nodeSelector:
    region: "EMEA"
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        - labelSelector:
            matchLabels:
              auditKey: "auditValue"
          topologyKey: topology.kubernetes.io/zone
  tolerations:
    - key: "Example"
      operator: "Exists"
      effect: "NoSchedule"
  podAnnotations:
    some-annotation: "this is a test"
    other-annotation: "another test"

2.6.8.3. gatekeeper および gatekeeper Operator のアップグレード

gatekeeper および gatekeeper Operator のバージョンをアップグレードできます。gatekeeper Operator を gatekeeper Operator ポリシーを使用してインストールする場合は、installPlanApproval の値に注意してください。installPlanApprovalAutomatic に設定されている場合は、Operator は自動的にアップグレードされます。

installPlanApprovalManual に設定されている場合は、各クラスターの gatekeeper Operator のアップグレードを手動で承認する必要があります。

2.6.8.4. gatekeeper Operator ポリシーの更新

次のセクションを参照して、gatekeeper Operator ポリシーを更新する方法を確認してください。

2.6.8.4.1. コンソールからの gatekeeper Operator ポリシーの表示

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

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

詳細を表示するには、policy-gatekeeper-operator ポリシーを選択します。Clusters タブを選択して、ポリシー違反を表示します。

2.6.8.4.2. gatekeeper Operator ポリシーの無効化

gatekeeper Operator ポリシーを無効にします。

Red Hat Advanced Cluster Management for Kubernetes コンソールにログインしたら、Governance ページに移動し、ポリシー表のリストを表示します。

policy-gatekeeper-operator ポリシーの Actions アイコンを選択し、Disable をクリックします。Disable Policy ダイアログボックスが表示されます。

Disable policy をクリックします。policy-gatekeeper-operator ポリシーが無効になりました。

2.6.8.5. gatekeeper Operator ポリシーの削除

CLI またはコンソールから gatekeeper Operator ポリシーを削除します。

  • CLI から gatekeeper Operator ポリシーを削除します。

    1. 以下のコマンドを実行し、gatekeeper Operator ポリシーを削除します。

      kubectl delete policies.policy.open-cluster-management.io <policy-gatekeeper-operator-name> -n <namespace>

      ポリシーを削除すると、ターゲットクラスターから削除されます。

    2. 以下のコマンドを実行して、ポリシーが削除されていることを確認します。

      kubectl get policies.policy.open-cluster-management.io <policy-gatekeeper-operator-name> -n <namespace>
  • コンソールから gatekeeper Operator ポリシーを削除します。

    Governance ページに移動し、ポリシー表の一覧を表示します。

    前のコンソールの手順と同様に、policy-gatekeeper-operator ポリシーの Actions アイコンをクリックします。Remove をクリックしてポリシーを削除します。Remove policy ダイアログボックスから、Remove policy をクリックします。

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

2.6.8.6. gatekeeper ポリシー、gatekeeper、および gatekeeper Operator ポリシーのアンインストール

gatekeeper ポリシー、gatekeeper、および gatekeeper Operator ポリシーをアンインストールするには、以下の手順を実行します。

  1. マネージドクラスターに適用される gatekeeper Constraint および ConstraintTemplate を削除します。

    1. gatekeeper Operator ポリシーを編集します。gatekeeper Constraint および ConstraintTemplate の作成に使用した ConfigurationPolicy テンプレートを見つけます。
    2. ConfigurationPolicy テンプレートの complianceType の値を mustnothave に変更します。
    3. ポリシーを保存して適用します。
  2. マネージドクラスターから gatekeeper インスタンスを削除します。

    1. gatekeeper Operator ポリシーを編集します。gatekeeper カスタムリソース (CR) の作成に使用した ConfigurationPolicy テンプレートを見つけます。
    2. ConfigurationPolicy テンプレートの complianceType の値を mustnothave に変更します。
  3. マネージドクラスターにある gatekeeper Operator を削除します。

    1. gatekeeper Operator ポリシーを編集します。サブスクリプション CR の作成に使用した ConfigurationPolicy テンプレートを見つけます。
    2. ConfigurationPolicy テンプレートの complianceType の値を mustnothave に変更します。

gatekeeper ポリシー、gatekeeper、および gatekeeper Operator ポリシーはアンインストールされました。

gatekeeper の詳細は gatekeeper 制約および制約テンプレートの統合 を参照してください。サードパーティーポリシーと製品の統合に関する詳細は、サードパーティーポリシーコントローラーの統合 を参照してください。

2.6.9. 非接続環境での Operator ポリシーの管理

インターネットに接続していない (切断状態の) Red Hat OpenShift Container Platform クラスターへの Red Hat Advanced Cluster Management for Kubernetes ポリシーのデプロイが必要になる場合があります。デプロイメントするポリシーを使用して、Operator Lifecycle Manager オペレーターをインストールするポリシーをデプロイメントする場合は、Operator カタログのミラーリング の手順に従う必要があります。

Operator イメージへのアクセスを検証するには、次の手順を実行します。

  1. ポリシーで使用するために必要なパッケージが利用可能であることを検証するには、必要なパッケージが利用可能であることの確認 を参照してください。次のポリシーがデプロイされているマネージドクラスターで使用される各イメージレジストリーの可用性を検証する必要があります。

    • container-security-operator
    • 非推奨: gatekeeper-operator-product
    • compliance-operator
  2. ソースが利用可能であることを検証するには、イメージコンテンツソースポリシーの設定 を参照してください。イメージコンテンツソースポリシーは、切断されたマネージドクラスターのそれぞれに存在する必要があり、プロセスを簡素化するためにポリシーを使用してデプロイできます。次のイメージソースの場所の表を参照してください。

    ガバナンスポリシーの種類イメージソースの場所

    コンテナーのセキュリティー

    registry.redhat.io/quay

    コンプライアンス

    registry.redhat.io/compliance

    ゲートキーパー

    registry.redhat.io/rhacm2

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.