5.6. Compliance Operator のスキャンの管理
5.6.1. サポートされているコンプライアンスプロファイル
Compliance Operator (CO) のインストールの一部として利用可能なプロファイルは複数あります。次のプロファイルを使用すると、クラスター内のギャップを評価できます。ただし、使用するだけでは特定のプロファイルへの準拠を推測または保証できません。また、プロファイルは監査人はありません。
このようなさまざまな標準に対する準拠または認定を実現するには、Qualified Security Assessor (QSA)、Joint Authorization Board (JAB)、または業界で認められたその他の規制当局など、認定監査機関に依頼して、環境の評価を受ける必要があります。標準への準拠を実現するには、認定監査人と協力する必要があります。
すべての Red Hat 製品のコンプライアンスサポートの詳細は、製品コンプライアンス を参照してください。
Compliance Operator は、OpenShift Dedicated や Azure Red Hat OpenShift などの一部のマネージドプラットフォームで誤った結果を報告する可能性があります。詳細は、Red Hat ナレッジベースソリューション Red Hat Knowledgebase Solution #6983418 を参照してください。
5.6.1.1. コンプライアンスプロファイル
Compliance Operator は、業界標準のベンチマークを満たすプロファイルを提供します。
次の表は、Compliance Operator で利用可能な最新のプロファイルを反映しています。
5.6.1.1.1. CIS コンプライアンスプロファイル
プロファイル | プロファイルタイトル | Application | 業界コンプライアンスベンチマーク | サポートされているアーキテクチャー | サポート対象のプラットフォーム |
---|---|---|---|---|---|
ocp4-cis [1] | CIS Red Hat OpenShift Container Platform Benchmark v1.5.0 | プラットフォーム | CIS Benchmarks ™ [1] |
| |
ocp4-cis-1-4 [3] | CIS Red Hat OpenShift Container Platform Benchmark v1.4.0 | プラットフォーム | CIS Benchmarks ™ [4] |
| |
ocp4-cis-1-5 | CIS Red Hat OpenShift Container Platform Benchmark v1.5.0 | プラットフォーム | CIS Benchmarks ™ [4] |
| |
ocp4-cis-node [1] | CIS Red Hat OpenShift Container Platform Benchmark v1.5.0 | ノード [2] | CIS Benchmarks ™ [4] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
ocp4-cis-node-1-4 [3] | CIS Red Hat OpenShift Container Platform Benchmark v1.4.0 | ノード [2] | CIS Benchmarks ™ [4] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
ocp4-cis-node-1-5 | CIS Red Hat OpenShift Container Platform Benchmark v1.5.0 | ノード [2] | CIS Benchmarks ™ [4] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
-
ocp4-cis
およびocp4-cis-node
プロファイルは、Compliance Operator で利用可能になると、CIS ベンチマークの最新バージョンを維持します。CIS v1.4.0 などの特定のバージョンに準拠する場合は、ocp4-cis-1-4
およびocp4-cis-node-1-4
プロファイルを使用します。 - ノードプロファイルは、関連するプラットフォームプロファイルとともに使用する必要があります。詳細は、Compliance Operator のプロファイルタイプ を参照してください。
- CIS v1.4.0 は CIS v1.5.0 に置き換えられました。最新のプロファイルを環境に適用することを推奨します。
- CIS OpenShift Container Platform v4 ベンチマークを見つけるには、CIS ベンチマーク に移動し、最新の CIS ベンチマークをダウンロード をクリックします。ここでベンチマークをダウンロードするために登録できます。
5.6.1.1.2. Essential Eight コンプライアンスプロファイル
プロファイル | プロファイルタイトル | Application | 業界コンプライアンスベンチマーク | サポートされているアーキテクチャー | サポート対象のプラットフォーム |
---|---|---|---|---|---|
ocp4-e8 | Australian Cyber Security Centre (ACSC) Essential Eight | プラットフォーム |
| ||
rhcos4-e8 | Australian Cyber Security Centre (ACSC) Essential Eight | ノード |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
5.6.1.1.3. FedRAMP High コンプライアンスプロファイル
プロファイル | プロファイルタイトル | Application | 業界コンプライアンスベンチマーク | サポートされているアーキテクチャー | サポート対象のプラットフォーム |
---|---|---|---|---|---|
ocp4-high [1] | NIST 800-53 High-Impact Baseline for Red Hat OpenShift - プラットフォームレベル | プラットフォーム |
| ||
ocp4-high-node [1] | NIST 800-53 High-Impact Baseline for Red Hat OpenShift - ノードレベル | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
ocp4-high-node-rev-4 | NIST 800-53 High-Impact Baseline for Red Hat OpenShift - ノードレベル | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
ocp4-high-rev-4 | NIST 800-53 High-Impact Baseline for Red Hat OpenShift - プラットフォームレベル | プラットフォーム |
| ||
rhcos4-high [1] | NIST 800-53 High-Impact Baseline for Red Hat Enterprise Linux CoreOS | ノード |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
rhcos4-high-rev-4 | NIST 800-53 High-Impact Baseline for Red Hat Enterprise Linux CoreOS | ノード |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
-
ocp4-high
、ocp4-high-node
、およびrhcos4-high
プロファイルは、Compliance Operator で利用可能になると、FedRAMP High 標準の最新バージョンを維持します。FedRAMP high R4 などの特定のバージョンに準拠する場合は、ocp4-high-rev-4
およびocp4-high-node-rev-4
プロファイルを使用します。 - ノードプロファイルは、関連するプラットフォームプロファイルとともに使用する必要があります。詳細は、Compliance Operator のプロファイルタイプ を参照してください。
5.6.1.1.4. FedRAMP Moderate コンプライアンスプロファイル
プロファイル | プロファイルタイトル | Application | 業界コンプライアンスベンチマーク | サポートされているアーキテクチャー | サポート対象のプラットフォーム |
---|---|---|---|---|---|
ocp4-moderate [1] | NIST 800-53 Moderate-Impact Baseline for Red Hat OpenShift - プラットフォームレベル | プラットフォーム |
| ||
ocp4-moderate-node [1] | NIST 800-53 Moderate-Impact Baseline for Red Hat OpenShift - ノードレベル | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
ocp4-moderate-node-rev-4 | NIST 800-53 Moderate-Impact Baseline for Red Hat OpenShift - ノードレベル | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
ocp4-moderate-rev-4 | NIST 800-53 Moderate-Impact Baseline for Red Hat OpenShift - プラットフォームレベル | プラットフォーム |
| ||
rhcos4-moderate [1] | NIST 800-53 Moderate-Impact Baseline for Red Hat Enterprise Linux CoreOS | ノード |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
rhcos4-moderate-rev-4 | NIST 800-53 Moderate-Impact Baseline for Red Hat Enterprise Linux CoreOS | ノード |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
-
ocp4-moderate
、ocp4-moderate-node
、rhcos4-moderate
プロファイルは、Compliance Operator で利用可能になると、FedRAMP Moderate 標準の最新バージョンを維持します。FedRAMP Moderate R4 などの特定のバージョンに準拠する場合は、ocp4-moderate-rev-4
およびocp4-moderate-node-rev-4
プロファイルを使用します。 - ノードプロファイルは、関連するプラットフォームプロファイルとともに使用する必要があります。詳細は、Compliance Operator のプロファイルタイプ を参照してください。
5.6.1.1.5. NERC-CIP コンプライアンスプロファイル
プロファイル | プロファイルタイトル | Application | 業界コンプライアンスベンチマーク | サポートされているアーキテクチャー | サポート対象のプラットフォーム |
---|---|---|---|---|---|
ocp4-nerc-cip | North American Electric Reliability Corporation (NERC) Critical Infrastructure Protection (CIP) cybersecurity standards profile for the OpenShift Container Platform - Platform レベル | プラットフォーム |
| ||
ocp4-nerc-cip-node | North American Electric Reliability Corporation (NERC) Critical Infrastructure Protection (CIP) cybersecurity standards profile for the OpenShift Container Platform - Node レベル | ノード [1] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
rhcos4-nerc-cip | North American Electric Reliability Corporation (NERC) Critical Infrastructure Protection (CIP) cybersecurity standards profile for Red Hat Enterprise Linux CoreOS | ノード |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
- ノードプロファイルは、関連するプラットフォームプロファイルとともに使用する必要があります。詳細は、Compliance Operator のプロファイルタイプ を参照してください。
5.6.1.1.6. PCI-DSS コンプライアンスプロファイル
プロファイル | プロファイルタイトル | Application | 業界コンプライアンスベンチマーク | サポートされているアーキテクチャー | サポート対象のプラットフォーム |
---|---|---|---|---|---|
ocp4-pci-dss [1] | PCI-DSS v4 Control Baseline for OpenShift Container Platform 4 | プラットフォーム |
| ||
ocp4-pci-dss-3-2 [3] | PCI-DSS v3.2.1 Control Baseline for OpenShift Container Platform 4 | プラットフォーム |
| ||
ocp4-pci-dss-4-0 | PCI-DSS v4 Control Baseline for OpenShift Container Platform 4 | プラットフォーム |
| ||
ocp4-pci-dss-node [1] | PCI-DSS v4 Control Baseline for OpenShift Container Platform 4 | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
ocp4-pci-dss-node-3-2 [3] | PCI-DSS v3.2.1 Control Baseline for OpenShift Container Platform 4 | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
ocp4-pci-dss-node-4-0 | PCI-DSS v4 Control Baseline for OpenShift Container Platform 4 | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
-
ocp4-pci-dss
およびocp4-pci-dss-node
プロファイルは、Compliance Operator で利用可能になると、最新バージョンの PCI-DSS 標準を維持します。PCI-DSS v3.2.1 などの特定のバージョンに準拠する場合は、ocp4-pci-dss-3-2
およびocp4-pci-dss-node-3-2
プロファイルを使用します。 - ノードプロファイルは、関連するプラットフォームプロファイルとともに使用する必要があります。詳細は、Compliance Operator のプロファイルタイプ を参照してください。
- PCI-DSS v3.2.1 は PCI-DSS v4 に置き換えられました。最新のプロファイルを環境に適用することを推奨します。
5.6.1.1.7. STIG コンプライアンスプロファイル
プロファイル | プロファイルタイトル | Application | 業界コンプライアンスベンチマーク | サポートされているアーキテクチャー | サポート対象のプラットフォーム |
---|---|---|---|---|---|
ocp4-stig [1] | Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Openshift | プラットフォーム |
| ||
ocp4-stig-node [1] | Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Openshift | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
ocp4-stig-node-v1r1 [3] | Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Openshift V1R1 | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
ocp4-stig-node-v2r1 | Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Openshift V2R1 | ノード [2] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
ocp4-stig-v1r1 [3] | Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Openshift V1R1 | プラットフォーム |
| ||
ocp4-stig-v2r1 | Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Openshift V2R1 | プラットフォーム |
| ||
rhcos4-stig | Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Openshift | ノード |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) | |
rhcos4-stig-v1r1 [3] | Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Openshift V1R1 | ノード | DISA-STIG [3] |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
rhcos4-stig-v2r1 | Defense Information Systems Agency Security Technical Implementation Guide (DISA STIG) for Red Hat Openshift V2R1 | ノード |
| Red Hat OpenShift Service on AWS with hosted control planes (ROSA with HCP) |
-
ocp4-stig
、ocp4-stig-node
、rhcos4-stig
プロファイルは、Compliance Operator で利用可能になると、DISA-STIG ベンチマークの最新バージョンを維持します。DISA-STIG V2R1 などの特定のバージョンに準拠する場合は、ocp4-stig-v2r1
およびocp4-stig-node-v2r1
プロファイルを使用します。 - ノードプロファイルは、関連するプラットフォームプロファイルとともに使用する必要があります。詳細は、Compliance Operator のプロファイルタイプ を参照してください。
- DISA-STIG V1R1 は DISA-STIG V2R1 に置き換えられました。最新のプロファイルを環境に適用することを推奨します。
5.6.1.1.8. 拡張コンプライアンスプロファイルについて
一部のコンプライアンスプロファイルには、業界のベストプラクティスに従う必要がある制御が含まれており、その結果、一部のプロファイルが他のプロファイルを拡張します。Center for Internet Security (CIS) のベストプラクティスと National Institute of Standards and Technology (NIST) のセキュリティーフレームワークを組み合わせることで、セキュアな準拠環境を実現するパスが確立されます。
たとえば NIST の High-Impact プロファイルおよび Moderate-Impact プロファイルは、コンプライアンスを達成するために CIS プロファイルを拡張します。その結果、拡張されたコンプライアンスプロファイルを使用することで、1 つのクラスターで両方のプロファイルを実行する必要がなくなります。
プロファイル | 拡張対象 |
---|---|
ocp4-pci-dss | ocp4-cis |
ocp4-pci-dss-node | ocp4-cis-node |
ocp4-high | ocp4-cis |
ocp4-high-node | ocp4-cis-node |
ocp4-moderate | ocp4-cis |
ocp4-moderate-node | ocp4-cis-node |
ocp4-nerc-cip | ocp4-moderate |
ocp4-nerc-cip-node | ocp4-moderate-node |
5.6.1.2. 関連情報
5.6.2. Compliance Operator のスキャン
ScanSetting および
ScanSettingBinding
API は、Compliance Operator でコンプライアンススキャンを実行するために使用することが推奨されます。これらの API オブジェクトの詳細は、以下を実行します。
$ oc explain scansettings
または
$ oc explain scansettingbindings
5.6.2.1. コンプライアンススキャンの実行
Center for Internet Security (CIS) プロファイルを使用してスキャンを実行できます。便宜上、Compliance Operator は起動時に適切なデフォルト値を持つ ScanSetting
オブジェクトを作成します。この ScanSetting
オブジェクトの名前は default
です。
オールインワンのコントロールプレーンノードとワーカーノードの場合、コンプライアンススキャンはワーカーノードとコントロールプレーンノードで 2 回実行されます。コンプライアンススキャンは、一貫性のないスキャン結果を生成する可能性があります。ScanSetting
オブジェクトで単一のロールのみを定義することにより、一貫性のない結果を回避できます。
手順
次のコマンドを実行して、
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: ReadWriteOnce 1 Rotation: 3 2 Size: 1Gi 3 Storage Class Name: standard 4 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 5 worker 6 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: true 1 Auto Update Remediations: true 2 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>
デフォルトの
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 修復の管理 を参照してください。
5.6.2.2. 結果に関するカスタムストレージサイズの設定
ComplianceCheckResult
などのカスタムリソースは、スキャンされたすべてのノード間での単一チェックの集計された結果を表しますが、スキャナーによって生成される未加工の結果を確認することが役に立つ場合もあります。未加工の結果は ARF 形式で生成され、サイズが大きくなる可能性がありますが (ノードあたり数十メガバイト)、それらを etcd
のキーと値のストアでサポートされる Kubernetes リソースに保存することは実際的ではありません。すべてのスキャンは、1GB のサイズにデフォルト設定される永続ボリューム (PV) を作成します。環境によっては、PV サイズを適宜増やす必要がある場合があります。これは、ScanSetting
および ComplianceScan
リソースの両方に公開される rawResultStorage.size
属性を使用して実行されます。
関連するパラメーターは rawResultStorage.rotation
であり、これは古いスキャンのローテーションが行われる前に保持されるスキャンの数を制御します。デフォルト値は 3 です。ローテーションポリシーを 0 に設定するとローテーションは無効になります。デフォルトのローテーションポリシーと、未加工の ARF スキャンレポートにつき 100 MB を見積もり、お使いの環境に適した PV サイズを計算できます。
5.6.2.2.1. カスタム結果ストレージ値の使用
OpenShift Container Platform は各種のパブリッククラウドまたはベアメタルにデプロイできるので、Compliance Operator は利用可能なストレージ設定を判別できません。デフォルトで、Compliance Operator はクラスターのデフォルトのストレージクラスを使用して結果を保存するために PV の作成を試行しますが、カスタムストレージクラスは rawResultStorage.StorageClassName
属性を使用して設定できます。
クラスターがデフォルトのストレージクラスを指定しない場合、この属性を設定する必要があります。
標準ストレージクラスを使用するように ScanSetting
カスタムリソースを設定し、サイズが 10GB の永続ボリュームを作成し、最後の 10 件の結果を保持します。
ScanSetting
CR の例
apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: default namespace: openshift-compliance rawResultStorage: storageClassName: standard rotation: 10 size: 10Gi roles: - worker - master scanTolerations: - effect: NoSchedule key: node-role.kubernetes.io/master operator: Exists schedule: '0 1 * * *'
5.6.2.3. ワーカーノードでの結果サーバー Pod のスケジューリング
結果サーバー Pod は、生の Asset Reporting Format (ARF) スキャン結果を格納する永続ボリューム (PV) をマウントします。nodeSelector
属性および tolerations
属性を使用すると、結果サーバー Pod の場所を設定できます。
これは、コントロールプレーンノードが永続ボリュームをマウントすることを許可されていない環境で役立ちます。
手順
Compliance Operator 用の
ScanSetting
カスタムリソース (CR) を作成します。ScanSetting
CR を定義し、YAML ファイルを保存します (例:rs-workers.yaml
)。apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: rs-on-workers namespace: openshift-compliance rawResultStorage: nodeSelector: node-role.kubernetes.io/worker: "" 1 pvAccessModes: - ReadWriteOnce rotation: 3 size: 1Gi tolerations: - operator: Exists 2 roles: - worker - master scanTolerations: - operator: Exists schedule: 0 1 * * *
ScanSetting
CR を作成するには、次のコマンドを実行します。$ oc create -f rs-workers.yaml
検証
ScanSetting
オブジェクトが作成されたことを確認するには、次のコマンドを実行します。$ oc get scansettings rs-on-workers -n openshift-compliance -o yaml
出力例
apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: creationTimestamp: "2021-11-19T19:36:36Z" generation: 1 name: rs-on-workers namespace: openshift-compliance resourceVersion: "48305" uid: 43fdfc5f-15a7-445a-8bbc-0e4a160cd46e rawResultStorage: nodeSelector: node-role.kubernetes.io/worker: "" pvAccessModes: - ReadWriteOnce rotation: 3 size: 1Gi tolerations: - operator: Exists roles: - worker - master scanTolerations: - operator: Exists schedule: 0 1 * * * strictNodeScan: true
5.6.2.4. ScanSetting
カスタムリソース
ScanSetting
カスタムリソースでは、scan limits 属性を使用して、スキャナー Pod のデフォルトの CPU およびメモリー制限をオーバーライドできるようになりました。Compliance Operator は、スキャナーコンテナーに 500Mi メモリー、100m CPU のデフォルトを使用し、api-resource-collector
コンテナーに 100m CPU の 200Mi メモリーを使用します。Operator のメモリー制限を設定するには、OLM または Operator デプロイメント自体を介してインストールされている場合は Subscription
オブジェクトを変更します。
Compliance Operator のデフォルトの CPU およびメモリーの制限を増やすには、Compliance Operator リソース制限の増加 を参照してください。
デフォルトの制限が十分ではなく、Operator またはスキャナー Pod が Out Of Memory (OOM) プロセスによって終了した場合は、Compliance Operator または Scanner Pod のメモリー制限を増やす必要があります。
5.6.2.5. Hosted Control Plane の管理クラスターの設定
独自のホストされたコントロールプレーンまたは Hypershift 環境をホストしており、管理クラスターからホストされたクラスターをスキャンする場合は、ターゲットであるホストされたクラスターの名前とプレフィックス namespace を設定する必要があります。これは、TailoredProfile
を作成することで行なえます。
この手順は、独自の Hosted Control Plane 環境を管理するユーザーにのみ適用されます。
Hosted Control Plane の管理クラスターでは、ocp4-cis
および ocp4-pci-dss
プロファイルのみサポートされます。
前提条件
- Compliance Operator が管理クラスターにインストールされている。
手順
次のコマンドを実行して、スキャン対象のホストされたクラスターの
name
とnamespace
を取得します。$ oc get hostedcluster -A
出力例
NAMESPACE NAME VERSION KUBECONFIG PROGRESS AVAILABLE PROGRESSING MESSAGE local-cluster 79136a1bdb84b3c13217 4.13.5 79136a1bdb84b3c13217-admin-kubeconfig Completed True False The hosted control plane is available
管理クラスターで、スキャンプロファイルを拡張する
TailoredProfile
を作成し、スキャンするホストされたクラスターの名前と namespace を定義します。例:
management-tailoredprofile.yaml
apiVersion: compliance.openshift.io/v1alpha1 kind: TailoredProfile metadata: name: hypershift-cisk57aw88gry namespace: openshift-compliance spec: description: This profile test required rules extends: ocp4-cis 1 title: Management namespace profile setValues: - name: ocp4-hypershift-cluster rationale: This value is used for HyperShift version detection value: 79136a1bdb84b3c13217 2 - name: ocp4-hypershift-namespace-prefix rationale: This value is used for HyperShift control plane namespace detection value: local-cluster 3
TailoredProfile
を作成します。$ oc create -n openshift-compliance -f mgmt-tp.yaml
5.6.2.6. リソース要求および制限の適用
kubelet が Pod の一部としてコンテナーを起動すると、kubelet はそのコンテナーの要求および制限をメモリーおよび CPU の要求および制限をコンテナーランタイムに渡します。Linux では、コンテナーランタイムは、定義した制限を適用して有効にするカーネル cgroup を設定します。
CPU 制限は、コンテナーが使用できる CPU 時間を定義します。各スケジューリング期間中、Linux カーネルはこの制限を超えるかどうかを確認します。その場合、カーネルは、cgroup の実行を再開できるようにするまで待機します。
複数の異なるコンテナー (cgroup) を競合するシステムで実行する場合、CPU 要求が大きいワークロードには、要求が小さいワークロードよりも多くの CPU 時間が割り当てられます。メモリー要求は Pod のスケジューリング時に使用されます。cgroups v2 を使用するノードでは、コンテナーランタイムがメモリーリクエストをヒントとして使用して、memory.min
および memory.low
の値を設定する場合があります。
コンテナーがこの制限を超えるメモリーを割り当てようとすると、Linux カーネルのメモリー不足サブシステムがアクティブになり、メモリーを割り当てようとしたコンテナー内のプロセスの 1 つを停止して介入します。Pod またはコンテナーのメモリー制限は、emptyDir などのメモリーベースのボリュームのページにも適用できます。
kubelet は、ローカルの一時ストレージとしてではなく、コンテナーメモリーが使用されているときに tmpfs
emptyDir
ボリュームを追跡します。コンテナーがメモリー要求を超え、それが実行されているノードが全体的にメモリー不足になった場合、Pod のコンテナーが削除される可能性があります。
コンテナーは、長期間にわたって CPU 制限を超えることはできません。コンテナーのランタイムは、CPU 使用率が過剰に使用されている場合も Pod またはコンテナーを停止しません。リソース制限のためにコンテナーをスケジュールできないか、強制終了されているかを判断するには、Compliance Operator のトラブルシューティング を参照してください。
5.6.2.7. コンテナーリソース要求を使用した Pod のスケジューリング
Pod が作成されると、スケジューラーは Pod を実行するノードを選択します。各ノードには、リソースタイプごとに、Pod に提供できる CPU とメモリーの最大容量があります。スケジューラーは、スケジュールされたコンテナーのリソース要求の合計が、各リソースタイプの容量ノードよりも少なくなるようにします。
ノードのメモリーまたは CPU リソースの使用率が非常に低い場合でも、容量チェックでノードのリソース不足を防ぐことができない場合、スケジューラーはノードへの Pod の配置を拒否することがあります。
コンテナーごとに、以下のリソース制限および要求を指定できます。
spec.containers[].resources.limits.cpu spec.containers[].resources.limits.memory spec.containers[].resources.limits.hugepages-<size> spec.containers[].resources.requests.cpu spec.containers[].resources.requests.memory spec.containers[].resources.requests.hugepages-<size>
個々のコンテナーに対してのみ要求と制限を指定できますが、Pod の全体的なリソース要求と制限を考慮することも役立ちます。特定のリソースの場合には、コンテナーリソースの要求または制限は、Pod 内にあるコンテナーごとに割り当てられた、対象タイプのリソース要求または制限を合計したものです。
コンテナーリソース要求および制限の例
apiVersion: v1 kind: Pod metadata: name: frontend spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: app image: images.my-company.example/app:v4 resources: requests: 1 memory: "64Mi" cpu: "250m" limits: 2 memory: "128Mi" cpu: "500m" securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] - name: log-aggregator image: images.my-company.example/log-aggregator:v6 resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL]
5.6.3. Compliance Operator の調整
Compliance Operator には、追加の設定なしで使用できるプロファイルが同梱されますが、それらは組織のニーズおよび要件を満たすために変更される必要があります。プロファイルを変更するプロセスは、テーラリング と呼ばれます。
Compliance Operator は、TailoredProfile
オブジェクトを提供し、プロファイルを調整します。
5.6.3.1. 調整されたプロファイルの新規作成
TailoredProfile
オブジェクトを使用して、調整されたプロファイルをゼロから作成できます。適切な title
と title
を設定し、extends
フィールドを空のままにします。このカスタムプロファイルが生成するスキャンのタイプを Compliance Operator に指定します。
- ノードのスキャン: オペレーティングシステムをスキャンします。
- プラットフォームスキャン: OpenShift Container Platform の設定をスキャンします。
手順
-
TailoredProfile
オブジェクトに以下のアノテーションを設定します。
例: new-profile.yaml
apiVersion: compliance.openshift.io/v1alpha1 kind: TailoredProfile metadata: name: new-profile annotations: compliance.openshift.io/product-type: Node 1 spec: extends: ocp4-cis-node 2 description: My custom profile 3 title: Custom profile 4 enableRules: - name: ocp4-etcd-unique-ca rationale: We really need to enable this disableRules: - name: ocp4-file-groupowner-cni-conf rationale: This does not apply to the cluster
5.6.3.2. 調整されたプロファイルを使用した既存の ProfileBundles の拡張
TailoredProfile
CR は最も一般的なテーラリング操作を有効にする一方で、XCCDF 標準は OpenSCAP プロファイルの調整におけるより多くの柔軟性を提供します。さらに、組織が以前に OpenScap を使用していた場合、既存の XCCDF テーラリングファイルが存在し、これを再利用できる可能性があります。
ComplianceSuite
オブジェクトには、カスタムのテーラリングファイルにポイントできるオプションの TailoringConfigMap
属性が含まれます。TailoringConfigMap
属性の値は設定マップの名前です。これには、tailoring.xml
というキーが含まれる必要があり、このキーの値はテーラリングのコンテンツです。
手順
Red Hat Enterprise Linux CoreOS (RHCOS)
ProfileBundle
の利用可能なルールを参照します。$ oc get rules.compliance -n openshift-compliance -l compliance.openshift.io/profile-bundle=rhcos4
同じ
ProfileBundle
で利用可能な変数を参照します。$ oc get variables.compliance -n openshift-compliance -l compliance.openshift.io/profile-bundle=rhcos4
nist-moderate-modified
という名前の調整されたプロファイルを作成します。調整されたプロファイル
nist-moderate-modified
に追加するルールを選択します。この例では、2 つのルールを無効にし、1 つの値を変更することにより、rhcos4-moderate
プロファイルを拡張します。rationale
値を使用して、これらの変更が加えられた理由を記述します。new-profile-node.yaml
の例apiVersion: compliance.openshift.io/v1alpha1 kind: TailoredProfile metadata: name: nist-moderate-modified spec: extends: rhcos4-moderate description: NIST moderate profile title: My modified NIST moderate profile disableRules: - name: rhcos4-file-permissions-var-log-messages rationale: The file contains logs of error messages in the system - name: rhcos4-account-disable-post-pw-expiration rationale: No need to check this as it comes from the IdP setValues: - name: rhcos4-var-selinux-state rationale: Organizational requirements value: permissive
表5.9 スペック変数の属性 属性 説明 extends
この
TailoredProfile
がビルドされるProfile
オブジェクトの名前。title
人間が判読できる
TailoredProfile
のタイトル。disableRules
名前および理論的根拠のペアのリスト。名前ごとに、無効にするルールオブジェクトの名前を参照します。理論的根拠の値は、人間が判読できるテキストで、ルールが無効になっている理由を記述します。
manualRules
名前および理論的根拠のペアのリスト。手動ルールを追加すると、チェック結果のステータスは常に
manual
になり、修復は生成されません。この属性は自動であり、手動ルールとして設定されている場合、デフォルトでは値がありません。enableRules
名前および理論的根拠のペアのリスト。名前ごとに、有効にするルールオブジェクトの名前を参照します。理論的根拠の値は、人間が判読できるテキストで、ルールが有効になっている理由を記述します。
description
TailoredProfile
を記述する人間が判読できるテキスト。setValues
名前、理論的根拠、および値のグループ化のリスト。各名前は値セットの名前を参照します。この理論的根拠は、値セットを記述する、人間が判読できるテキストです。この値は実際の設定です。
tailoredProfile.spec.manualRules
属性を追加します。tailoredProfile.spec.manualRules.yaml
例apiVersion: compliance.openshift.io/v1alpha1 kind: TailoredProfile metadata: name: ocp4-manual-scc-check spec: extends: ocp4-cis description: This profile extends ocp4-cis by forcing the SCC check to always return MANUAL title: OCP4 CIS profile with manual SCC check manualRules: - name: ocp4-scc-limit-container-allowed-capabilities rationale: We use third party software that installs its own SCC with extra privileges
TailoredProfile
オブジェクトを作成します。$ oc create -n openshift-compliance -f new-profile-node.yaml 1
- 1
TailoredProfile
オブジェクトは、デフォルトのopenshift-compliance
namespace で作成されます。
出力例
tailoredprofile.compliance.openshift.io/nist-moderate-modified created
ScanSettingBinding
オブジェクトを定義して、新しい調整されたプロファイルnist-moderate-modified
をデフォルトのScanSetting
オブジェクトにバインドします。new-scansettingbinding.yaml
の例apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: nist-moderate-modified profiles: - apiGroup: compliance.openshift.io/v1alpha1 kind: Profile name: ocp4-moderate - apiGroup: compliance.openshift.io/v1alpha1 kind: TailoredProfile name: nist-moderate-modified settingsRef: apiGroup: compliance.openshift.io/v1alpha1 kind: ScanSetting name: default
ScanSettingBinding
オブジェクトを作成します。$ oc create -n openshift-compliance -f new-scansettingbinding.yaml
出力例
scansettingbinding.compliance.openshift.io/nist-moderate-modified created
5.6.4. Compliance Operator の未加工の結果の取得
OpenShift Container Platform クラスターのコンプライアンスを証明する際に、監査目的でスキャンの結果を提供する必要がある場合があります。
5.6.4.1. 永続ボリュームからの Compliance Operator の未加工の結果の取得
手順
Compliance Operator は、未加工の結果を生成し、これを永続ボリュームに保存します。これらの結果は Asset Reporting Format (ARF) で生成されます。
ComplianceSuite
オブジェクトを確認します。$ oc get compliancesuites nist-moderate-modified \ -o json -n openshift-compliance | jq '.status.scanStatuses[].resultsStorage'
出力例
{ "name": "ocp4-moderate", "namespace": "openshift-compliance" } { "name": "nist-moderate-modified-master", "namespace": "openshift-compliance" } { "name": "nist-moderate-modified-worker", "namespace": "openshift-compliance" }
これは、未加工の結果にアクセスできる永続ボリューム要求を表示します。
結果のいずれかの名前と namespace を使用して、未加工データの場所を確認します。
$ oc get pvc -n openshift-compliance rhcos4-moderate-worker
出力例
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE rhcos4-moderate-worker Bound pvc-548f6cfe-164b-42fe-ba13-a07cfbc77f3a 1Gi RWO gp2 92m
ボリュームをマウントする Pod を起動し、結果をコピーして、未加工の結果をフェッチします。
$ oc create -n openshift-compliance -f pod.yaml
pod.yaml の例
apiVersion: "v1" kind: Pod metadata: name: pv-extract spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: pv-extract-pod image: registry.access.redhat.com/ubi9/ubi command: ["sleep", "3000"] volumeMounts: - mountPath: "/workers-scan-results" name: workers-scan-vol securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] volumes: - name: workers-scan-vol persistentVolumeClaim: claimName: rhcos4-moderate-worker
Pod の実行後に、結果をダウンロードします。
$ oc cp pv-extract:/workers-scan-results -n openshift-compliance .
重要永続ボリュームをマウントする Pod を起動すると、要求は
Bound
として保持されます。使用中のボリュームのストレージクラスのパーミッションがReadWriteOnce
に設定されている場合、ボリュームは一度に 1 つの Pod によってのみマウント可能です。完了したら Pod を削除する必要があります。そうしないと、Operator は Pod をスケジュールし、継続して結果をこの場所に保存し続けることができなくなります。展開が完了した後に、Pod を削除できます。
$ oc delete pod pv-extract -n openshift-compliance
5.6.5. Compliance Operator の結果と修復の管理
それぞれの ComplianceCheckResult
は、1 つのコンプライアンスルールチェックの結果を表します。ルールを自動的に修復できる場合、ComplianceCheckResult
によって所有される、同じ名前を持つ ComplianceRemediation
オブジェクトが作成されます。修復が要求されない限り、修復は自動的に適用されません。これにより、OpenShift Container Platform の管理者は修復内容を確認し、検証後にのみ修復を適用することができます。
Federal Information Processing Standards (FIPS) コンプライアンスを完全に修復するには、クラスターの FIPS モードを有効にする必要があります。FIPS モードを有効にするには、FIPS モードで動作するように設定された Red Hat Enterprise Linux (RHEL) コンピューターからインストールプログラムを実行する必要があります。RHEL での FIPS モードの設定の詳細は、FIPS モードでのシステムのインストール を参照してください。
FIPS モードは、次のアーキテクチャーでサポートされています。
-
x86_64
-
ppc64le
-
s390x
5.6.5.1. コンプライアンスチェック結果のフィルター
デフォルトで、ComplianceCheckResult
オブジェクトには、チェックのクエリーおよび結果の生成後に次のステップを決定することを可能にする便利なラベルが複数付けられます。
特定のスイートに属するチェックをリスト表示します。
$ oc get -n openshift-compliance compliancecheckresults \ -l compliance.openshift.io/suite=workers-compliancesuite
特定のスキャンに属するチェックをリスト表示します。
$ oc get -n openshift-compliance compliancecheckresults \ -l compliance.openshift.io/scan=workers-scan
すべての ComplianceCheckResult
オブジェクトが ComplianceRemediation
オブジェクトを作成する訳ではありません。自動的に修復できる ComplianceCheckResult
オブジェクトのみになります。ComplianceCheckResult
オブジェクトには、compliance.openshift.io/automated-remediation
ラベルでラベル付けされる場合に関連する修復が含まれます。修復の名前はチェックの名前と同じです。
自動的に修復できる障害のあるチェックをすべてリスト表示します。
$ oc get -n openshift-compliance compliancecheckresults \ -l 'compliance.openshift.io/check-status=FAIL,compliance.openshift.io/automated-remediation'
失敗したすべてのチェックを重大度順に一覧表示します。
$ oc get compliancecheckresults -n openshift-compliance \ -l 'compliance.openshift.io/check-status=FAIL,compliance.openshift.io/check-severity=high'
出力例
NAME STATUS SEVERITY nist-moderate-modified-master-configure-crypto-policy FAIL high nist-moderate-modified-master-coreos-pti-kernel-argument FAIL high nist-moderate-modified-master-disable-ctrlaltdel-burstaction FAIL high nist-moderate-modified-master-disable-ctrlaltdel-reboot FAIL high nist-moderate-modified-master-enable-fips-mode FAIL high nist-moderate-modified-master-no-empty-passwords FAIL high nist-moderate-modified-master-selinux-state FAIL high nist-moderate-modified-worker-configure-crypto-policy FAIL high nist-moderate-modified-worker-coreos-pti-kernel-argument FAIL high nist-moderate-modified-worker-disable-ctrlaltdel-burstaction FAIL high nist-moderate-modified-worker-disable-ctrlaltdel-reboot FAIL high nist-moderate-modified-worker-enable-fips-mode FAIL high nist-moderate-modified-worker-no-empty-passwords FAIL high nist-moderate-modified-worker-selinux-state FAIL high ocp4-moderate-configure-network-policies-namespaces FAIL high ocp4-moderate-fips-mode-enabled-on-all-nodes FAIL high
手動で修復する必要のある障害のあるチェックをすべてリスト表示します。
$ oc get -n openshift-compliance compliancecheckresults \ -l 'compliance.openshift.io/check-status=FAIL,!compliance.openshift.io/automated-remediation'
手動による修復の手順は、通常 ComplianceCheckResult
オブジェクトの description
属性に保存されます。
ComplianceCheckResult Status | 説明 |
---|---|
PASS | コンプライアンスチェックが完了し、パスしました。 |
FAIL | コンプライアンスチェックが完了するまで実行され、失敗しました。 |
INFO | コンプライアンスチェックが完了するまで実行され、エラーと見なされるほど深刻ではないものが見つかりました。 |
MANUAL | コンプライアンスチェックには、成功または失敗を自動的に評価する方法がないため、手動でチェックする必要があります。 |
INCONSISTENT | コンプライアンスチェックは、さまざまなソース (通常はクラスターノード) からのさまざまな結果を報告します。 |
ERROR | コンプライアンスチェックは実行されましたが、正しく完了できませんでした。 |
NOT-APPLICABLE | 該当しない、または選択されていないため、コンプライアンスチェックは実行されませんでした。 |
5.6.5.2. 修復の確認
ComplianceRemediation
オブジェクト、および修復を所有する ComplianceCheckResult
オブジェクトの両方を確認します。ComplianceCheckResult
オブジェクトには、チェック内容やサーバーの強化措置などの人間が判読できる記述、および重大度や関連するセキュリティーコントロールなどの他の metadata
が含まれます。ComplianceRemediation
オブジェクトは、ComplianceCheckResult
に説明されている問題を修正する方法を表します。最初のスキャン後、MissingDependencies
状態の修復を確認します。
以下は、sysctl-net-ipv4-conf-all-accept-redirects
というチェックおよび修復の例です。この例では、spec
および status
のみを表示し、metadata
は省略するように編集されています。
spec: apply: false current: object: apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig spec: config: ignition: version: 3.2.0 storage: files: - path: /etc/sysctl.d/75-sysctl_net_ipv4_conf_all_accept_redirects.conf mode: 0644 contents: source: data:,net.ipv4.conf.all.accept_redirects%3D0 outdated: {} status: applicationState: NotApplied
修復ペイロードは spec.current
属性に保存されます。ペイロードには Kubernetes オブジェクトを使用することができますが、この修復はノードスキャンによって生成されたため、上記の例の修復ペイロードは MachineConfig
オブジェクトになります。Platform スキャンでは、修復ペイロードは多くの場合 (ConfigMap
や Secret
オブジェクトなど) 異なる種類のオブジェクトになりますが、通常は、修復を適用については管理者が判断します。そうでない場合には、Compliance Operator には汎用の Kubernetes オブジェクトを操作するために非常に幅広いパーミッションのセットが必要になるためです。Platform チェックの修復例は、後ほど提供されます。
修復が適用される際に修復内容を正確に確認できるようにするために、MachineConfig
オブジェクトの内容は設定の Ignition オブジェクトを使用します。形式に関する詳細は、Ignition 仕様 を参照してください。この例では、spec.config.storage.files[0].path
属性は、この修復によって作成されるファイル (/etc/sysctl.d/75-sysctl_net_ipv4_conf_all_accept_redirects.conf
) を指定し、spec.config.storage.files[0].contents.source
属性はそのファイルの内容を指定します。
ファイルの内容は URL でエンコードされます。
以下の Python スクリプトを使用して、コンテンツを表示します。
$ echo "net.ipv4.conf.all.accept_redirects%3D0" | python3 -c "import sys, urllib.parse; print(urllib.parse.unquote(''.join(sys.stdin.readlines())))"
出力例
net.ipv4.conf.all.accept_redirects=0
Compliance Operator は、修復の間に発生する可能性のある依存関係の問題を自動的に解決しません。正確な結果を確実に得るためには、修復が適用された後に再度スキャンする必要があります。
5.6.5.3. カスタマイズされたマシン設定プールを使用するときに修復を適用する
カスタム MachineConfigPool
を作成するときは、MachineConfigPool
にラベルを追加して、KubeletConfig
に存在する machineConfigPoolSelector
がそのラベルを MachineConfigPool
と一致させることができるようにします。
Compliance Operator が修復の適用を終了した後に、MachineConfigPool
オブジェクトが予期せず一時停止を解除できない可能性があるため、KubeletConfig
ファイルでは、protectKernelDefaults:false
を設定しないでください。
手順
ノードを一覧表示します。
$ oc get nodes -n openshift-compliance
出力例
NAME STATUS ROLES AGE VERSION ip-10-0-128-92.us-east-2.compute.internal Ready master 5h21m v1.28.5 ip-10-0-158-32.us-east-2.compute.internal Ready worker 5h17m v1.28.5 ip-10-0-166-81.us-east-2.compute.internal Ready worker 5h17m v1.28.5 ip-10-0-171-170.us-east-2.compute.internal Ready master 5h21m v1.28.5 ip-10-0-197-35.us-east-2.compute.internal Ready master 5h22m v1.28.5
ノードにラベルを追加します。
$ oc -n openshift-compliance \ label node ip-10-0-166-81.us-east-2.compute.internal \ node-role.kubernetes.io/<machine_config_pool_name>=
出力例
node/ip-10-0-166-81.us-east-2.compute.internal labeled
カスタム
MachineConfigPool
CR を作成します。apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfigPool metadata: name: <machine_config_pool_name> labels: pools.operator.machineconfiguration.openshift.io/<machine_config_pool_name>: '' 1 spec: machineConfigSelector: matchExpressions: - {key: machineconfiguration.openshift.io/role, operator: In, values: [worker,<machine_config_pool_name>]} nodeSelector: matchLabels: node-role.kubernetes.io/<machine_config_pool_name>: ""
- 1
labels
フィールドは、マシン設定プール (MCP) に追加するラベル名を定義します。
MCP が正常に作成されたことを確認します。
$ oc get mcp -w
5.6.5.4. デフォルトの設定値をもとにした KubeletConfig ルールの評価
OpenShift Container Platform インフラストラクチャーには、実行時に不完全な設定ファイルが含まれる場合があり、ノードは、設定オプションが欠落している場合には、設定値がデフォルトであることを想定します。一部の設定オプションは、コマンドライン引数として渡すことができます。その結果、Compliance Operator はノード上の設定ファイルが完全かどうかを確認できません。これは、ルールチェックで使用されるオプションが欠落している可能性があるためです。
デフォルトの設定値がチェックに合格するといったフォールスネガティブの結果に陥らないように、Compliance Operator はノード/プロキシー API を使用してノードのプール内にあるノードごとに設定をフェッチし、次にノードプール内のノード全体で整合性が取れた設定オプションすべてをファイルに保存することで、このファイルが対象ノードプール内の全ノードの設定を表します。これにより、スキャン結果の精度が向上します。
デフォルトの マスター
および ワーカー
ノードプール設定でこの機能を使用するために、追加の設定変更は必要ありません。
5.6.5.5. カスタムノードプールのスキャン
Compliance Operator は、各ノードプール設定のコピーを維持しません。Compliance Operator は、単一ノードプール内のすべてのノードについて一貫性のある設定オプションを設定ファイルの 1 つのコピーに集約します。次に、Compliance Operator は、特定のノードプールの設定ファイルを使用して、そのプール内のノードに対してルールを評価します。
手順
ScanSettingBinding
CR に保存されるScanSetting
オブジェクトにexample
ロールを追加します。apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: default namespace: openshift-compliance rawResultStorage: rotation: 3 size: 1Gi roles: - worker - master - example scanTolerations: - effect: NoSchedule key: node-role.kubernetes.io/master operator: Exists schedule: '0 1 * * *'
ScanSettingBinding
CR を使用するスキャンを作成します。apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: cis namespace: openshift-compliance profiles: - apiGroup: compliance.openshift.io/v1alpha1 kind: Profile name: ocp4-cis - apiGroup: compliance.openshift.io/v1alpha1 kind: Profile name: ocp4-cis-node settingsRef: apiGroup: compliance.openshift.io/v1alpha1 kind: ScanSetting name: default
検証
Platform KubeletConfig ルールは、
Node/Proxy
オブジェクトを介してチェックされます。これらのルールは、以下のコマンドを実行して検索できます。$ oc get rules -o json | jq '.items[] | select(.checkType == "Platform") | select(.metadata.name | contains("ocp4-kubelet-")) | .metadata.name'
5.6.5.6. KubeletConfig
サブプールの修復
KubeletConfig
修復ラベルは MachineConfigPool
サブプールに適用できます。
手順
ラベルをサブプール
MachineConfigPool
CR に追加します。$ oc label mcp <sub-pool-name> pools.operator.machineconfiguration.openshift.io/<sub-pool-name>=
5.6.5.7. 修復の適用
ブール値の属性 spec.apply
は、Compliance Operator で修復を適用するかどうかを制御します。属性を true
に設定すると、修復を適用することができます。
$ oc -n openshift-compliance \ patch complianceremediations/<scan-name>-sysctl-net-ipv4-conf-all-accept-redirects \ --patch '{"spec":{"apply":true}}' --type=merge
Compliance Operator が適用された修復を処理した後に、status.ApplicationState
属性は Applied に、または正しくない場合には Error に切り替わります。マシン設定の修復が適用されると、その修復と他のすべての適用済みの修復が 75-$scan-name-$suite-name
という名前の MachineConfig
オブジェクトにレンダリングされます。MachineConfig
オブジェクトはその後 Machine Config Operator によってレンダリングされ、最終的に各ノードで実行されるマシン制御デーモンのインスタンスによってマシン設定プールのすべてのノードに適用されます。
Machine Config Operator が新規 MachineConfig
オブジェクトをプール内のノードに適用すると、そのプールに属するすべてのノードが再起動されることに注意してください。これは、それぞれが複合の 75-$scan-name-$suite-name
MachineConfig
オブジェクトを再度レンダリングする、複数の修復を適用する際に不都合が生じる可能性があります。修復をすぐに適用しないようにするには、MachineConfigPool
オブジェクトの .spec.paused
属性を true
に設定してマシン設定プールを一時停止できます。
Compliance Operator は修復を自動的に適用できます。ScanSetting
の最上位のオブジェクトに autoApplyRemediations: true
を設定します。
修復の自動敵に適用するかどうかについては、慎重に考慮する必要があります。
Compliance Operator は、修復の間に発生する可能性のある依存関係の問題を自動的に解決しません。正確な結果を確実に得るためには、修復が適用された後に再度スキャンする必要があります。
5.6.5.8. プラットフォームチェックの手動による修復
通常、プラットフォームスキャンをチェックする場合、以下の 2 つの理由のために管理者が手動で修復する必要があります。
- 設定する必要のある値は、常に自動的に判別できる訳ではありません。チェックのいずれかで許可されたレジストリーのリストが指定されることが必要になりますが、スキャナー側が組織が許可する必要のあるレジストリーを認識する方法はありません。
-
異なるチェックで異なる API オブジェクトが変更されるため、クラスター内のオブジェクトを変更するために自動化された修復で
root
またはスーパーユーザーアクセスを所有することが要求されますが、これは推奨されていません。
手順
以下の例では、
ocp4-ocp-allowed-registries-for-import
ルールを使用します。これはデフォルトの OpenShift Container Platform のインストール時に失敗します。ルールoc get rule.compliance/ocp4-ocp-allowed-registries-for-import -oyaml
を検査します。このルールは、allowedRegistriesForImport
属性を設定して、ユーザーのイメージのインポートを許可するレジストリーを制限します。さらに、ルールの warning 属性はチェックされた API オブジェクトを表示するため、これを変更し、問題を修復できます。$ oc edit image.config.openshift.io/cluster
出力例
apiVersion: config.openshift.io/v1 kind: Image metadata: annotations: release.openshift.io/create-only: "true" creationTimestamp: "2020-09-10T10:12:54Z" generation: 2 name: cluster resourceVersion: "363096" selfLink: /apis/config.openshift.io/v1/images/cluster uid: 2dcb614e-2f8a-4a23-ba9a-8e33cd0ff77e spec: allowedRegistriesForImport: - domainName: registry.redhat.io status: externalRegistryHostnames: - default-route-openshift-image-registry.apps.user-cluster-09-10-12-07.devcluster.openshift.com internalRegistryHostname: image-registry.openshift-image-registry.svc:5000
スキャンを再実行します。
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/rescan=
5.6.5.9. 修復の更新
新しいバージョンのコンプライアンスコンテンツが使用されると、以前のバージョンとは異なる新しいバージョンの修復が提供される可能性があります。Compliance Operator は、適用される修復の以前のバージョンを保持します。OpenShift Container Platform の管理者は、確認し、適用する新規バージョンも通知されます。以前に適用されたものの、更新された ComplianceRemediation オブジェクトはそのステータスを Outdated に変更します。古いオブジェクトには簡単に検索できるようにラベルが付けられます。
以前に適用された修復内容は ComplianceRemediation
オブジェクトの spec.outdated
属性に保存され、新規に更新された内容は spec.current
属性に保存されます。コンテンツを新しいバージョンに更新した後に、管理者は修復を確認する必要があります。spec.outdated
属性が存在する限り、これは結果として作成される MachineConfig
オブジェクトをレンダリングするために使用されます。spec.outdated
属性が削除された後に、Compliance Operator は結果として生成される MachineConfig
オブジェクトを再度レンダリングし、これにより Operator は設定をノードにプッシュします。
手順
古い修復を検索します。
$ oc -n openshift-compliance get complianceremediations \ -l complianceoperator.openshift.io/outdated-remediation=
出力例
NAME STATE workers-scan-no-empty-passwords Outdated
現在適用されている修復は
Outdated
属性に保存され、新規の、適用されていない修復はCurrent
属性に保存されます。新規バージョンに問題がなれば、Outdated
フィールドを削除します。更新された内容を保持する必要がある場合には、Current
およびOutdated
属性を削除します。修復の新しいバージョンを適用します。
$ oc -n openshift-compliance patch complianceremediations workers-scan-no-empty-passwords \ --type json -p '[{"op":"remove", "path":/spec/outdated}]'
修復の状態は、
Outdated
からApplied
に切り替わります。$ oc get -n openshift-compliance complianceremediations workers-scan-no-empty-passwords
出力例
NAME STATE workers-scan-no-empty-passwords Applied
- ノードは新規の修復バージョンを適用し、再起動します。
Compliance Operator は、修復の間に発生する可能性のある依存関係の問題を自動的に解決しません。正確な結果を確実に得るためには、修復が適用された後に再度スキャンする必要があります。
5.6.5.10. 修復の適用解除
以前に適用された修復を適用解除することが必要になる場合があります。
手順
apply
フラグをfalse
に設定します。$ oc -n openshift-compliance \ patch complianceremediations/rhcos4-moderate-worker-sysctl-net-ipv4-conf-all-accept-redirects \ --patch '{"spec":{"apply":false}}' --type=merge
修復ステータスは
NotApplied
に変更され、複合のMachineConfig
オブジェクトは修復を含まないように再度レンダリングされます。重要修復を含む影響を受けるすべてのノードが再起動されます。
Compliance Operator は、修復の間に発生する可能性のある依存関係の問題を自動的に解決しません。正確な結果を確実に得るためには、修復が適用された後に再度スキャンする必要があります。
5.6.5.11. KubeletConfig 修復の削除
KubeletConfig
の修正は、ノードレベルのプロファイルに含まれています。KubeletConfig 修復を削除するには、KubeletConfig
オブジェクトから手動で削除する必要があります。この例は、one-rule-tp-node-master-kubelet-eviction-thresholds-set-hard-imagefs-available
修正のコンプライアンスチェックを削除する方法を示しています。
手順
one-rule-tp-node-master-kubelet-eviction-thresholds-set-hard-imagefs-available
修復のscan-name
およびコンプライアンスチェックを見つけます。$ oc -n openshift-compliance get remediation \ one-rule-tp-node-master-kubelet-eviction-thresholds-set-hard-imagefs-available -o yaml
出力例
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceRemediation metadata: annotations: compliance.openshift.io/xccdf-value-used: var-kubelet-evictionhard-imagefs-available creationTimestamp: "2022-01-05T19:52:27Z" generation: 1 labels: compliance.openshift.io/scan-name: one-rule-tp-node-master 1 compliance.openshift.io/suite: one-rule-ssb-node name: one-rule-tp-node-master-kubelet-eviction-thresholds-set-hard-imagefs-available namespace: openshift-compliance ownerReferences: - apiVersion: compliance.openshift.io/v1alpha1 blockOwnerDeletion: true controller: true kind: ComplianceCheckResult name: one-rule-tp-node-master-kubelet-eviction-thresholds-set-hard-imagefs-available uid: fe8e1577-9060-4c59-95b2-3e2c51709adc resourceVersion: "84820" uid: 5339d21a-24d7-40cb-84d2-7a2ebb015355 spec: apply: true current: object: apiVersion: machineconfiguration.openshift.io/v1 kind: KubeletConfig spec: kubeletConfig: evictionHard: imagefs.available: 10% 2 outdated: {} type: Configuration status: applicationState: Applied
注記修復によって
evictionHard
kubelet 設定が呼び出される場合は、すべてのevictionHard
パラメーター (memory.available
、nodefs.available
、nodefs.inodesFree
、imagefs.available
、およびimagefs.inodesFree
) を指定する必要があります。すべてのパラメーターを指定しないと、指定したパラメーターのみが適用され、修正が正しく機能しません。修復を削除します。
修復オブジェクトの
apply
を false に設定します。$ oc -n openshift-compliance patch \ complianceremediations/one-rule-tp-node-master-kubelet-eviction-thresholds-set-hard-imagefs-available \ -p '{"spec":{"apply":false}}' --type=merge
scan-name
を使用して、修復が適用されたKubeletConfig
オブジェクトを見つけます。$ oc -n openshift-compliance get kubeletconfig \ --selector compliance.openshift.io/scan-name=one-rule-tp-node-master
出力例
NAME AGE compliance-operator-kubelet-master 2m34s
KubeletConfig
オブジェクトから修復imagefs.available: 10%
を手動で削除します。$ oc edit -n openshift-compliance KubeletConfig compliance-operator-kubelet-master
重要修復を含む影響を受けるすべてのノードが再起動されます。
また、修正を自動適用する調整済みプロファイルのスケジュールされたスキャンからルールを除外する必要があります。除外しない場合、修正は次のスケジュールされたスキャン中に再適用されます。
5.6.5.12. 一貫性のない ComplianceScan
ScanSetting
オブジェクトは、ScanSetting
または ScanSettingBinding
オブジェクトから生成されるコンプライアンススキャンがスキャンするノードロールを一覧表示します。通常、各ノードのロールはマシン設定プールにマップされます。
マシン設定プールのすべてのマシンが同一であり、プールのノードからのすべてのスキャン結果が同一であることが予想されます。
一部の結果が他とは異なる場合、Compliance Operator は一部のノードが INCONSISTENT
として報告される ComplianceCheckResult
オブジェクトにフラグを付けます。すべての ComplianceCheckResult
オブジェクトには、compliance.openshift.io/inconsistent-check
のラベルも付けられます。
プール内のマシン数は非常に大きくなる可能性があるため、Compliance Operator は最も一般的な状態を検索し、一般的な状態とは異なるノードを一覧表示しようとします。最も一般的な状態は compliance.openshift.io/most-common-status
アノテーションに保存され、アノテーション compliance.openshift.io/inconsistent-source
には、最も一般的なステータスとは異なるチェックステータスの hostname:status
のペアが含まれます。共通状態が見つからない場合、すべての hostname:status
ペアが compliance.openshift.io/inconsistent-source
アノテーションにリスト表示されます。
可能な場合は、修復が依然として作成され、クラスターが準拠したステータスに収束できるようにします。ただし、これが常に実行可能な訳ではなく、ノード間の差異の修正は手作業で行う必要があります。スキャンに compliance.openshift.io/rescan=
オプションのアノテーションを付けて一貫性のある結果を取得するために、コンプライアンススキャンを再実行する必要があります。
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/rescan=
5.6.5.13. 関連情報
5.6.6. 高度な Compliance Operator タスクの実行
Compliance Operator には、デバッグや既存のツールとの統合を目的とする上級ユーザー向けのオプションが含まれます。
5.6.6.1. ComplianceSuite オブジェクトおよび ComplianceScan オブジェクトの直接使用
ユーザーは ScanSetting
および ScanSettingBinding
オブジェクトを利用してスイートおよびスキャンを定義することが推奨されますが、ComplianceSuite
オブジェクトを直接定義する有効なユースケースもあります。
-
スキャンする単一ルールのみを指定する。これは、デバッグモードが非常に詳細な情報を取得する可能性があるため、
debug: true
属性を使用してデバッグする際に役立ちます。これにより、OpenSCAP スキャナーの詳細度が上がります。テストを 1 つのルールに制限すると、デバッグ情報の量を減らすことができます。 - カスタム nodeSelector を指定する。修復を適用可能にするには、nodeSelector はプールと一致する必要があります。
- テーラリングファイルでスキャンをカスタム設定マップをポイントする。
- テストまたは開発目的の場合で、バンドルからのプロファイルの解析に伴うオーバーヘッドが不要な場合。
以下の例は、単一のルールのみでワーカーマシンをスキャンする ComplianceSuite
を示しています。
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceSuite metadata: name: workers-compliancesuite spec: scans: - name: workers-scan profile: xccdf_org.ssgproject.content_profile_moderate content: ssg-rhcos4-ds.xml contentImage: registry.redhat.io/compliance/openshift-compliance-content-rhel8@sha256:45dc... debug: true rule: xccdf_org.ssgproject.content_rule_no_direct_root_logins nodeSelector: node-role.kubernetes.io/worker: ""
上記の ComplianceSuite
オブジェクトおよび ComplianceScan
オブジェクトは、OpenSCAP が想定する形式で複数の属性を指定します。
プロファイル、コンテンツ、またはルールの値を見つけるには、最初に ScanSetting
および ScanSettingBinding
から同様の Suite を作成して開始するか、ルールやプロファイルなどの ProfileBundle
オブジェクトから解析されたオブジェクトを検査することができます。これらのオブジェクトには、ComplianceSuite
から参照するために使用できる xccdf_org
識別子が含まれます。
5.6.6.2. ScanSetting
スキャンの PriorityClass
の設定
大規模な環境では、デフォルトの PriorityClass
オブジェクトの優先順位が低すぎて、Pod が時間どおりにスキャンを実行することを保証できない場合があります。コンプライアンスを維持するか、自動スキャンを保証する必要のあるクラスターの場合、PriorityClass
変数を設定して、Compliance Operator がリソースの制約の状況で常に優先順位が指定されるようにします。
手順
PriorityClass
変数を設定します。apiVersion: compliance.openshift.io/v1alpha1 strictNodeScan: true metadata: name: default namespace: openshift-compliance priorityClass: compliance-high-priority 1 kind: ScanSetting showNotApplicable: false rawResultStorage: nodeSelector: node-role.kubernetes.io/master: '' pvAccessModes: - 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 tolerationSeconds: 300 - effect: NoExecute key: node.kubernetes.io/unreachable operator: Exists tolerationSeconds: 300 - effect: NoSchedule key: node.kubernetes.io/memory-pressure operator: Exists schedule: 0 1 * * * roles: - master - worker scanTolerations: - operator: Exists
- 1
ScanSetting
で参照されるPriorityClass
が見つからない場合、Operator はPriorityClass
を空のままで警告を発行し、PriorityClass
なしでスキャンのスケジュールを続行します。
5.6.6.3. 未加工の調整済みプロファイルの使用
TailoredProfile
CR は最も一般的なテーラリング操作を有効にする一方で、XCCDF 標準は OpenSCAP プロファイルの調整におけるより多くの柔軟性を提供します。さらに、組織が以前に OpenScap を使用していた場合、既存の XCCDF テーラリングファイルが存在し、これを再利用できる可能性があります。
ComplianceSuite
オブジェクトには、カスタムのテーラリングファイルにポイントできるオプションの TailoringConfigMap
属性が含まれます。TailoringConfigMap
属性の値は設定マップの名前です。これには、tailoring.xml
というキーが含まれる必要があり、このキーの値はテーラリングのコンテンツです。
手順
ファイルから
ConfigMap
オブジェクトを作成します。$ oc -n openshift-compliance \ create configmap nist-moderate-modified \ --from-file=tailoring.xml=/path/to/the/tailoringFile.xml
スイートに属するスキャンでテーラリングファイルを参照します。
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceSuite metadata: name: workers-compliancesuite spec: debug: true scans: - name: workers-scan profile: xccdf_org.ssgproject.content_profile_moderate content: ssg-rhcos4-ds.xml contentImage: registry.redhat.io/compliance/openshift-compliance-content-rhel8@sha256:45dc... debug: true tailoringConfigMap: name: nist-moderate-modified nodeSelector: node-role.kubernetes.io/worker: ""
5.6.6.4. 再スキャンの実行
通常、毎週月曜日または日次など、定義されたスケジュールでスキャンを再実行する必要がある場合があります。また、ノードの問題を修正した後にスキャンを 1 回再実行することは役に立ちます。単一スキャンを実行するには、スキャンに compliance.openshift.io/rescan=
オプションでアノテーションを付けます。
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/rescan=
再スキャンにより、rhcos-moderate
プロファイルの 4 つの追加 mc
が生成されます。
$ oc get mc
出力例
75-worker-scan-chronyd-or-ntpd-specify-remote-server 75-worker-scan-configure-usbguard-auditbackend 75-worker-scan-service-usbguard-enabled 75-worker-scan-usbguard-allow-hid-and-hub
スキャン設定の default-auto-apply
ラベルが適用されると、修復は自動的に適用され、古い修復が自動的に更新されます。依存関係により適用されなかった修復や、古くなった修復がある場合には、再スキャンにより修復が適用され、再起動がトリガーされる可能性があります。MachineConfig
オブジェクトを使用する修復のみが再起動をトリガーします。適用する更新または依存関係がない場合は、再起動は発生しません。
5.6.6.5. 結果に関するカスタムストレージサイズの設定
ComplianceCheckResult
などのカスタムリソースは、スキャンされたすべてのノード間での単一チェックの集計された結果を表しますが、スキャナーによって生成される未加工の結果を確認することが役に立つ場合もあります。未加工の結果は ARF 形式で生成され、サイズが大きくなる可能性がありますが (ノードあたり数十メガバイト)、それらを etcd
のキーと値のストアでサポートされる Kubernetes リソースに保存することは実際的ではありません。すべてのスキャンは、1GB のサイズにデフォルト設定される永続ボリューム (PV) を作成します。環境によっては、PV サイズを適宜増やす必要がある場合があります。これは、ScanSetting
および ComplianceScan
リソースの両方に公開される rawResultStorage.size
属性を使用して実行されます。
関連するパラメーターは rawResultStorage.rotation
であり、これは古いスキャンのローテーションが行われる前に保持されるスキャンの数を制御します。デフォルト値は 3 です。ローテーションポリシーを 0 に設定するとローテーションは無効になります。デフォルトのローテーションポリシーと、未加工の ARF スキャンレポートにつき 100 MB を見積もり、お使いの環境に適した PV サイズを計算できます。
5.6.6.5.1. カスタム結果ストレージ値の使用
OpenShift Container Platform は各種のパブリッククラウドまたはベアメタルにデプロイできるので、Compliance Operator は利用可能なストレージ設定を判別できません。デフォルトで、Compliance Operator はクラスターのデフォルトのストレージクラスを使用して結果を保存するために PV の作成を試行しますが、カスタムストレージクラスは rawResultStorage.StorageClassName
属性を使用して設定できます。
クラスターがデフォルトのストレージクラスを指定しない場合、この属性を設定する必要があります。
標準ストレージクラスを使用するように ScanSetting
カスタムリソースを設定し、サイズが 10GB の永続ボリュームを作成し、最後の 10 件の結果を保持します。
ScanSetting
CR の例
apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: default namespace: openshift-compliance rawResultStorage: storageClassName: standard rotation: 10 size: 10Gi roles: - worker - master scanTolerations: - effect: NoSchedule key: node-role.kubernetes.io/master operator: Exists schedule: '0 1 * * *'
5.6.6.6. スイートスキャンによって生成される修復の適用
ComplianceSuite
オブジェクトで autoApplyRemediations
ブール値パラメーターを使用することもできますが、オブジェクトに compliance.openshift.io/apply-remediations
のアノテーションを付けることもできます。これにより、Operator は作成されるすべての修復を適用できます。
手順
-
以下を実行して、
compliance.openshift.io/apply-remediations
アノテーションを適用します。
$ oc -n openshift-compliance \ annotate compliancesuites/workers-compliancesuite compliance.openshift.io/apply-remediations=
5.6.6.7. 修復の自動更新
新しいコンテンツを含むスキャンは、修復に OUTDATED
というマークを付ける可能性があります。管理者は、compliance.openshift.io/remove-outdated
アノテーションを適用して新規の修復を適用し、古い修復を削除できます。
手順
-
compliance.openshift.io/remove-outdated
アノテーションを適用します。
$ oc -n openshift-compliance \ annotate compliancesuites/workers-compliancesuite compliance.openshift.io/remove-outdated=
または、ScanSetting
または ComplianceSuite
オブジェクトに autoUpdateRemediations
フラグを設定し、修復を自動的に更新します。
5.6.6.8. コンプライアンスオペレーター向けのカスタム SCC の作成
一部の環境では、カスタムの Security Context Constraints (SCC) ファイルを作成して、コンプライアンスオペレーターの api-resource-collector
が正しいアクセス許可を利用できるようにする必要があります。
前提条件
-
admin
権限がある。
手順
restricted-adjusted-compliance.yaml
という名前の YAML ファイルで SCC を定義します。SecurityContextConstraints
オブジェクト定義allowHostDirVolumePlugin: false allowHostIPC: false allowHostNetwork: false allowHostPID: false allowHostPorts: false allowPrivilegeEscalation: true allowPrivilegedContainer: false allowedCapabilities: null apiVersion: security.openshift.io/v1 defaultAddCapabilities: null fsGroup: type: MustRunAs kind: SecurityContextConstraints metadata: name: restricted-adjusted-compliance priority: 30 1 readOnlyRootFilesystem: false requiredDropCapabilities: - KILL - SETUID - SETGID - MKNOD runAsUser: type: MustRunAsRange seLinuxContext: type: MustRunAs supplementalGroups: type: RunAsAny users: - system:serviceaccount:openshift-compliance:api-resource-collector 2 volumes: - configMap - downwardAPI - emptyDir - persistentVolumeClaim - projected - secret
SCC を作成します。
$ oc create -n openshift-compliance -f restricted-adjusted-compliance.yaml
出力例
securitycontextconstraints.security.openshift.io/restricted-adjusted-compliance created
検証
SCC が作成されたことを確認します。
$ oc get -n openshift-compliance scc restricted-adjusted-compliance
出力例
NAME PRIV CAPS SELINUX RUNASUSER FSGROUP SUPGROUP PRIORITY READONLYROOTFS VOLUMES restricted-adjusted-compliance false <no value> MustRunAs MustRunAsRange MustRunAs RunAsAny 30 false ["configMap","downwardAPI","emptyDir","persistentVolumeClaim","projected","secret"]
5.6.6.9. 関連情報
5.6.7. Compliance Operator スキャンのトラブルシューティング
このセクションでは、Compliance Operator のトラブルシューティングの方法を説明します。この情報は、問題を診断したり、バグレポートに情報を提供したりする際に役立ちます。一般的なヒントには、以下が含まれます。
Compliance Operator は、重要なことが発生すると Kubernetes イベントを生成します。コマンドを使用して、クラスター内のすべてのイベントを表示できます。
$ oc get events -n openshift-compliance
または、コマンドを使用してスキャンなどのオブジェクトのイベントを表示します。
$ oc describe -n openshift-compliance compliancescan/cis-compliance
Compliance Operator は複数のコントローラーで構成されており、API オブジェクトごとに約 1 つのコントローラーで設定されます。問題のある API オブジェクトに対応するコントローラーのみをフィルターすることが役に立つ場合があります。
ComplianceRemediation
を適用できない場合、remediationctrl
コントローラーのメッセージを表示します。jq
で解析することにより、単一のコントローラーからのメッセージをフィルターできます。$ oc -n openshift-compliance logs compliance-operator-775d7bddbd-gj58f \ | jq -c 'select(.logger == "profilebundlectrl")'
タイムスタンプには、UTC の UNIX エポックからの経過時間で秒単位でログに記録されます。人間が判読可能な日付に変換するには、
date -d @timestamp --utc
を使用します。以下は例になります。$ date -d @1596184628.955853 --utc
-
数多くのカスタムリソースで、最も重要な
ComplianceSuite
およびScanSetting
でdebug
オプションを設定できます。このオプションを有効にすると、OpenSCAP スキャナー Pod や他のヘルパー Pod の詳細度が上がります。 -
単一ルールの合否が予期せずに出される場合、そのルールのみを使用して単一スキャンまたはスイートを実行し、対応する
ComplianceCheckResult
オブジェクトからルール ID を見つけ、それをScan
CR のrule
属性として使用することが役に立つ場合があります。次に、debug
オプションが有効になると、スキャナー Pod のscanner
コンテナーログに未加工の OpenSCAP ログが表示されます。
5.6.7.1. スキャンの仕組み
以下のセクションでは、Compliance Operator スキャンのコンポーネントおよびステージを説明します。
5.6.7.1.1. コンプライアンスのソース
コンプライアンスコンテンツは、ProfileBundle
オブジェクトから生成される Profile
オブジェクトに保存されます。Compliance Operator は、ProfileBundle
をクラスター用とクラスターノード用に作成します。
$ oc get -n openshift-compliance profilebundle.compliance
$ oc get -n openshift-compliance profile.compliance
ProfileBundle
オブジェクトは、Bundle
の名前でラベルが付けられたデプロイメントで処理されます。Bundle
で問題のトラブルシューティングを行うには、デプロイメントを見つけ、デプロイメントで Pod のログを表示できます。
$ oc logs -n openshift-compliance -lprofile-bundle=ocp4 -c profileparser
$ oc get -n openshift-compliance deployments,pods -lprofile-bundle=ocp4
$ oc logs -n openshift-compliance pods/<pod-name>
$ oc describe -n openshift-compliance pod/<pod-name> -c profileparser
5.6.7.1.2. ScanSetting および ScanSettingBinding のライフサイクルおよびデバッグ
有効なコンプライアンスコンテンツソースを使用して、高レベルの ScanSetting
および ScanSettingBinding
オブジェクトを、ComplianceSuite
および ComplianceScan
オブジェクトを生成するために使用できます。
apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: my-companys-constraints debug: true # For each role, a separate scan will be created pointing # to a node-role specified in roles roles: - worker --- apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: my-companys-compliance-requirements profiles: # Node checks - name: rhcos4-e8 kind: Profile apiGroup: compliance.openshift.io/v1alpha1 # Cluster checks - name: ocp4-e8 kind: Profile apiGroup: compliance.openshift.io/v1alpha1 settingsRef: name: my-companys-constraints kind: ScanSetting apiGroup: compliance.openshift.io/v1alpha1
ScanSetting
および ScanSettingBinding
オブジェクトはどちらも、logger=scansettingbindingctrl
のタグの付けられた同じコントローラーで処理されます。これらのオブジェクトにはステータスがありません。問題はイベントの形式で通信されます。
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuiteCreated 9m52s scansettingbindingctrl ComplianceSuite openshift-compliance/my-companys-compliance-requirements created
今回のリリースにより、ComplianceSuite
オブジェクトが作成されました。フローは新規に作成された ComplianceSuite
を継続して調整します。
5.6.7.1.3. ComplianceSuite カスタムリソースのライフサイクルおよびデバッグ
ComplianceSuite
CR は ComplianceScan
CR に関連したラッパーです。ComplianceSuite
CR は、logger=suitectrl
のタグが付けられたコントローラーによって処理されます。このコントローラーは、スイートからのスキャンの作成を処理し、個別のスキャンのステータスを調整し、これを単一の Suite ステータスに集約します。スイートが定期的に実行するよう設定されている場合、suitectrl
は、初回の実行後にスキャンをスイートで再実行する CronJob
CR の作成にも対応します。
$ oc get cronjobs
出力例
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE <cron_name> 0 1 * * * False 0 <none> 151m
最も重要な問題について、イベントが生成されます。oc describe compliancesuites/<name>
を使用してそれらを表示します。Suite
オブジェクトには、Status
サブリソースも含まれており、これはこのスイートに属する Scan
オブジェクトが Status
サブリソースを更新すると更新されます。予想されるすべてのスキャンが作成されると、コントローラーがスキャンコントローラーに渡されます。
5.6.7.1.4. ComplianceScan カスタムリソースのライフサイクルおよびデバッグ
ComplianceScan
CR は scanctrl
コントローラーによって処理されます。これは、実際のスキャンとスキャン結果が作成される場所でもあります。それぞれのスキャンは複数のフェーズを経由します。
5.6.7.1.4.1. Pending (保留) フェーズ
このフェーズでは、スキャンがその正確性を検証します。ストレージサイズなどの一部のパラメーターが無効な場合、スキャンは ERROR 結果と共に DONE に移行します。それ以外の場合は、Launching (起動) フェーズに進みます。
5.6.7.1.4.2. Launching (起動) フェーズ
このフェーズでは、いくつかの config map にスキャナー Pod の環境またはスキャナー Pod が評価するスクリプトが直接含まれます。config map をリスト表示します。
$ oc -n openshift-compliance get cm \ -l compliance.openshift.io/scan-name=rhcos4-e8-worker,complianceoperator.openshift.io/scan-script=
これらの config map はスキャナー Pod によって使用されます。スキャナーの動作を変更したり、スキャナーのデバッグレベルを変更したり、未加工の結果を出力したりする必要がある場合は、1 つの方法として config map を変更することができます。その後、未加工の ARF の結果を保存するために永続ボリューム要求がスキャンごとに作成されます。
$ oc get pvc -n openshift-compliance -lcompliance.openshift.io/scan-name=rhcos4-e8-worker
PVC はスキャンごとの ResultServer
デプロイメントでマウントされます。ResultServer
は、個別のスキャナー Pod が完全な ARF 結果をアップロードする単純な HTTP サーバーです。各サーバーは、異なるノードで実行できます。完全な ARF の結果のサイズは非常に大きくなる可能性があり、複数のノードから同時にマウントできるボリュームを作成することができると想定することはできません。スキャンが終了した後に、ResultServer
デプロイメントはスケールダウンされます。未加工の結果のある PVC は別のカスタム Pod からマウントでき、結果はフェッチしたり、検査したりできます。スキャナー Pod と ResultServer
間のトラフィックは相互 TLS プロトコルで保護されます。
最後に、スキャナー Pod はこのフェーズで起動します。Platform
スキャンインスタンスの 1 つのスキャナー Pod と、node
スキャンインスタンスの一致するノードごとに 1 つのスキャナー Pod です。ノードごとの Pod にはノード名のラベルが付けられます。それぞれの Pod には、常に ComplianceScan
という名前のラベルが付けられます。
$ oc get pods -lcompliance.openshift.io/scan-name=rhcos4-e8-worker,workload=scanner --show-labels
出力例
NAME READY STATUS RESTARTS AGE LABELS rhcos4-e8-worker-ip-10-0-169-90.eu-north-1.compute.internal-pod 0/2 Completed 0 39m compliance.openshift.io/scan-name=rhcos4-e8-worker,targetNode=ip-10-0-169-90.eu-north-1.compute.internal,workload=scanner
+ スキャンは Running (実行) フェーズに進みます。
5.6.7.1.4.3. Running (実行) フェーズ
実行フェーズは、スキャナー Pod の完了後に開始します。以下の用語およびプロセスは実行フェーズで使用されます。
-
init container:
content-container
という 1 つの init コンテナーがあります。これは、contentImage コンテナーを実行し、contentFile を、この Pod の他のコンテナーで共有される/content
ディレクトリーにコピーします。 -
scanner: このコンテナーはスキャンを実行します。ノードのスキャンの場合には、コンテナーはノードファイルシステムを
/host
としてマウントし、init コンテナーによって配信されるコンテンツをマウントします。また、コンテナーは Launching (起動) フェーズで作成されるentrypoint
ConfigMap
をマウントし、これを実行します。エントリーポイントConfigMap
のデフォルトスクリプトは OpenSCAP を実行し、結果ファイルを Pod のコンテナー間で共有される/results
ディレクトリーに保存します。この Pod のログを表示して、OpenSCAP スキャナーがチェックした内容を判別できます。より詳細な出力は、debug
フラグを使用して表示できます。 logcollector: logcollector コンテナーは、スキャナーコンテナーが終了するまで待機します。その後、これは
ConfigMap
として完全な ARF 結果をResultServer
にアップロードし、スキャン結果および OpenSCAP 結果コードと共に XCCDF 結果を個別にアップロードします。これらの結果の config map には、スキャン名 (compliance.openshift.io/scan-name=rhcos4-e8-worker
) のラベルが付けられます。$ oc describe cm/rhcos4-e8-worker-ip-10-0-169-90.eu-north-1.compute.internal-pod
出力例
Name: rhcos4-e8-worker-ip-10-0-169-90.eu-north-1.compute.internal-pod Namespace: openshift-compliance Labels: compliance.openshift.io/scan-name-scan=rhcos4-e8-worker complianceoperator.openshift.io/scan-result= Annotations: compliance-remediations/processed: compliance.openshift.io/scan-error-msg: compliance.openshift.io/scan-result: NON-COMPLIANT OpenSCAP-scan-result/node: ip-10-0-169-90.eu-north-1.compute.internal Data ==== exit-code: ---- 2 results: ---- <?xml version="1.0" encoding="UTF-8"?> ...
Platform
スキャンのスキャナー Pod も同様ですが、以下の点で異なります。
-
api-resource-collector
という追加の init コンテナーがあります。これは content-container init、コンテナーで提供される OpenSCAP コンテンツを読み取り、コンテンツで確認する必要のある API リソースを判別し、それらの API リソースをscanner
コンテナーが読み取りを行う共有ディレクトリーに保存します。 -
scanner
コンテナーは、ホストファイルシステムをマウントする必要はありません。
スキャナー Pod が実行されると、スキャンは Aggregating (集計) フェーズに移行します。
5.6.7.1.4.4. Aggregating (集計) フェーズ
Aggregating (集計) フェーズでは、スキャンコントローラーがアグリゲーター Pod と呼ばれる別の Pod を起動します。その目的は、結果の ConfigMap
オブジェクトを取り、結果を読み取り、それぞれのチェックの結果に対応する Kubernetes オブジェクトを作成することにあります。チェックの失敗を自動的に修復できる場合は、ComplianceRemediation
オブジェクトが作成されます。チェックと修復について人間が判読できるメタデータを提供するために、アグリゲーター Pod は init コンテナーを使用して OpenSCAP コンテンツもマウントします。
設定マップがアグリゲーター Pod によって処理される場合、これには compliance-remediations/processed
ラベルでラベルが付けられます。このフェーズの結果は ComplianceCheckResult
オブジェクトになります。
$ oc get compliancecheckresults -lcompliance.openshift.io/scan-name=rhcos4-e8-worker
出力例
NAME STATUS SEVERITY rhcos4-e8-worker-accounts-no-uid-except-zero PASS high rhcos4-e8-worker-audit-rules-dac-modification-chmod FAIL medium
ComplianceRemediation
オブジェクト:
$ oc get complianceremediations -lcompliance.openshift.io/scan-name=rhcos4-e8-worker
出力例
NAME STATE rhcos4-e8-worker-audit-rules-dac-modification-chmod NotApplied rhcos4-e8-worker-audit-rules-dac-modification-chown NotApplied rhcos4-e8-worker-audit-rules-execution-chcon NotApplied rhcos4-e8-worker-audit-rules-execution-restorecon NotApplied rhcos4-e8-worker-audit-rules-execution-semanage NotApplied rhcos4-e8-worker-audit-rules-execution-setfiles NotApplied
これらの CR が作成されると、アグリゲーター Pod は終了し、スキャンは Done (終了) フェーズに移行します。
5.6.7.1.4.5. Done (終了) フェーズ
最終のスキャンフェーズでは、必要な場合にスキャンリソースがクリーンアップされ、ResultServer
デプロイメントは (スキャンが 1 回限りの場合) スケールダウンされるか、(スキャンが継続される場合) 削除されます。次回のスキャンインスタンスではデプロイメントを再作成します。
また、Done (終了) フェーズでは、スキャンにアノテーションを付けてスキャンの再実行をトリガーすることもできます。
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/rescan=
スキャンが Done (終了) フェーズに到達した後に、修復が autoApplyRemediations: true
を指定して自動的に適用されるように設定されていない限り、自動的に実行されることは何もありません。OpenShift Container Platform 管理者は、修復を確認し、必要に応じてそれらを適用できるようになりました。修復が自動的に適用されるように設定されている場合、ComplianceSuite
コントローラーが Done (終了) フェーズで引き継ぎ、マシン設定プールをスキャンがマップされるポイントで一時停止し、すべての修復を 1 回で適用します。修復が適用されると、ComplianceRemediation
コントローラーが引き継ぎます。
5.6.7.1.5. ComplianceRemediation コントローラーのライフサイクルおよびデバッグ
サンプルスキャンは特定の結果を報告します。修復の 1 つを有効にするには、apply
属性を true
に切り替えます。
$ oc patch complianceremediations/rhcos4-e8-worker-audit-rules-dac-modification-chmod --patch '{"spec":{"apply":true}}' --type=merge
ComplianceRemediation
コントローラー (logger=remediationctrl
) は変更されたオブジェクトを調整します。調整の結果として、調整される修復オブジェクトのステータスが変更されますが、適用されたすべての修復が含まれる、レンダリングされるスイートごとの MachineConfig
オブジェクトも変更されます。
MachineConfig
オブジェトは常に 75-
で開始し、スキャンとスィートに基づいて名前が付けられます。
$ oc get mc | grep 75-
出力例
75-rhcos4-e8-worker-my-companys-compliance-requirements 3.2.0 2m46s
現在 mc
を構成する修復は、マシン設定のアノテーションにリスト表示されます。
$ oc describe mc/75-rhcos4-e8-worker-my-companys-compliance-requirements
出力例
Name: 75-rhcos4-e8-worker-my-companys-compliance-requirements Labels: machineconfiguration.openshift.io/role=worker Annotations: remediation/rhcos4-e8-worker-audit-rules-dac-modification-chmod:
ComplianceRemediation
コントローラーのアルゴリズムは以下のようになります。
- 現在適用されているすべての修復は初期の修復セットに読み込まれます。
- 調整された修復が適用されることが予想される場合、それはセットに追加されます。
-
MachineConfig
オブジェクトはセットからレンダリングされ、セット内の修復の名前でアノテーションが付けられます。セットが空の場合 (最後の修復は適用されない)、レンダリングされるMachineConfig
オブジェクトは削除されます。 - レンダリングされたマシン設定がクラスターにすでに適用されているものとは異なる場合にのみ、適用される MC は更新されます (または作成されるか、削除されます)。
-
MachineConfig
オブジェクトの作成または変更により、machineconfiguration.openshift.io/role
ラベルに一致するノードの再起動がトリガーされます。詳細は、Machine Config Operator のドキュメントを参照してください。
修復ループは、レンダリングされたマシン設定が更新され (必要な場合)、調整された修復オブジェクトのステータスが更新されると終了します。この場合、修復を適用すると再起動がトリガーされます。再起動後、スキャンにアノテーションを付け、再度実行します。
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/rescan=
スキャンが実行され、終了します。渡される修復の有無を確認します。
$ oc -n openshift-compliance \ get compliancecheckresults/rhcos4-e8-worker-audit-rules-dac-modification-chmod
出力例
NAME STATUS SEVERITY rhcos4-e8-worker-audit-rules-dac-modification-chmod PASS medium
5.6.7.1.6. 役に立つラベル
Compliance Operator によって起動する各 Pod には、それが属するスキャンおよびその機能にとくに関連するラベルが付けられます。スキャン ID には compliance.openshift.io/scan-name
ラベルが付けられます。ワークロード ID には、workload
ラベルでラベルが付けられます。
Compliance Operator は以下のワークロードをスケジュールします。
- scanner: コンプライアンススキャンを実行します。
- resultserver: コンプライアンススキャンの未加工の結果を保存します。
- aggregator: 結果を集計し、不整合を検出し、結果オブジェクト (チェックの結果と修復) を出力します。
- suitererunner: 再実行するスイートにタグを付けます (スケジュールが設定されている場合)。
- profileparser: データストリームを解析し、適切なプロファイル、ルールおよび変数を作成します。
デバッグおよびログが特定のワークロードに必要な場合は、以下を実行します。
$ oc logs -l workload=<workload_name> -c <container_name>
5.6.7.2. Compliance Operator のリソース制限の増加
Compliance Operator は、デフォルトの制限よりもメモリーを多く必要とする場合があります。この問題を軽減する最善の方法は、カスタムリソースの制限を設定することです。
スキャナー Pod のデフォルトのメモリーおよび CPU 制限を増やすには、ScanSetting カスタムリソース を参照してください。
手順
Operator のメモリー制限を 500 Mi に増やすには、
co-memlimit-patch.yaml
という名前の以下のパッチファイルを作成します。spec: config: resources: limits: memory: 500Mi
パッチファイルを適用します。
$ oc patch sub compliance-operator -nopenshift-compliance --patch-file co-memlimit-patch.yaml --type=merge
5.6.7.3. Operator リソース制約の設定
resources
フィールドは、Operator Lifecycle Manager (OLM) によって作成される Pod 内のすべてのコンテナーの Resource Constraints を定義します。
このプロセスで適用されるリソース制約は、既存のリソース制約を上書きします。
手順
Subscription
オブジェクトを編集して、各コンテナーに 0.25 cpu と 64 Mi のメモリーの要求と、0.5 cpu と 128 Mi のメモリーの制限を挿入します。kind: Subscription metadata: name: compliance-operator namespace: openshift-compliance spec: package: package-name channel: stable config: resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
5.6.7.4. ScanSetting リソースの設定
500 を超える MachineConfig を含むクラスターで Compliance Operator を使用する場合、Platform
スキャンを実行するときに、ocp4-pci-dss-api-checks-pod
Pod が init
フェーズで一時停止することがあります。
このプロセスで適用されるリソース制約は、既存のリソース制約を上書きします。
手順
ocp4-pci-dss-api-checks-pod
Pod がInit:OOMKilled
ステータスでスタックしていることを確認します。$ oc get pod ocp4-pci-dss-api-checks-pod -w
出力例
NAME READY STATUS RESTARTS AGE ocp4-pci-dss-api-checks-pod 0/2 Init:1/2 8 (5m56s ago) 25m ocp4-pci-dss-api-checks-pod 0/2 Init:OOMKilled 8 (6m19s ago) 26m
ScanSetting
CR のscanLimits
属性を編集して、ocp4-pci-dss-api-checks-pod
Pod で使用可能なメモリーを増やします。timeout: 30m strictNodeScan: true metadata: name: default namespace: openshift-compliance kind: ScanSetting showNotApplicable: false rawResultStorage: nodeSelector: node-role.kubernetes.io/master: '' pvAccessModes: - 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 tolerationSeconds: 300 - effect: NoExecute key: node.kubernetes.io/unreachable operator: Exists tolerationSeconds: 300 - effect: NoSchedule key: node.kubernetes.io/memory-pressure operator: Exists schedule: 0 1 * * * roles: - master - worker apiVersion: compliance.openshift.io/v1alpha1 maxRetryOnTimeout: 3 scanTolerations: - operator: Exists scanLimits: memory: 1024Mi 1
- 1
- デフォルト設定は
500Mi
です。
ScanSetting
CR をクラスターに適用します。$ oc apply -f scansetting.yaml
5.6.7.5. ScanSetting タイムアウトの設定
ScanSetting
オブジェクトには、ComplianceScanSetting
オブジェクトで 1h30m
などの期間文字列として指定できるタイムアウトオプションがあります。指定されたタイムアウト内にスキャンが終了しない場合、スキャンは maxRetryOnTimeout
制限に達するまで再試行されます。
手順
ScanSetting で
timeout
とmaxRetryOnTimeout
を設定するには、既存のScanSetting
オブジェクトを変更します。apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSetting metadata: name: default namespace: openshift-compliance rawResultStorage: rotation: 3 size: 1Gi roles: - worker - master scanTolerations: - effect: NoSchedule key: node-role.kubernetes.io/master operator: Exists schedule: '0 1 * * *' timeout: '10m0s' 1 maxRetryOnTimeout: 3 2
5.6.7.6. サポート
このドキュメントで説明されている手順、または OpenShift Container Platform で問題が発生した場合は、Red Hat カスタマーポータル にアクセスしてください。
カスタマーポータルでは、次のことができます。
- Red Hat 製品に関するアーティクルおよびソリューションを対象とした Red Hat ナレッジベースの検索またはブラウズ。
- Red Hat サポートに対するサポートケースの送信。
- その他の製品ドキュメントへのアクセス。
クラスターの問題を特定するには、OpenShift Cluster Manager で Insights を使用できます。Insights により、問題の詳細と、利用可能な場合は問題の解決方法に関する情報が提供されます。
このドキュメントの改善への提案がある場合、またはエラーを見つけた場合は、最も関連性の高いドキュメントコンポーネントの Jira Issue を送信してください。セクション名や OpenShift Container Platform バージョンなどの具体的な情報を提供してください。
5.6.8. oc-compliance プラグインの使用
Compliance Operator はクラスターのチェックおよび修復の多くを自動化しますが、クラスターを準拠させる完全なプロセスでは、管理者が Compliance Operator API や他のコンポーネントと対話する必要があります。oc-compliance
プラグインはプロセスを容易にします。
5.6.8.1. oc-compliance プラグインのインストール
手順
oc-compliance
イメージをデプロイメントして、oc-compliance
バイナリーを取得します。$ podman run --rm -v ~/.local/bin:/mnt/out:Z registry.redhat.io/compliance/oc-compliance-rhel8:stable /bin/cp /usr/bin/oc-compliance /mnt/out/
出力例
W0611 20:35:46.486903 11354 manifest.go:440] Chose linux/amd64 manifest from the manifest list.
oc-compliance
を実行できるようになりました。
5.6.8.2. 未加工の結果の取得
コンプライアンススキャンが完了すると、個別のチェックの結果は生成される ComplianceCheckResult
カスタムリソース (CR) にリスト表示されます。ただし、管理者または監査担当者にはスキャンの詳細情報が必要になる場合があります。OpenSCAP ツールは、詳細な結果で Advanced Recording Format (ARF) 形式のファイルを作成します。この ARF ファイルは設定マップまたは他の標準の Kubernetes リソースに保存するには大き過ぎるため、永続ボリューム (PV) がこれを組み込むように作成されます。
手順
Compliance Operator を使用した PV からの結果の取得は 4 つの手順で実行されます。ただし、
oc-compliance
プラグインでは、単一のコマンドを使用できます。$ oc compliance fetch-raw <object-type> <object-name> -o <output-path>
-
<object-type>
は、スキャンの機能に使用されたオブジェクトによって、scansettingbinding
、compliancescan
またはcompliancesuite
のいずれかにすることができます。 <object-name>
は、ARF ファイルを収集に使用するバインディング、スイート、またはスキャンオブジェクトの名前です。<output-path>
は、結果を配置するローカルディレクトリーです。以下に例を示します。
$ oc compliance fetch-raw scansettingbindings my-binding -o /tmp/
出力例
Fetching results for my-binding scans: ocp4-cis, ocp4-cis-node-worker, ocp4-cis-node-master Fetching raw compliance results for scan 'ocp4-cis'....... The raw compliance results are available in the following directory: /tmp/ocp4-cis Fetching raw compliance results for scan 'ocp4-cis-node-worker'........... The raw compliance results are available in the following directory: /tmp/ocp4-cis-node-worker Fetching raw compliance results for scan 'ocp4-cis-node-master'...... The raw compliance results are available in the following directory: /tmp/ocp4-cis-node-master
ディレクトリー内のファイルの一覧を表示します。
$ ls /tmp/ocp4-cis-node-master/
出力例
ocp4-cis-node-master-ip-10-0-128-89.ec2.internal-pod.xml.bzip2 ocp4-cis-node-master-ip-10-0-150-5.ec2.internal-pod.xml.bzip2 ocp4-cis-node-master-ip-10-0-163-32.ec2.internal-pod.xml.bzip2
結果を抽出します。
$ bunzip2 -c resultsdir/worker-scan/worker-scan-stage-459-tqkg7-compute-0-pod.xml.bzip2 > resultsdir/worker-scan/worker-scan-ip-10-0-170-231.us-east-2.compute.internal-pod.xml
結果を表示します。
$ ls resultsdir/worker-scan/
出力例
worker-scan-ip-10-0-170-231.us-east-2.compute.internal-pod.xml worker-scan-stage-459-tqkg7-compute-0-pod.xml.bzip2 worker-scan-stage-459-tqkg7-compute-1-pod.xml.bzip2
5.6.8.3. スキャンの再実行
スキャンをスケジュールされたジョブとして実行することは可能ですが、多くの場合、修復の適用後、またはクラスターへの他の変更が加えられるなどの場合にとくにスキャンをオンデマンドで再実行する必要があります。
手順
Compliance Operator でスキャンを再実行するには、スキャンオブジェクトでアノテーションを使用する必要があります。ただし、
oc-compliance
プラグインを使用すると、1 つのコマンドでスキャンを再実行できます。以下のコマンドを入力して、my-binding
という名前のScanSettingBinding
オブジェクトのスキャンを再実行します。$ oc compliance rerun-now scansettingbindings my-binding
出力例
Rerunning scans from 'my-binding': ocp4-cis Re-running scan 'openshift-compliance/ocp4-cis'
5.6.8.4. ScanSettingBinding カスタムリソースの使用
Compliance Operator が提供する ScanSetting
および ScanSettingBinding
カスタムリソース (CR) を使用する場合、schedule
、machine roles
、tolerations
などのスキャンオプションのセットを使用している間に、複数のプロファイルに対してスキャンを実行できます。複数の ComplianceSuite
オブジェクトまたは ComplianceScan
オブジェクトを使用することがより容易になりますが、新規ユーザーが混乱を生じさせる可能性があります。
oc compliance bind
サブコマンドは、ScanSettingBinding
CR の作成に役立ちます。
手順
以下を実行します。
$ oc compliance bind [--dry-run] -N <binding name> [-S <scansetting name>] <objtype/objname> [..<objtype/objname>]
-
-S
フラグを省略する場合、Compliance Operator によって提供されるdefault
のスキャン設定が使用されます。 -
オブジェクトタイプは、Kubernetes オブジェクトタイプです。
profile
またはtailoredprofile
にすることができます。複数のオブジェクトを指定できます。 -
オブジェクト名は、
.metadata.name
などの Kubernetes リソースの名前です。 --dry-run
オプションを追加して、作成されるオブジェクトの YAML ファイルを表示します。たとえば、以下のプロファイルとスキャン設定を指定します。
$ oc get profile.compliance -n openshift-compliance
出力例
NAME AGE VERSION ocp4-cis 3h49m 1.5.0 ocp4-cis-1-4 3h49m 1.4.0 ocp4-cis-1-5 3h49m 1.5.0 ocp4-cis-node 3h49m 1.5.0 ocp4-cis-node-1-4 3h49m 1.4.0 ocp4-cis-node-1-5 3h49m 1.5.0 ocp4-e8 3h49m ocp4-high 3h49m Revision 4 ocp4-high-node 3h49m Revision 4 ocp4-high-node-rev-4 3h49m Revision 4 ocp4-high-rev-4 3h49m Revision 4 ocp4-moderate 3h49m Revision 4 ocp4-moderate-node 3h49m Revision 4 ocp4-moderate-node-rev-4 3h49m Revision 4 ocp4-moderate-rev-4 3h49m Revision 4 ocp4-nerc-cip 3h49m ocp4-nerc-cip-node 3h49m ocp4-pci-dss 3h49m 3.2.1 ocp4-pci-dss-3-2 3h49m 3.2.1 ocp4-pci-dss-4-0 3h49m 4.0.0 ocp4-pci-dss-node 3h49m 3.2.1 ocp4-pci-dss-node-3-2 3h49m 3.2.1 ocp4-pci-dss-node-4-0 3h49m 4.0.0 ocp4-stig 3h49m V2R1 ocp4-stig-node 3h49m V2R1 ocp4-stig-node-v1r1 3h49m V1R1 ocp4-stig-node-v2r1 3h49m V2R1 ocp4-stig-v1r1 3h49m V1R1 ocp4-stig-v2r1 3h49m V2R1 rhcos4-e8 3h49m rhcos4-high 3h49m Revision 4 rhcos4-high-rev-4 3h49m Revision 4 rhcos4-moderate 3h49m Revision 4 rhcos4-moderate-rev-4 3h49m Revision 4 rhcos4-nerc-cip 3h49m rhcos4-stig 3h49m V2R1 rhcos4-stig-v1r1 3h49m V1R1 rhcos4-stig-v2r1 3h49m V2R1
$ oc get scansettings -n openshift-compliance
出力例
NAME AGE default 10m default-auto-apply 10m
-
default
設定をocp4-cis
およびocp4-cis-node
プロファイルに適用するには、以下を実行します。$ oc compliance bind -N my-binding profile/ocp4-cis profile/ocp4-cis-node
出力例
Creating ScanSettingBinding my-binding
ScanSettingBinding
CR が作成された後、バインドされたプロファイルは、関連する設定で両方のプロファイルのスキャンを開始します。全体的に、これは Compliance Operator でスキャンを開始するための最も高速な方法です。
5.6.8.5. コントロールの表示
コンプライアンス標準は通常、以下のように階層に編成されます。
- ベンチマークは、特定の標準に関する一連のコントロールの最上位の定義です。例: FedRAMP Moderate または Center for Internet Security (CIS) v.1.6.0。
- コントロールは、ベンチマークへの準拠を確保するために満たさなければならない要件のファミリーを説明します。例: FedRAMP AC-01(アクセス制御ポリシーおよび手順)。
- ルールは、コンプライアンスを取るシステムに固有の単一のチェックでありで、これらの 1 つ以上のルールがコントロールにマップされます。
- Compliance Operator は、単一のベンチマークに関するプロファイルへのルールのグループ化に対応します。プロファイルの一連のルールの条件を満たすコントロールを判別することが容易ではない場合があります。
手順
oc compliance
controls
サブコマンドは、指定されたプロファイルが満たす標準およびコントロールのレポートを提供します。$ oc compliance controls profile ocp4-cis-node
出力例
+-----------+----------+ | FRAMEWORK | CONTROLS | +-----------+----------+ | CIS-OCP | 1.1.1 | + +----------+ | | 1.1.10 | + +----------+ | | 1.1.11 | + +----------+ ...
5.6.8.6. コンプライアンス修復の詳細情報の取得
Compliance Operator は、クラスターが準拠できるようにする必要な変更を自動化するために使用される修復オブジェクトを提供します。fetch-fixes
サブコマンドは、使用する設定の修復を正確に理解するのに役立ちます。fetch-fixes
サブコマンドを使用して、検査するディレクトリーにプロファイル、ルール、または ComplianceRemediation
オブジェクトから修復オブジェクトをデプロイメントします。
手順
プロファイルの修復を表示します。
$ oc compliance fetch-fixes profile ocp4-cis -o /tmp
出力例
No fixes to persist for rule 'ocp4-api-server-api-priority-flowschema-catch-all' 1 No fixes to persist for rule 'ocp4-api-server-api-priority-gate-enabled' No fixes to persist for rule 'ocp4-api-server-audit-log-maxbackup' Persisted rule fix to /tmp/ocp4-api-server-audit-log-maxsize.yaml No fixes to persist for rule 'ocp4-api-server-audit-log-path' No fixes to persist for rule 'ocp4-api-server-auth-mode-no-aa' No fixes to persist for rule 'ocp4-api-server-auth-mode-node' No fixes to persist for rule 'ocp4-api-server-auth-mode-rbac' No fixes to persist for rule 'ocp4-api-server-basic-auth' No fixes to persist for rule 'ocp4-api-server-bind-address' No fixes to persist for rule 'ocp4-api-server-client-ca' Persisted rule fix to /tmp/ocp4-api-server-encryption-provider-cipher.yaml Persisted rule fix to /tmp/ocp4-api-server-encryption-provider-config.yaml
- 1
- ルールが自動的に修復されないか、修復が行われないために対応する修復のないルールがプロファイルにある場合は常に、
No fixes to persist
の警告が出されることが予想されます。
YAML ファイルのサンプルを表示できます。
head
コマンドは、最初の 10 行を表示します。$ head /tmp/ocp4-api-server-audit-log-maxsize.yaml
出力例
apiVersion: config.openshift.io/v1 kind: APIServer metadata: name: cluster spec: maximumFileSizeMegabytes: 100
スキャン後に作成される
ComplianceRemediation
オブジェクトから修復を表示します。$ oc get complianceremediations -n openshift-compliance
出力例
NAME STATE ocp4-cis-api-server-encryption-provider-cipher NotApplied ocp4-cis-api-server-encryption-provider-config NotApplied
$ oc compliance fetch-fixes complianceremediations ocp4-cis-api-server-encryption-provider-cipher -o /tmp
出力例
Persisted compliance remediation fix to /tmp/ocp4-cis-api-server-encryption-provider-cipher.yaml
YAML ファイルのサンプルを表示できます。
head
コマンドは、最初の 10 行を表示します。$ head /tmp/ocp4-cis-api-server-encryption-provider-cipher.yaml
出力例
apiVersion: config.openshift.io/v1 kind: APIServer metadata: name: cluster spec: encryption: type: aescbc
修復を直接適用するには注意が必要です。一部の修復は、適度なプロファイルの usbguard ルールなどのように一括して適用できない場合があります。このような場合、Compliance Operator は依存関係に対応し、クラスターは正常な状態のままになるため、ルールを適用できます。
5.6.8.7. ComplianceCheckResult オブジェクトの詳細の表示
スキャンの実行が終了すると、ComplianceCheckResult
オブジェクトが個別のスキャンルールに作成されます。view-result
サブコマンドは、ComplianceCheckResult
オブジェクトの詳細の人間が判読できる出力を提供します。
手順
以下を実行します。
$ oc compliance view-result ocp4-cis-scheduler-no-bind-address