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-compliance
Copy 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-e8
Copy 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-events
Copy 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/Node
Copy 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_compliance_scan>
oc get events --field-selector involvedObject.kind=ComplianceScan,involvedObject.name=<name_of_the_compliance_scan>
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'