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
機能をサポートしています。設定ポリシーの remediationAction
が enforce
に設定されている場合、コントローラーは指定された設定をターゲットのマネージドクラスターに適用します。注記: 名前のないオブジェクトを指定する設定ポリシーは、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 の表
フィールド | 任意または必須 | 説明 |
---|---|---|
| 必須 |
この値は |
| 必須 |
ポリシーのタイプを指定するには、値を |
| 必須 | ポリシーの名前。 |
| namespace が指定されていない namespace 付きオブジェクトに必要 |
オブジェクトが適用されるマネージドクラスター内の namespace を決定します。 |
| 必須 |
ポリシーが準拠していない場合に実行するアクションを指定します。次のパラメーター値を使用します: |
| 必須 |
ポリシーがコンプライアンス違反の場合に重大度を指定します。パラメーター値 |
| 任意 |
ポリシーが準拠状態にあるときに評価される頻度を定義するために使用されます。値は期間の形式に指定する必要があります。これは、時間単位接尾辞が付いた数字のシーケンスになります。たとえば、
デフォルトでは、 |
| 任意 |
ポリシーがコンプライアンス違反の状態にあるときに評価される頻度を定義するのに使用します。 |
| 任意 |
コントローラーがマネージドクラスター上のオブジェクトと比較するための Kubernetes オブジェクトの配列 (完全に定義されているか、フィールドのサブセットを含む)。注: |
| 任意 |
生の YAML 文字列を使用してオブジェクトテンプレートを設定するために使用されます。オブジェクトテンプレートの条件を指定します。ここでは、if-else ステートメントや
注: |
| 必須 | マネージドクラスター上の Kubernetes オブジェクトの望ましい状態を定義するために使用されます。次のいずれかの動詞をパラメーター値として使用する必要があります。
|
| 任意 |
マニフェストのメタデータセクションをクラスター上のオブジェクトと比較するときに、 |
| 必須 | コントローラーがマネージドクラスター上のオブジェクトと比較するための Kubernetes オブジェクト (完全に定義されているか、フィールドのサブセットを含む)。 |
| 任意 | マネージドクラスターからポリシーが削除されたときに、ポリシーに関連するリソースを消去するかどうかを決定します。 |
2.3.1.3. 関連情報
詳細は、以下のトピックを参照してください。
- ハブクラスターポリシーの詳細は、ポリシーの概要 を参照してください。
-
NIST Special Publication 800-53 (Rev. 4) を使用するポリシーサンプルおよび、
CM-Configuration-Management
フォルダー の Red Hat Advanced Cluster Management がサポートするポリシーサンプルを参照してください。 - ポリシーがハブクラスターにどのように適用されるかは、サポート対象のポリシー 参照してください。
- コントローラーの詳細は、ポリシーコントローラー を参照してください。
- ポリシーコントローラーの設定をカスタマイズします。ポリシーコントローラーの高度な設定 を参照してください。
- リソースのクリーンアップとその他のトピックは、ポリシーによって作成されたリソースのクリーンアップ ドキュメントを参照してください。
- ポリシージェネレーター を参照してください。
- ポリシーを作成してカスタマイズする方法は、セキュリティーポリシーの管理 を参照してください。
- テンプレート処理 を参照してください。
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 の表
フィールド | 任意または必須 | 説明 |
---|---|---|
| 必須 |
この値は |
| 必須 |
この値を |
| 必須 | ポリシーを識別するための名前。 |
| 任意 |
証明書ポリシーでは、 |
| 必須 |
シークレットがモニターされるマネージドクラスター内の namespace を決定します。
注記: 証明書ポリシーコントローラーの |
| 任意 | オブジェクトの識別属性を指定します。Kubernetes のラベルとセレクター のドキュメントを参照してください。 |
| 必須 |
ポリシーの修正を指定します。このパラメーター値に |
| 任意 |
ポリシーがコンプライアンス違反の場合に重大度をユーザーに通知します。パラメーター値 |
| 必須 |
値の指定がない場合、デフォルト値は |
| 任意 |
値を設定して、他の証明書とは異なる値で、まもなく有効期限が切れる可能性がある署名証明書を特定します。パラメーターの値が指定されていないと、CA 証明書の有効期限は |
| 任意 | 値を設定して、任意の制限期間を超えて作成された証明書を特定します。パラメーターは Golang の期間形式を使用します。詳細は、Golang Parse Duration を参照してください。 |
| 任意 | 値を設定して、定義した制限期間を超えて作成された署名証明書を特定します。パラメーターは Golang の期間形式を使用します。詳細は、Golang Parse Duration を参照してください。 |
| 任意 | 証明書に定義した全 SAN エントリーと一致する必要がある正規表現。このパラメーターを使用して、パターンと DNS 名を照合します。詳細は、Golang Regular Expression syntax を参照してください。 |
| 任意 | 証明書で定義した SAN エントリーと一致してはいけない正規表現。このパラメーターを使用して、パターンと DNS 名を照合します。
注記: ワイルドカードの証明書を検出するには、 詳細は、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 の表
以下のパラメーター表で説明を確認してください。
フィールド | 任意または必須 | 説明 |
---|---|---|
| 必須 |
この値は |
| 必須 |
ポリシーのタイプを指定するには、値を |
| 必須 | ポリシーリソースを識別する名前。 |
| 任意 |
監視するクラスターロール ( |
| 任意 |
ポリシーがコンプライアンス違反の場合に重大度をユーザーに通知します。パラメーター値 |
| 任意 |
ポリシーの修正を指定します。 |
| 任意 |
無視するクラスターのロールバインディング名を指定する正規表現 (regex) 値の一覧。これらの正規表現の値は、Go regexp 構文 に従う必要があります。デフォルトでは、名前が |
| 必須 | ポリシーが違反しているとみなされるまでに利用可能な 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.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 OpenShift Platform Plus policy set を参照してください。
- セキュリティーポリシーの管理 トピックの Creating policy sets セクションを参照してください。
-
また、デプロイメント用のポリシージェネレーターである PolicySets-- Stable を必要とする安定したポリシー
PolicySets
も表示します。 - このトピックの最初の Policy set controller に戻ります。