2.3. ポリシーコントローラー


ポリシーコントローラーは、クラスターがポリシーに準拠しているかどうかを監視し、報告します。既製のポリシーテンプレートを使用して Red Hat Advanced Cluster Management for Kubernetes ポリシーフレームワークを使用し、これらのコントローラーによって管理されるポリシーを適用します。ポリシーコントローラーは Kubernetes のカスタムリソース定義 (CRD) インスタンスを管理します。

ポリシーコントローラーはポリシー違反をモニターし、コントローラーが強制機能をサポートしている場合、クラスターの状態を準拠させることができます。Red Hat Advanced Cluster Management for Kubernetes の以下のポリシーコントローラーについては、次のトピックを参照してください。

重要: 設定ポリシーコントローラーポリシーのみが enforce 機能をサポートします。ポリシーコントローラーが enforce 機能をサポートしないポリシーを手動で修正する必要があります。

ポリシー管理の他のトピックについては、ガバナンス を参照してください。

2.3.1. Kubernetes 設定ポリシーコントローラー

設定ポリシーコントローラーを使用して、Kubernetes リソースを設定し、クラスター全体にセキュリティーポリシーを適用できます。設定ポリシーは、ハブクラスター上のポリシーの policy-templates フィールドで提供され、ガバナンスフレームワークによって選択されたマネージドクラスターに伝播されます。

Kubernetes オブジェクトは、設定ポリシーの object-templates 配列で (全体または一部で) 定義され、マネージドクラスター上のオブジェクトと比較するフィールドの設定ポリシーコントローラーを示します。設定ポリシーコントローラーは、ローカルの Kubernetes API サーバーと通信し、クラスターにある設定の一覧を取得します。

設定ポリシーコントローラーは、インストール時にマネージドクラスターに作成されます。設定ポリシーコントローラーは、設定ポリシーが準拠していない場合に修復する enforce 機能をサポートしています。設定ポリシーの remediationActionenforce に設定されている場合、コントローラーは指定された設定をターゲットのマネージドクラスターに適用します。注記: 名前のないオブジェクトを指定する設定ポリシーは、inform のみにすることができます。

設定ポリシー内でテンプレート化された値を使用することもできます。詳細は、Template processing を参照してください。

ポリシーに追加したい既存の Kubernetes マニフェストがある場合、Policy Generator はこれを実現するための便利なツールです。

設定ポリシーコントローラーについては、以下を参照してください。

2.3.1.1. 設定ポリシーの例

apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
  name: policy-config
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
    matchExpressions: []
    matchLabels: {}
  remediationAction: inform
  severity: low
  evaluationInterval:
    compliant:
    noncompliant:
  object-templates:
  - complianceType: musthave
    objectDefinition:
      apiVersion: v1
      kind: Pod
      metadata:
        name: pod
      spec:
        containers:
        - image: pod-image
          name: pod-name
          ports:
          - containerPort: 80
  - complianceType: musthave
    objectDefinition:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: myconfig
      namespace: default
      data:
      testData: hello
    spec:
...

2.3.1.2. 設定ポリシーの YAML の表

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

apiVersion

必須

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

kind

必須

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

metadata.name

必須

ポリシーの名前。

spec.namespaceSelector

namespace が指定されていない namespace 付きオブジェクトに必要

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

spec.remediationAction

必須

ポリシーが準拠していない場合に実行するアクションを指定します。次のパラメーター値を使用します: inform または enforce

spec.severity

必須

ポリシーがコンプライアンス違反の場合に重大度を指定します。パラメーター値 lowmediumhigh、または critical を使用します。

spec.evaluationInterval.compliant

任意

ポリシーが準拠状態にあるときに評価される頻度を定義するために使用されます。値は期間の形式に指定する必要があります。これは、時間単位接尾辞が付いた数字のシーケンスになります。たとえば、12h30m5s は 12 時間、30 分、および 5 秒を表します。ポリシー spec が更新されない限り、ポリシーが準拠クラスターで再評価されないように、never に設定することもできます。

デフォルトでは、evaluationInterval.compliant が設定されていないか、空の場合は、設定ポリシーの評価間隔の最小時間は約 10 秒です。設定ポリシーコントローラーがマネージドクラスターで飽和している場合は、この感覚がさらに長くなる可能性があります。

spec.evaluationInterval.noncompliant

任意

ポリシーがコンプライアンス違反の状態にあるときに評価される頻度を定義するのに使用します。evaluationInterval.compliant パラメーターと同様に、値は時間単位接尾辞が付いた数値のシーケンスにある期間の形式である必要があります。ポリシー spec が更新されない限り、ポリシーがコンプライアンス違反のクラスターで再評価されないように、never に設定することもできます。

spec.object-templates

任意

コントローラーがマネージドクラスター上のオブジェクトと比較するための Kubernetes オブジェクトの配列 (完全に定義されているか、フィールドのサブセットを含む)。注: spec.object-templatesspec.object-templates-raw は、オプションとしてリストされていますが、2 つのパラメーターフィールドのうち 1 つだけを設定する必要があります。

spec.object-templates-raw

任意

生の YAML 文字列を使用してオブジェクトテンプレートを設定するために使用されます。オブジェクトテンプレートの条件を指定します。ここでは、if-else ステートメントや range 関数などの高度な関数がサポートされる値です。たとえば、object-template 定義での重複を回避するために次の値を追加します。

{{- if eq .metadata.name "policy-grc-your-meta-data-name" }} replicas: 2 {{- else }} replicas: 1 {{- end }}

注: spec.object-templatesspec.object-templates-raw は、オプションとしてリストされていますが、2 つのパラメーターフィールドのうち 1 つだけを設定する必要があります。

spec.object-templates[].complianceType

必須

マネージドクラスター上の Kubernetes オブジェクトの望ましい状態を定義するために使用されます。次のいずれかの動詞をパラメーター値として使用する必要があります。

mustonlyhave: objectDefinition で定義されている正確なフィールドと値を持つオブジェクトが存在する必要があることを示します。

musthave: objectDefinition で指定されたものと同じフィールドを持つオブジェクトが存在する必要があることを示します。object-template で指定されていないオブジェクト上の既存のフィールドは無視されます。通常、配列値は追加されます。パッチが適用される配列の例外は、既存のアイテムと一致する値を持つ name キーがアイテムに含まれている場合です。配列を置き換える場合は、mustonlyhave コンプライアンスタイプを使用して、完全に定義された objectDefinition を使用します。

mustnothave: objectDefinition で指定されたものと同じフィールドを持つオブジェクトが存在できないことを示します。

spec.object-templates[].metadataComplianceType

任意

マニフェストのメタデータセクションをクラスター上のオブジェクトと比較するときに、spec.object-templates[].complianceType をオーバーライドします ("musthave"、"mustonlyhave")。デフォルトは、メタデータの ComplianceType をオーバーライドしないように設定されていません。

spec.object-templates[].objectDefinition

必須

コントローラーがマネージドクラスター上のオブジェクトと比較するための Kubernetes オブジェクト (完全に定義されているか、フィールドのサブセットを含む)。

spec.pruneObjectBehavior

任意

マネージドクラスターからポリシーが削除されたときに、ポリシーに関連するリソースを消去するかどうかを決定します。

2.3.1.3. 関連情報

詳細は、以下のトピックを参照してください。

2.3.2. 証明書ポリシーコントローラー

証明書ポリシーコントローラーは、有効期限が近い証明書、期間 (時間) が長すぎる証明書や、指定のパターンに一致しない DNS 名が含まれている証明書の検出に使用できます。証明書ポリシーは、ハブクラスター上のポリシーの policy-templates フィールドで提供され、ガバナンスフレームワークによって選択されたマネージドクラスターに伝播されます。ハブクラスターポリシーの詳細は、ポリシーの概要 に関するドキュメントを参照してください。

証明書ポリシーコントローラーを設定してカスタマイズするには、コントローラーポリシーの以下のパラメーターを更新します。

  • minimumDuration
  • minimumCADuration
  • maximumDuration
  • maximumCADuration
  • allowedSANPattern
  • disallowedSANPattern

以下のシナリオのいずれかの場合は、ポリシーがコンプライアンス違反になる可能性があります。

  • 証明書が、最小期間で指定されている期間以内、または最大期間で指定されている期間を超えて失効する場合
  • DNS 名が指定のパターンと一致しない場合

証明書ポリシーコントローラーは、マネージドクラスターに作成されます。このコントローラーは、ローカルの Kubernetes API サーバーと通信して、証明書が含まれるシークレット一覧を取得して、コンプライアンス違反の証明書をすべて判別します。

証明書ポリシーコントローラーには、enforce 機能のサポートがありません。

注記: 証明書ポリシーコントローラーは、tls.crt キーのシークレットでのみ自動的に証明書を検索します。シークレットが別のキーの下に保存されている場合は、証明書ポリシーコントローラーに別のキーを検索するよう知らせるために、certificate_key_name という名前のラベルを、キーに設定された値とともに追加します。たとえば、sensor-cert.pem という名前のキーに保存されている証明書がシークレットに含まれている場合は、ラベル certificate_key_name: sensor-cert.pem をシークレットに追加します。

2.3.2.1. 証明書ポリシーコントローラーの YAML 設定

以下の証明書ポリシーの例を見て、YAML 表の要素を確認します。

apiVersion: policy.open-cluster-management.io/v1
kind: CertificatePolicy
metadata:
  name: certificate-policy-example
spec:
  namespaceSelector:
    include: ["default"]
    exclude: []
    matchExpressions: []
    matchLabels: {}
  labelSelector:
    myLabelKey: myLabelValue
  remediationAction:
  severity:
  minimumDuration:
  minimumCADuration:
  maximumDuration:
  maximumCADuration:
  allowedSANPattern:
  disallowedSANPattern:
2.3.2.1.1. 証明書ポリシーコントローラーの YAML の表
表2.3 パラメーターの表
フィールド任意または必須説明

apiVersion

必須

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

kind

必須

この値を CertificatePolicy に設定してポリシーの種類を指定します。

metadata.name

必須

ポリシーを識別するための名前。

metadata.labels

任意

証明書ポリシーでは、category=system-and-information-integrity ラベルでポリシーを分類して、証明書ポリシーをスムーズにクエリーできるようにします。証明書ポリシーの category キーに別の値が指定されていると、この値は証明書コントローラーにより上書きされます。

spec.namespaceSelector

必須

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

注記: 証明書ポリシーコントローラーの namespaceSelector がどの namespace にも一致しない場合は、ポリシーが準拠しているとみなされます。

spec.labelSelector

任意

オブジェクトの識別属性を指定します。Kubernetes のラベルとセレクター のドキュメントを参照してください。

spec.remediationAction

必須

ポリシーの修正を指定します。このパラメーター値に inform を設定します。証明書ポリシーコントローラーがサポートするのは inform 機能のみです。

spec.severity

任意

ポリシーがコンプライアンス違反の場合に重大度をユーザーに通知します。パラメーター値 lowmediumhigh、または critical を使用します。

spec.minimumDuration

必須

値の指定がない場合、デフォルト値は 100h になります。このパラメーターで、証明書がコンプライアンス違反とみなされるまでの最小期間 (時間) を指定します。パラメーター値は Golang の期間形式を使用します。詳細は、Golang Parse Duration を参照してください。

spec.minimumCADuration

任意

値を設定して、他の証明書とは異なる値で、まもなく有効期限が切れる可能性がある署名証明書を特定します。パラメーターの値が指定されていないと、CA 証明書の有効期限は minimumDuration で使用した値になります。詳細は、Golang Parse Duration を参照してください。

spec.maximumDuration

任意

値を設定して、任意の制限期間を超えて作成された証明書を特定します。パラメーターは Golang の期間形式を使用します。詳細は、Golang Parse Duration を参照してください。

spec.maximumCADuration

任意

値を設定して、定義した制限期間を超えて作成された署名証明書を特定します。パラメーターは Golang の期間形式を使用します。詳細は、Golang Parse Duration を参照してください。

spec.allowedSANPattern

任意

証明書に定義した全 SAN エントリーと一致する必要がある正規表現。このパラメーターを使用して、パターンと DNS 名を照合します。詳細は、Golang Regular Expression syntax を参照してください。

spec.disallowedSANPattern

任意

証明書で定義した SAN エントリーと一致してはいけない正規表現。このパラメーターを使用して、パターンと DNS 名を照合します。

注記: ワイルドカードの証明書を検出するには、disallowedSANPattern: " [\\*]" の SAN パターンを使用します。

詳細は、Golang Regular Expression syntax を参照してください。

2.3.2.2. 証明書ポリシーの例

証明書ポリシーコントローラーがハブクラスターに作成されると、複製ポリシーがマネージドクラスターに作成されます。証明書ポリシーのサンプルを確認するには、policy-certificate.yaml を参照してください。

証明書ポリシーの管理方法の詳細は、セキュリティーポリシーの管理 を参照してください。他のトピックは、ポリシーコントローラー を参照してください。

2.3.3. IAM ポリシーコントローラー

IAM (ID and Access Management) ポリシーコントローラーを使用して、コンプライアンス違反の IAM ポリシーに関する通知を受信できます。IAM ポリシーで設定したパラメーターを基に、コンプライアンスチェックが行われます。IAM ポリシーは、ハブクラスターのポリシーの policy-templates フィールドで提供され、ガバナンスフレームワークによって選択されたマネージドクラスターに伝播されます。ハブクラスターポリシーの詳細は、ポリシー YAML 構造 のドキュメントを参照してください。

IAM ポリシーコントローラーは、クラスター内で特定のクラスターロール (ClusterRole) を割り当てたユーザーの必要な最大数を監視します。監視するデフォルトのクラスターロールは cluster-admin です。IAM ポリシーコントローラーは、ローカルの Kubernetes API サーバーと通信します。

IAM ポリシーコントローラーはマネージドクラスターで実行されます。詳細は、以下のセクションを参照してください。

2.3.3.1. IAM ポリシー YAML の設定

以下の IAM ポリシーの例を見て、YAML 表のパラメーターを確認します。

apiVersion: policy.open-cluster-management.io/v1
kind: IamPolicy
metadata:
  name:
spec:
  clusterRole:
  severity:
  remediationAction:
  maxClusterRoleBindingUsers:
  ignoreClusterRoleBindings:

2.3.3.2. IAM ポリシー YAML の表

以下のパラメーター表で説明を確認してください。

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

apiVersion

必須

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

kind

必須

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

metadata.name

必須

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

spec.clusterRole

任意

監視するクラスターロール (ClusterRole)。指定されていない場合は、cluster-admin にデフォルト設定されます。

spec.severity

任意

ポリシーがコンプライアンス違反の場合に重大度をユーザーに通知します。パラメーター値 lowmediumhigh、または critical を使用します。

spec.remediationAction

任意

ポリシーの修正を指定します。inform と入力します。IAM ポリシーコントローラーは、inform 機能のみをサポートします。

spec.ignoreClusterRoleBindings

任意

無視するクラスターのロールバインディング名を指定する正規表現 (regex) 値の一覧。これらの正規表現の値は、Go regexp 構文 に従う必要があります。デフォルトでは、名前が system: で始まるすべてのクラスターロールバインディングは無視されます。これをより厳格な値に設定することが推奨されます。クラスターのロールバインディング名を無視するには、一覧を単一の値 .^ か、一致しない他の正規表現に設定します。

spec.maxClusterRoleBindingUsers

必須

ポリシーが違反しているとみなされるまでに利用可能な IAM ロールバインディングの最大数。

2.3.4. ポリシーセットコントローラー

ポリシーセットコントローラーは、同じ namespace で定義されるポリシーにスコープ指定されたポリシーのステータスを集約します。ポリシーセット (PolicySet) を作成して、同じ namespace にあるポリシーをグループ化します。PolicySet のすべてのポリシーは、PolicySet および Placement をバインドする PlacementBinding を作成して、選択したクラスターに配置されます。ポリシーセットがハブクラスターにデプロイされています。

また、ポリシーが複数のポリシーセットの一部であると、既存および新規 Placement リソースはポリシーに残ります。ユーザーがポリシーセットからポリシーを削除すると、ポリシーはポリシーセットで選択したクラスターには適用されませんが、配置は残ります。ポリシーセットコントローラーは、ポリシーセット配置を含むクラスターの違反のみを確認します。

注意: Red Hat Advanced Cluster Management の強化サンプルポリシーセットは、クラスター配置を使用します。クラスター配置を使用する場合は、ポリシーを含む namespace をマネージドクラスターセットにバインドします。クラスター配置の使用の詳細については、クラスターへのポリシーのデプロイ を参照してください。

以下のセクションでは、ポリシーセットの設定について説明します。

2.3.4.1. ポリシーセット YAML の設定

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

apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: demo-policyset
spec:
  policies:
  - policy-demo

---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
  name: demo-policyset-pb
placementRef:
  apiGroup: apps.open-cluster-management.io
  kind: PlacementRule
  name: demo-policyset-pr
subjects:
- apiGroup: policy.open-cluster-management.io
  kind: PolicySet
  name: demo-policyset
---
apiVersion: apps.open-cluster-management.io
kind: PlacementRule
metadata:
  name: demo-policyset-pr
spec:
  clusterConditions:pagewidth:
  - status: "True"
    type: ManagedCLusterConditionAvailable
  clusterSelectors:
    matchExpressions:
      - key: name
        operator: In
        values:
          - local-cluster

2.3.4.2. ポリシーセットの表

以下のパラメーター表で説明を確認してください。

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

apiVersion

必須

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

kind

必須

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

metadata.name

必須

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

spec

必須

ポリシーの設定詳細を追加します。

spec.policies

任意

ポリシーセットでグループ化するポリシーの一覧。

2.3.4.3. ポリシーセットの例

apiVersion: policy.open-cluster-management.io/v1beta1
kind: PolicySet
metadata:
  name: pci
  namespace: default
spec:
  description: Policies for PCI compliance
  policies:
  - policy-pod
  - policy-namespace
status:
  compliant: NonCompliant
  placement:
  - placementBinding: binding1
    placementRule: placement1
    policySet: policyset-ps

2.3.4.4. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.