第1章 ガバナンス
企業が、プライベートクラウド、マルチクラウド、およびハイブリッドクラウドでホストされるワークロードについて、ソフトウェアエンジニアリング、セキュアなエンジニアリング、回復性、セキュリティー、規制準拠に関する内部標準を満たす必要があります。Red Hat Advanced Cluster Management for Kubernetes ガバナンスは、企業が独自のセキュリティーポリシーを導入するための拡張可能なポリシーフレームワークを提供します。
Red Hat Advanced Cluster Management ガバナンスフレームワークの関連トピックを参照してください。
1.1. ポリシーコントローラー
ポリシーコントローラーは、クラスターがポリシーに準拠しているかどうかを監視し、報告します。サポートされるポリシーテンプレートを使用して Red Hat Advanced Cluster Management for Kubernetes ポリシーフレームワークを使用し、これらのコントローラーが管理するポリシーを適用します。ポリシーコントローラーは Kubernetes のカスタムリソース定義インスタンスを管理します。
ポリシーコントローラーはポリシー違反をチェックし、コントローラーが強制機能をサポートしている場合は、クラスターのステータスを準拠させることができます。Red Hat Advanced Cluster Management for Kubernetes の以下のポリシーコントローラーについては、次のトピックを参照してください。
重要: 設定ポリシーコントローラーポリシーのみが enforce
機能をサポートします。ポリシーコントローラーが enforce
機能をサポートしないポリシーを手動で修正する必要があります。
1.1.1. Kubernetes 設定ポリシーコントローラー
設定ポリシーコントローラーを使用して、任意の Kubernetes リソースを設定し、クラスター全体にセキュリティーポリシーを適用します。設定ポリシーコントローラーはローカル Kubernetes API サーバーと通信し、クラスター内にある設定のリストを取得できるようにします。
インストール中に、マネージドクラスター上に設定ポリシーコントローラーが作成されます。設定ポリシーは、ハブクラスター上のポリシーの policy-templates
フィールドで提供され、ガバナンスフレームワークによって選択されたマネージドクラスターに伝播されます。
設定ポリシーコントローラーの remediationAction
が InformOnly
に設定されている場合、親ポリシーの remediationAction
が enforce
に設定されていても、親ポリシーは設定ポリシーを適用しません。
ポリシーに組み込む既存の Kubernetes マニフェストがある場合、ポリシージェネレーターはこれを実現するための便利なツールです。
1.1.1.1. 設定ポリシーの例
apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-config spec: namespaceSelector: include: ["default"] exclude: [] matchExpressions: [] matchLabels: {} remediationAction: inform 1 customMessage: compliant: {} noncompliant: {} severity: low evaluationInterval: compliant: noncompliant: object-templates: 2 - 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: ...
1.1.1.2. 設定ポリシーの YAML の表
フィールド | 任意または必須 | 詳細 |
---|---|---|
| 必須 |
この値は |
| 必須 |
ポリシーのタイプを指定するには、値を |
| 必須 | ポリシーの名前。 |
| namespace が指定されていない namespace 付きオブジェクトに必要 |
オブジェクトが適用されるマネージドクラスター内の namespace を決定します。 |
| 必須 |
ポリシーが準拠していない場合に実行するアクションを指定します。次のパラメーター値を使用します。 |
| 任意 |
現在のコンプライアンスに基づいて、このセクションを使用して、指定された Go テンプレートのいずれかを使用するように設定ポリシーによって送信されるコンプライアンスメッセージを設定します。設定ポリシーコントローラーからのポリシーの現在の状態の .Policy.status.relatedObjects[*].object
|
| 任意 | このフィールドを使用して、準拠している設定ポリシーのカスタムメッセージを設定します。絵文字や外国語文字を含む UTF-8 でエンコードされた文字がサポートされている値です。 |
| 任意 | このフィールドを使用して、準拠していない設定ポリシーのカスタムメッセージを設定します。サポートされている値は、UTF-8 でエンコードされた文字、絵文字、外国語の文字です。 |
| 必須 |
ポリシーがコンプライアンス違反の場合に重大度を指定します。パラメーター値 |
| 任意 |
特定のコンプライアンス状態にある場合にポリシーを評価する頻度を指定します。
マネージドクラスターのリソースが少ない場合は、評価間隔のポーリング間隔を長く設定して、Kubernetes API とポリシーコントローラーでの CPU とメモリーの使用量を削減できます。これらは期間を表す形式です。たとえば、 |
| 任意 |
準拠ポリシーの評価頻度を指定します。以前のポーリング動作を有効にするには、このパラメーターを |
| 任意 |
非準拠ポリシーの評価頻度を指定します。以前のポーリング動作を有効にするには、このパラメーターを |
| 任意 |
コントローラーがマネージドクラスター上のオブジェクトと比較するための Kubernetes オブジェクトの配列 (完全に定義されているか、フィールドのサブセットを含む)。注: |
| 任意 |
生の YAML 文字列を使用してオブジェクトテンプレートを設定するために使用されます。オブジェクトテンプレートの条件を指定します。ここでは、if-else ステートメントや {{- if eq .metadata.name "policy-grc-your-meta-data-name" }} replicas: 2 {{- else }} replicas: 1 {{- end }}
注: |
| 必須 | このパラメーターを使用して、マネージドクラスター上の Kubernetes オブジェクトの望ましい状態を定義します。次のいずれかの動詞をパラメーター値として使用します。
|
| 任意 |
マニフェストのメタデータセクションをクラスター上のオブジェクトと比較するときに、 |
| 任意 |
このパラメーターを使用して、クラスター上のオブジェクトとポリシー内の
デフォルトでは、コントローラーが差異内に機密データを検出しないと、このパラメーターは |
| 任意 |
更新が必要な場合にオブジェクトを削除して再作成するタイミングを説明します。オブジェクトを |
| 必須 | コントローラーがマネージドクラスター上のオブジェクトと比較するための Kubernetes オブジェクト (完全に定義されているか、フィールドのサブセットを含む)。 |
| 任意 | マネージドクラスターからポリシーが削除されたときに、ポリシーに関連するリソースを消去するかどうかを決定します。 |
1.1.1.3. 関連情報
詳細は、以下のトピックを参照してください。
- 設定ポリシーの作成 を参照してください。
- ハブクラスターポリシーの詳細は、ハブクラスターポリシーフレームワーク を参照してください。
-
NIST Special Publication 800-53 (Rev. 4) を使用するポリシーサンプルおよび、
CM-Configuration-Management
フォルダー の Red Hat Advanced Cluster Management がサポートするポリシーサンプルを参照してください。 - ドライランのサポートの詳細は、Kubernetes のドキュメント ドライラン を参照してください。
- ポリシーがハブクラスターにどのように適用されるかは、サポート対象のポリシー 参照してください。
- コントローラーの詳細は、ポリシーコントローラー を参照してください。
- ポリシーコントローラーの設定をカスタマイズします。ポリシーコントローラーの高度な設定 を参照してください。
- リソースのクリーンアップとその他のトピックは、ポリシーによって作成されたリソースのクリーンアップ ドキュメントを参照してください。
- ポリシージェネレーター を参照してください。
- ポリシーを作成してカスタマイズする方法は、ガバナンスダッシュボードの管理 を参照してください。
- テンプレート処理 を参照してください。
1.1.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
をシークレットに追加します。
1.1.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:
1.1.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 を参照してください。 |
1.1.2.2. 証明書ポリシーの例
証明書ポリシーコントローラーがハブクラスターに作成されると、複製ポリシーがマネージドクラスターに作成されます。証明書ポリシーのサンプルを確認するには、policy-certificate.yaml
を参照してください。
1.1.2.3. 関連情報
- 証明書ポリシーの管理方法の詳細は、セキュリティーポリシーの管理 を参照してください。
- 他のトピックは、ポリシーコントローラーの概要 を参照してください。
- 証明書の概要 を参照してください。
1.1.3. ポリシーセットコントローラー
ポリシーセットコントローラーは、同じ namespace で定義されるポリシーにスコープ指定されたポリシーのステータスを集約します。ポリシーセット (PolicySet
) を作成して、同じ namespace にあるポリシーをグループ化します。PolicySet
のすべてのポリシーは、PolicySet
および Placement
をバインドする PlacementBinding
を作成して、選択したクラスターに配置されます。ポリシーセットがハブクラスターにデプロイされています。
また、ポリシーが複数のポリシーセットの一部であると、既存および新規 Placement
リソースはポリシーに残ります。ユーザーがポリシーセットからポリシーを削除すると、ポリシーはポリシーセットで選択したクラスターには適用されませんが、配置は残ります。ポリシーセットコントローラーは、ポリシーセット配置を含むクラスターの違反のみを確認します。
注記:
- Red Hat Advanced Cluster Management サンプルポリシーセットは、クラスター配置を使用します。クラスター配置を使用する場合は、ポリシーを含む namespace をマネージドクラスターセットにバインドします。クラスター配置の使用の詳細は、クラスターへのポリシーのデプロイ を参照してください。
-
Placement
リソースを使用するには、ManagedClusterSetBinding
リソースを使用して、ManagedClusterSet
リソースをPlacement
リソースの namespace にバインドする必要があります。詳細は、ManagedClusterSetBinding リソースの作成 を参照してください。
以下のセクションでは、ポリシーセットの設定を説明します。
1.1.3.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: cluster.open-cluster-management.io kind: Placement name: demo-policyset-pr subjects: - apiGroup: policy.open-cluster-management.io kind: PolicySet name: demo-policyset --- apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: demo-policyset-pr spec: predicates: - requiredClusterSelector: labelSelector: matchExpressions: - key: name operator: In values: - local-cluster
1.1.3.2. ポリシーセットの表
以下のパラメーター表で説明を確認してください。
フィールド | 任意または必須 | 詳細 |
---|---|---|
| 必須 |
この値は |
| 必須 |
ポリシーのタイプを指定するには、値を |
| 必須 | ポリシーリソースを識別する名前。 |
| 必須 | ポリシーの設定詳細を追加します。 |
| 任意 | ポリシーセットでグループ化するポリシーの一覧。 |
1.1.3.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 placement: placement1 policySet: policyset-ps
1.1.3.4. 関連情報
- Red Hat OpenShift Platform Plus policy set を参照してください。
- セキュリティーポリシーの管理 トピックの Creating policy sets セクションを参照してください。
-
また、デプロイメント用のポリシージェネレーターである PolicySets-- Stable を必要とする安定したポリシー
PolicySets
も表示します。
1.1.4. Operator ポリシーコントローラー
Operator ポリシーコントローラーを使用すると、クラスター全体の Operator Lifecycle Manager Operator を監視し、インストールできます。Operator ポリシーコントローラーは、Operator のさまざまな部分の健全性を監視し、Operator への更新を自動的に処理する方法を指定するために使用します。
ガバナンスフレームワークを使用して、ハブクラスター上のポリシーの policy-template
フィールドにポリシーを追加することで、Operator ポリシーをマネージドクラスターに配布することもできます。
Operator ポリシーの operatorGroup
フィールドと subscription
フィールド内でテンプレート値を使用することもできます。詳細は、Template processing を参照してください。
1.1.4.1. 前提条件
- Operator Lifecycle Manager がマネージドクラスターで利用可能である。これは、Red Hat OpenShift Container Platform ではデフォルトで有効になっています。
- 必要なアクセス権限: クラスターの管理者
1.1.4.2. Operator ポリシー YAML の表
フィールド | 任意または必須 | 詳細 |
---|---|---|
| 必須 |
この値は |
| 必須 |
ポリシーのタイプを指定するには、値を |
| 必須 | ポリシーリソースを識別する名前。 |
| 必須 |
Operator ポリシーの |
| 任意 |
デフォルトでは、 |
| 必須 |
クラスター上の Operator の望ましい状態を指定します。 |
| 任意 |
|
| 必須 | Operator のサブスクリプションを作成するための設定を定義します。Operator のサブスクリプションを作成するには、次のフィールドに情報を追加します。エントリーがない場合は、いくつかの項目に対してデフォルトのオプションが選択されます。
|
| 任意 |
このパラメーターを使用して、Operator に関連付けられている特定のシナリオのコンプライアンス動作を定義します。次の各オプションを個別に設定できます。サポートされる値は
|
| 必須 |
|
| 任意 |
Operator のどのバージョンがポリシーに準拠しているかを宣言します。フィールドが空の場合は、クラスター上で実行されているすべてのバージョンが準拠しているとみなされます。フィールドが空でない場合、ポリシーに準拠しているとみなされるには、マネージドクラスターのバージョンがリスト内のいずれかのバージョンと一致している必要があります。ポリシーが |
1.1.4.3. 関連情報
- テンプレート処理 を参照してください。
-
詳細は、
OperatorPolicy
リソースを使用してオペレーターをインストールする を参照してください。 - 非接続環境での Operator ポリシーの管理 を参照してください。
- OpenShift Container Platform ドキュメントで サブスクリプション のトピックを参照してください。
- 詳細は、Operator Lifecycle Manager (OLM) を参照してください。
- OLM に関する一般的な情報は、クラスターへの Operators の追加 ドキュメントを参照してください。