5.4. Compliance Operator の概念
5.4.1. Compliance Operator について リンクのコピーリンクがクリップボードにコピーされました!
Compliance Operator を使用すると、OpenShift Container Platform 管理者はクラスターの必要なコンプライアンス状態を記述し、存在するギャップやそれらを修復する方法に関する概要を提供します。Compliance Operator は、OpenShift Container Platform の Kubernetes API リソースと、クラスターを実行するノードの両方のコンプライアンスを評価します。Compliance Operator は、NIST 認定ツールである OpenSCAP を使用して、コンテンツが提供するセキュリティーポリシーをスキャンし、これを適用します。
Compliance Operator は Red Hat Enterprise Linux CoreOS (RHCOS) デプロイメントでのみ利用できます。
5.4.1.1. Compliance Operator のプロファイル リンクのコピーリンクがクリップボードにコピーされました!
						Compliance Operator のインストールの一部として利用可能なプロファイルは複数あります。oc get コマンドを使用して、使用可能なプロファイル、プロファイルの詳細、および特定のルールを表示できます。
					
利用可能なプロファイルを表示します。
oc get profile.compliance -n openshift-compliance
$ oc get profile.compliance -n openshift-complianceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらのプロファイルは、複数の異なるコンプライアンスベンチマークを表します。各プロファイルには、適用先の製品名がプロファイル名の接頭辞として追加されます。
ocp4-e8は Essential 8 ベンチマークを OpenShift Container Platform 製品に適用し、rhcos4-e8は Essential 8 ベンチマークを Red Hat Enterprise Linux CoreOS (RHCOS) 製品に適用します。以下のコマンドを実行して、
rhcos4-e8プロファイルの詳細を表示します。oc get -n openshift-compliance -oyaml profiles.compliance rhcos4-e8
$ oc get -n openshift-compliance -oyaml profiles.compliance rhcos4-e8Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.1 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
rhcos4-audit-rules-login-eventsルールの詳細を表示します。oc get -n openshift-compliance -oyaml rules rhcos4-audit-rules-login-events
$ oc get -n openshift-compliance -oyaml rules rhcos4-audit-rules-login-eventsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例5.2 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
5.4.1.1.1. Compliance Operator のプロファイルタイプ リンクのコピーリンクがクリップボードにコピーされました!
							Compliance Operator のルールはプロファイルとしてまとめられます。プロファイルは、OpenShift Container Platform のプラットフォームまたはノードを対象としています。一部のベンチマークには、rhcos4 ノードプロファイルが含まれています。
						
- プラットフォーム
 - プラットフォームプロファイルは、OpenShift Container Platform クラスターのコンポーネントを評価します。たとえば、プラットフォームレベルのルールで、APIServer 設定で強力な暗号化アルゴリズムが使用されているかどうかを確認できます。
 - ノード
 - 
										ノードプロファイルは、各ホストの OpenShift または RHCOS 設定を評価します。
ocp4ノードプロファイルとrhcos4ノードプロファイルの 2 つのノードプロファイルを使用できます。ocp4ノードプロファイルは、各ホストの OpenShift 設定を評価します。たとえば、kubeconfigファイルにコンプライアンス標準に適合した正しい権限があるかどうかを確認できます。rhcos4ノードプロファイルは、各ホストの Red Hat Enterprise Linux CoreOS (RHCOS) 設定を評価します。たとえば、SSHD サービスがパスワードログインを無効にするように設定されているかどうかを確認できます。 
ノードプロファイルとプラットフォームプロファイル (PCI-DSS など) を含むベンチマークの場合、OpenShift Container Platform 環境で両方のプロファイルを実行する必要があります。
								ocp4 プラットフォーム、ocp4 ノード、および rhcos4 ノードプロファイルを含むベンチマーク (FedRAMP High など) の場合、OpenShift Container Platform 環境で 3 つのプロファイルをすべて実行する必要があります。
							
								多数のノードを持つクラスターでは、ocp4 ノードと rhcos4 ノードの両方のスキャンが完了するまでに長い時間がかかる可能性があります。
							
5.4.2. カスタムリソース定義を理解する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform の Compliance Operator は、コンプライアンススキャンを実行するためのいくつかのカスタムリソース定義 (CRD) を提供します。コンプライアンススキャンを実行するには、ComplianceAsCode コミュニティープロジェクトから派生した事前定義されたセキュリティーポリシーを利用します。Compliance Operator はこれらのセキュリティーポリシーを CRD に変換します。この CRD を使用してコンプライアンススキャンを実行し、見つかった問題に対する修復を行うことができます。
5.4.2.1. CRD ワークフロー リンクのコピーリンクがクリップボードにコピーされました!
CRD は、コンプライアンススキャンを完了するための次のワークフローを提供します。
- コンプライアンススキャン要件を定義する
 - コンプライアンススキャン設定を設定する
 - コンプライアンススキャン設定を使用してコンプライアンス要件を処理する
 - コンプライアンススキャンをモニターする
 - コンプライアンススキャンの結果を確認する
 
5.4.2.2. コンプライアンススキャン要件の定義 リンクのコピーリンクがクリップボードにコピーされました!
						デフォルトでは、Compliance Operator CRD には ProfileBundle オブジェクトと Profile オブジェクトが含まれており、これらのオブジェクトでコンプライアンススキャン要件のルールを定義および設定できます。TailoredProfile オブジェクトを使用して、デフォルトのプロファイルをカスタマイズすることもできます。
					
5.4.2.2.1. ProfileBundle オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							Compliance Operator のインストール時に、すぐに実行できる ProfileBundle オブジェクトが含まれます。Compliance Operator は ProfileBundle オブジェクトを解析し、バンドル内の各プロファイルに対して Profile オブジェクトを作成します。また、Profile オブジェクトによって使用される Rule オブジェクトと Variable オブジェクトも解析します。
						
ProfileBundle オブジェクトの例
- 1
 - Compliance Operator がコンテンツファイルを解析できたかどうかを示します。
 
								contentFile が失敗すると、発生したエラーの詳細を提供する errorMessage 属性が表示されます。
							
トラブルシューティング
								無効なイメージから既知のコンテンツイメージにロールバックすると、ProfileBundle オブジェクトは応答を停止し、PENDING 状態を表示します。回避策として、前のイメージとは異なるイメージに移動できます。または、ProfileBundle オブジェクトを削除して再作成し、作業状態に戻すこともできます。
							
5.4.2.2.2. プロファイルオブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							Profile オブジェクトは、特定のコンプライアンス標準を評価できるルールと変数を定義します。XCCDF 識別子や Node または Platform タイプのプロファイルチェックなど、OpenSCAP プロファイルに関する解析済みの詳細が含まれています。Profile オブジェクトを直接使用することも、TailorProfile オブジェクトを使用してさらにカスタマイズすることもできます。
						
								Profile オブジェクトは単一の ProfileBundle オブジェクトから派生しているため、手動で作成または変更することはできません。通常、1 つの ProfileBundle オブジェクトに複数の Profile オブジェクトを含めることができます。
							
Profile オブジェクトの例
5.4.2.2.3. ルールオブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							プロファイルを形成する Rule オブジェクトも、オブジェクトとして公開されます。Rule オブジェクトを使用して、コンプライアンスチェック要件を定義し、それを修正する方法を指定します。
						
Rule オブジェクトの例
								Rule オブジェクトは、関連付けられた ProfileBundle オブジェクトを簡単に識別できるように適切なラベルを取得します。ProfileBundle は、このオブジェクトの OwnerReferences でも指定されます。
							
5.4.2.2.4. TailoredProfile オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							TailoredProfile オブジェクトを使用して、組織の要件に基づいてデフォルトの Profile オブジェクトを変更します。ルールを有効または無効にしたり、変数値を設定したり、カスタマイズの正当性を示したりすることができます。検証後、TailoredProfile オブジェクトは ConfigMap を作成します。これは、ComplianceScan オブジェクトから参照できます。
						
							ScanSettingBinding オブジェクトで参照することにより、TailoredProfile オブジェクトを使用できます。ScanSettingBinding の詳細は、ScanSettingBinding オブジェクトを参照してください。
						
TailoredProfile オブジェクトの例
- 1
 - これは任意です。
TailoredProfileがビルドされるProfileオブジェクトの名前。値が設定されていない場合は、enableRulesリストから新しいプロファイルが作成されます。 - 2
 - 調整されたプロファイルの XCCDF 名を指定します。
 - 3
 ConfigMap名を指定します。これは、ComplianceScanのtailoringConfigMap.name属性の値として使用できます。- 4
 READY、PENDING、FAILUREなどのオブジェクトの状態を表示します。オブジェクトの状態がERRORの場合、属性status.errorMessageが失敗の理由を提供します。
							TailoredProfile オブジェクトを使用すると、TailoredProfile コンストラクトを使用して新しい Profile オブジェクトを作成できます。新しい Profile を作成するには、次の設定パラメーターを設定します。
						
- 適切なタイトル
 - 
									
extendsは空でなければなりません TailoredProfileオブジェクトのスキャンタイプアノテーション:compliance.openshift.io/product-type: Platform/Node
compliance.openshift.io/product-type: Platform/NodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記product-typeのアノテーションを設定していない場合、Compliance Operator はデフォルトでPlatformスキャンタイプになります。TailoredProfileオブジェクトの名前に-node接尾辞を追加すると、nodeスキャンタイプになります。
5.4.2.3. コンプライアンススキャン設定の設定 リンクのコピーリンクがクリップボードにコピーされました!
						コンプライアンススキャンの要件を定義した後、スキャンのタイプ、スキャンの発生、およびスキャンの場所を指定することにより、コンプライアンススキャンを設定できます。そのために、Compliance Operator は ScanSetting オブジェクトを提供します。
					
5.4.2.3.1. ScanSetting オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							ScanSetting オブジェクトを使用して、スキャンを実行するための運用ポリシーを定義および再利用します。デフォルトでは、コンプライアンスオペレータは次の ScanSetting オブジェクトを作成します。
						
- default - 1Gi Persistent Volume (PV) を使用して、マスターノードとワーカーノードの両方で毎日午前 1 時にスキャンを実行し、最後の 3 つの結果を保持します。修復は自動的に適用も更新もされません。
 - 
									default-auto-apply - 1Gi Persistent Volume (PV) を使用して、コントロールプレーンとワーカーノードの両方で毎日午前 1 時にスキャンを実行し、最後の 3 つの結果を保持します。
autoApplyRemediationsとautoUpdateRemediationsの両方が true に設定されています。 
ScanSetting オブジェクトの例
- 1
 - 自動修復を有効にするには、
trueに設定します。自動修復を無効にするには、falseに設定します。 - 2
 - コンテンツ更新の自動修復を有効にするには、
trueに設定します。コンテンツ更新の自動修復を無効にするには、falseに設定します。 - 3
 - 生の結果形式で保存されたスキャンの数を指定します。デフォルト値は
3です。古い結果がローテーションされると、管理者はローテーションが発生する前に結果を別の場所に保存する必要があります。 - 4
 - 生の結果を保存するためにスキャン用に作成する必要があるストレージサイズを指定します。デフォルト値は
1Giです。 - 6
 - スキャンを実行する頻度を cron 形式で指定します。注記
ローテーションポリシーを無効にするには、値を
0に設定します。 - 5
 node-role.kubernetes.ioラベル値を指定して、Nodeタイプのスキャンをスケジュールします。この値は、MachineConfigPoolの名前と一致する必要があります。
5.4.2.4. コンプライアンススキャン設定を使用したコンプライアンススキャン要件の処理 リンクのコピーリンクがクリップボードにコピーされました!
						コンプライアンススキャンの要件を定義し、スキャンを実行するための設定を行うと、Compliance Operator が ScanSettingBinding オブジェクトを使用してそれを処理します。
					
5.4.2.4.1. ScanSettingBinding オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							ScanSettingBinding オブジェクトを使用して、Profile または TailoredProfile オブジェクトを参照してコンプライアンス要件を指定します。次に、スキャンの操作上の制約を提供する ScanSetting オブジェクトにリンクされます。次に、Compliance Operator は、ScanSetting オブジェクトと ScanSettingBinding オブジェクトに基づいて ComplianceSuite オブジェクトを生成します。
						
ScanSettingBinding オブジェクトの例
							ScanSetting オブジェクトと ScanSettingBinding オブジェクトを作成すると、コンプライアンススイートが作成されます。コンプライアンススイートのリストを取得するには、次のコマンドを実行します。
						
oc get compliancesuites
$ oc get compliancesuites
								ScanSettingBinding を削除すると、コンプライアンススイートも削除されます。
							
5.4.2.5. コンプライアンススキャンの追跡 リンクのコピーリンクがクリップボードにコピーされました!
						コンプライアンススイートの作成後、ComplianceSuite オブジェクトを使用して、デプロイされたスキャンのステータスをモニターできます。
					
5.4.2.5.1. ComplianceSuite オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							ComplianceSuite オブジェクトは、スキャンの状態を追跡するのに役立ちます。スキャンと全体的な結果を作成するための生の設定が含まれています。
						
							Node タイプのスキャンの場合、問題の修正が含まれているため、スキャンを MachineConfigPool にマップする必要があります。ラベルを指定する場合は、それがプールに直接適用されることを確認してください。
						
ComplianceSuite オブジェクトの例
							バックグラウンドのスイートは、scans パラメーターに基づいて ComplianceScan オブジェクトを作成します。プログラムで ComplianceSuites イベントを取得できます。スイートのイベントを取得するには、次のコマンドを実行します。
						
oc get events --field-selector involvedObject.kind=ComplianceSuite,involvedObject.name=<name of the suite>
$ oc get events --field-selector involvedObject.kind=ComplianceSuite,involvedObject.name=<name of the suite>
								手動で ComplianceSuite を定義すると、XCCDF 属性が含まれているため、エラーが発生する可能性があります。
							
5.4.2.5.2. 高度な ComplianceScan オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							Compliance Operator は、デバッグや既存のツールとの統合を行うための上級ユーザー向けのオプションを備えています。ComplianceScan オブジェクトを直接作成しないことを推奨しますが、代わりに、ComplianceSuite オブジェクトを使用してオブジェクトを管理できます。
						
高度な ComplianceScan オブジェクトの例
- 1
 NodeまたはPlatformのいずれかを指定します。ノードプロファイルはクラスターノードをスキャンし、プラットフォームプロファイルは Kubernetes プラットフォームをスキャンします。- 2
 - 実行するプロファイルの XCCDF 識別子を指定します。
 - 3
 - プロファイルファイルをカプセル化するコンテナーイメージを指定します。
 - 4
 - これはオプションです。単一のルールを実行するスキャンを指定します。このルールは XCCDF ID で識別され、指定されたプロファイルに属している必要があります。注記
ruleパラメーターをスキップすると、指定されたプロファイルで使用可能なすべてのルールに対してスキャンが実行されます。 - 5
 - OpenShift Container Platform を使用していて、修復を生成したい場合は、nodeSelector ラベルが
MachineConfigPoolラベルと一致する必要があります。注記nodeSelectorパラメーターを指定しないか、MachineConfigラベルと一致しない場合でも、スキャンは実行されますが、修復は作成されません。 - 6
 - スキャンの現在のフェーズを示します。
 - 7
 - スキャンの判定を示します。
 
								ComplianceSuite オブジェクトを削除すると、関連するすべてのスキャンが削除されます。
							
							スキャンが完了すると、ComplianceCheckResult オブジェクトのカスタムリソースとして結果が生成されます。ただし、生の結果は ARF 形式で入手できます。これらの結果は、スキャンの名前に関連付けられた永続ボリュームクレーム (PVC) を持つ永続ボリューム (PV) に保存されます。プログラムで ComplianceScans イベントを取得できます。スイートのイベントを生成するには、次のコマンドを実行します。
						
oc get events --field-selector involvedObject.kind=ComplianceScan,involvedObject.name=<name of the suite>
oc get events --field-selector involvedObject.kind=ComplianceScan,involvedObject.name=<name of the suite>
5.4.2.6. コンプライアンス結果の表示 リンクのコピーリンクがクリップボードにコピーされました!
						コンプライアンススイートが DONE フェーズに達すると、スキャン結果と可能な修正を表示できます。
					
5.4.2.6.1. ComplianceCheckResult オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							特定のプロファイルでスキャンを実行すると、プロファイル内のいくつかのルールが検証されます。これらのルールごとに、ComplianceCheckResult オブジェクトが作成され、特定のルールのクラスターの状態が提供されます。
						
ComplianceCheckResult オブジェクトの例
スイートからすべてのチェック結果を取得するには、次のコマンドを実行します。
oc get compliancecheckresults \ -l compliance.openshift.io/suite=workers-compliancesuite
oc get compliancecheckresults \
-l compliance.openshift.io/suite=workers-compliancesuite
5.4.2.6.2. ComplianceRemediation オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
							チェック項目によっては、データストリームで指定された修正方法が存在する場合があります。一方、Kubernetes の修正が利用可能な場合、Compliance Operator によって ComplianceRemediation オブジェクトが作成されます。
						
ComplianceRemediation オブジェクトの例
スイートからすべての修復を取得するには、次のコマンドを実行します。
oc get complianceremediations \ -l compliance.openshift.io/suite=workers-compliancesuite
oc get complianceremediations \
-l compliance.openshift.io/suite=workers-compliancesuite
自動的に修正できるすべての失敗したチェックをリスト表示するには、次のコマンドを実行します。
oc get compliancecheckresults \ -l 'compliance.openshift.io/check-status in (FAIL),compliance.openshift.io/automated-remediation'
oc get compliancecheckresults \
-l 'compliance.openshift.io/check-status in (FAIL),compliance.openshift.io/automated-remediation'
手動で修正できるすべての失敗したチェックをリスト表示するには、次のコマンドを実行します。
oc get compliancecheckresults \ -l 'compliance.openshift.io/check-status in (FAIL),!compliance.openshift.io/automated-remediation'
oc get compliancecheckresults \
-l 'compliance.openshift.io/check-status in (FAIL),!compliance.openshift.io/automated-remediation'