5.6.2. Compliance Operator のスキャン
Compliance Operator を使用してコンプライアンススキャンを実行するには、ScanSetting および ScanSettingBinding API を使用することを推奨します。これらの API オブジェクトの詳細は、以下を実行します。
$ oc explain scansettings
または
$ oc explain scansettingbindings
5.6.2.1. コンプライアンススキャンの実行 リンクのコピーリンクがクリップボードにコピーされました!
Center for Internet Security (CIS) プロファイルを使用してスキャンを実行できます。便宜上、Compliance Operator は起動時に適切なデフォルト値を持つ ScanSetting オブジェクトを作成します。この ScanSetting オブジェクトの名前は default です。
オールインワンのコントロールプレーンノードとワーカーノードの場合、コンプライアンススキャンはワーカーノードとコントロールプレーンノードで 2 回実行されます。コンプライアンススキャンは、一貫性のないスキャン結果を生成する可能性があります。ScanSetting オブジェクトで単一のロールのみを定義することにより、一貫性のない結果を回避できます。
Compliance Operator のスキャンでは、コントロールプレーンが aarch64 または x86 CPU を使用しているかどうかに関係なく、マルチアーキテクチャーコンピュートマシンを含むクラスターで INCONSISTENT が報告されます。これは、同じルールが各アーキテクチャーで異なる動作をすることが原因です。これが発生するのは、Compliance Operator が複数のノードの結果を 1 つの結果に集約するノードスキャンの場合だけです。
一貫性のないスキャン結果の詳細は、Compliance Operator shows INCONSISTENT scan result with worker node を参照してください。
手順
次のコマンドを実行して、
ScanSettingオブジェクトを検査します。$ oc describe scansettings default -n openshift-compliance出力例
Name: default Namespace: openshift-compliance Labels: <none> Annotations: <none> API Version: compliance.openshift.io/v1alpha1 Kind: ScanSetting Max Retry On Timeout: 3 Metadata: Creation Timestamp: 2024-07-16T14:56:42Z Generation: 2 Resource Version: 91655682 UID: 50358cf1-57a8-4f69-ac50-5c7a5938e402 Raw Result Storage: Node Selector: node-role.kubernetes.io/master: Pv Access Modes: ReadWriteOnce1 Rotation: 32 Size: 1Gi3 Storage Class Name: standard4 Tolerations: Effect: NoSchedule Key: node-role.kubernetes.io/master Operator: Exists Effect: NoExecute Key: node.kubernetes.io/not-ready Operator: Exists Toleration Seconds: 300 Effect: NoExecute Key: node.kubernetes.io/unreachable Operator: Exists Toleration Seconds: 300 Effect: NoSchedule Key: node.kubernetes.io/memory-pressure Operator: Exists Roles: master5 worker6 Scan Tolerations:7 Operator: Exists Schedule: 0 1 * * *8 Show Not Applicable: false Strict Node Scan: true Suspend: false Timeout: 30m Events: <none>- 1
- Compliance Operator は、スキャンの結果が含まれる永続ボリューム (PV) を作成します。デフォルトで、Compliance Operator はクラスターに設定されるストレージクラスについて何らかの仮定をすることができないため、PV はアクセスモード
ReadWriteOnceを使用します。さらに、ReadWriteOnceアクセスモードはほとんどのクラスターで利用できます。スキャン結果を取得する必要がある場合は、ボリュームもバインドするヘルパー Pod を使用して実行できます。ReadWriteOnceアクセスモードを使用するボリュームは、一度に 1 つの Pod のみがマウントできるため、必ずヘルパー Pod を削除してください。そうでない場合は、Compliance Operator は後続のスキャンのためにボリュームを再利用できません。 - 2
- Compliance Operator は、後続の 3 つのスキャンの結果をボリュームに保持し、古いスキャンはローテーションされます。
- 3
- Compliance Operator はスキャンの結果用に 1 GB のストレージを割り当てます。
- 4
scansetting.rawResultStorage.storageClassNameフィールドは、raw の結果を保存するためのPersistentVolumeClaimオブジェクトを作成するときに使用するstorageClassName値を指定します。デフォルト値は null で、クラスターで設定されたデフォルトのストレージクラスの使用を試みます。デフォルトクラスが指定されていない場合は、デフォルトクラスを設定する必要があります。- 5 6
- スキャン設定がクラスターノードをスキャンするプロファイルを使用する場合は、これらのノードロールをスキャンします。
- 7
- デフォルトのスキャン設定オブジェクトは、すべてのノードをスキャンします。
- 8
- デフォルトのスキャン設定オブジェクトは、毎日 01:00 にスキャンを実行します。
デフォルトのスキャン設定の代わりに、以下の設定を含む
default-auto-applyを使用できます。Name: default-auto-apply Namespace: openshift-compliance Labels: <none> Annotations: <none> API Version: compliance.openshift.io/v1alpha1 Auto Apply Remediations: true1 Auto Update Remediations: true2 Kind: ScanSetting Metadata: Creation Timestamp: 2022-10-18T20:21:00Z Generation: 1 Managed Fields: API Version: compliance.openshift.io/v1alpha1 Fields Type: FieldsV1 fieldsV1: f:autoApplyRemediations: f:autoUpdateRemediations: f:rawResultStorage: .: f:nodeSelector: .: f:node-role.kubernetes.io/master: f:pvAccessModes: f:rotation: f:size: f:tolerations: f:roles: f:scanTolerations: f:schedule: f:showNotApplicable: f:strictNodeScan: Manager: compliance-operator Operation: Update Time: 2022-10-18T20:21:00Z Resource Version: 38840 UID: 8cb0967d-05e0-4d7a-ac1c-08a7f7e89e84 Raw Result Storage: Node Selector: node-role.kubernetes.io/master: Pv Access Modes: ReadWriteOnce Rotation: 3 Size: 1Gi Tolerations: Effect: NoSchedule Key: node-role.kubernetes.io/master Operator: Exists Effect: NoExecute Key: node.kubernetes.io/not-ready Operator: Exists Toleration Seconds: 300 Effect: NoExecute Key: node.kubernetes.io/unreachable Operator: Exists Toleration Seconds: 300 Effect: NoSchedule Key: node.kubernetes.io/memory-pressure Operator: Exists Roles: master worker Scan Tolerations: Operator: Exists Schedule: 0 1 * * * Show Not Applicable: false Strict Node Scan: true Events: <none> autoUpdateRemediationsおよびautoApplyRemediationsフラグをtrueに設定すると、追加の手順なしに自動修復するScanSettingオブジェクトを簡単に作成できます。
デフォルトの
ScanSettingオブジェクトにバインドし、cisおよびcis-nodeプロファイルを使用してクラスターをスキャンするScanSettingBindingオブジェクトを作成します。以下に例を示します。apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: cis-compliance namespace: openshift-compliance profiles: - name: ocp4-cis-node kind: Profile apiGroup: compliance.openshift.io/v1alpha1 - name: ocp4-cis kind: Profile apiGroup: compliance.openshift.io/v1alpha1 settingsRef: name: default kind: ScanSetting apiGroup: compliance.openshift.io/v1alpha1以下を実行して
ScanSettingBindingオブジェクトを作成します。$ oc create -f <file-name>.yaml -n openshift-complianceプロセスのこの時点で、
ScanSettingBindingオブジェクトは調整され、BindingおよびBound設定に基づいて調整されます。Compliance Operator はComplianceSuiteオブジェクトおよび関連付けられるComplianceScanオブジェクトを作成します。以下を実行してコンプライアンススキャンの進捗を確認します。
$ oc get compliancescan -w -n openshift-complianceスキャンはスキャンフェーズに進み、完了すると最終的に
DONEフェーズに移行します。ほとんどの場合、スキャンの結果はNON-COMPLIANTになります。スキャン結果を確認し、クラスターがコンプライアンスに基づくように修復の適用を開始することができます。詳細は、Compliance Operator 修復の管理 を参照してください。