5.13. カスタムリソース定義を理解する
OpenShift Container Platform の コンプライアンス Operator は、コンプライアンススキャンを実行するためのいくつかのカスタムリソース定義 (CRD) を提供します。コンプライアンススキャンを実行するには、ComplianceAsCode コミュニティープロジェクトから派生した事前定義されたセキュリティーポリシーを利用します。コンプライアンスオペレーターは、これらのセキュリティーポリシーを CRD に変換します。これを使用して、コンプライアンススキャンを実行し、見つかった問題の修正を取得できます。
5.13.1. CRD ワークフロー リンクのコピーリンクがクリップボードにコピーされました!
CRD は、コンプライアンススキャンを完了するための次のワークフローを提供します。
- コンプライアンススキャン要件を定義する
- コンプライアンススキャン設定を設定する
- コンプライアンススキャン設定を使用してコンプライアンス要件を処理する
- コンプライアンススキャンをモニターする
- コンプライアンススキャンの結果を確認する
5.13.2. コンプライアンススキャン要件の定義 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、コンプライアンス Operator CRD には ProfileBundle オブジェクトと Profile オブジェクトが含まれており、これらのオブジェクトでコンプライアンススキャン要件のルールを定義および設定できます。TailoredProfile オブジェクトを使用して、デフォルトのプロファイルをカスタマイズすることもできます。
5.13.2.1. ProfileBundle オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
Compliance Operator をインストールすると、すぐに実行できる ProfileBundle オブジェクトが含まれます。コンプライアンスオペレーターは、ProfileBundle オブジェクトを解析し、バンドル内のプロファイルごとに Profile オブジェクトを作成します。また、Profile オブジェクトによって使用される Rule オブジェクトと Variable オブジェクトも解析します。
ProfileBundle オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
kind: ProfileBundle
name: <profile bundle name>
namespace: openshift-compliance
spec:
contentFile: ssg-ocp4-ds.xml
contentImage: quay.io/complianceascode/ocp4:latest
status:
dataStreamStatus: VALID
contentFile が失敗すると、発生したエラーの詳細を提供する errorMessage 属性が表示されます。
トラブルシューティング
無効なイメージから既知のコンテンツイメージにロールバックすると、ProfileBundle オブジェクトは応答を停止し、PENDING 状態を表示します。回避策として、前のイメージとは異なるイメージに移動できます。または、ProfileBundle オブジェクトを削除して再作成し、作業状態に戻すこともできます。
5.13.2.2. プロファイルオブジェクト リンクのコピーリンクがクリップボードにコピーされました!
Profile オブジェクトは、特定のコンプライアンス標準について評価できるルールと変数を定義します。XCCDF 識別子や Node または Platform タイプのプロファイルチェックなど、OpenSCAP プロファイルに関する解析済みの詳細が含まれています。Profile オブジェクトを直接使用することも、TailorProfile オブジェクトを使用してさらにカスタマイズすることもできます。
Profile オブジェクトは単一の ProfileBundle オブジェクトから派生しているため、手動で作成または変更することはできません。通常、1 つの ProfileBundle オブジェクトに複数の Profile オブジェクトを含めることができます。
Profile オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
description: <description of the profile>
id: xccdf_org.ssgproject.content_profile_moderate
kind: Profile
metadata:
annotations:
compliance.openshift.io/product: <product name>
compliance.openshift.io/product-type: Node
creationTimestamp: "YYYY-MM-DDTMM:HH:SSZ"
generation: 1
labels:
compliance.openshift.io/profile-bundle: <profile bundle name>
name: rhcos4-moderate
namespace: openshift-compliance
ownerReferences:
- apiVersion: compliance.openshift.io/v1alpha1
blockOwnerDeletion: true
controller: true
kind: ProfileBundle
name: <profile bundle name>
uid: <uid string>
resourceVersion: "<version number>"
selfLink: /apis/compliance.openshift.io/v1alpha1/namespaces/openshift-compliance/profiles/rhcos4-moderate
uid: <uid string>
rules:
- rhcos4-account-disable-post-pw-expiration
- rhcos4-accounts-no-uid-except-zero
- rhcos4-audit-rules-dac-modification-chmod
- rhcos4-audit-rules-dac-modification-chown
title: <title of the profile>
5.13.2.3. ルールオブジェクト リンクのコピーリンクがクリップボードにコピーされました!
プロファイルを形成する Rule オブジェクトも、オブジェクトとして公開されます。Rule オブジェクトを使用して、コンプライアンスチェック要件を定義し、それを修正する方法を指定します。
Rule オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
checkType: Platform
description: <description of the rule>
id: xccdf_org.ssgproject.content_rule_configure_network_policies_namespaces
instructions: <manual instructions for the scan>
kind: Rule
metadata:
annotations:
compliance.openshift.io/rule: configure-network-policies-namespaces
control.compliance.openshift.io/CIS-OCP: 5.3.2
control.compliance.openshift.io/NERC-CIP: CIP-003-3 R4;CIP-003-3 R4.2;CIP-003-3
R5;CIP-003-3 R6;CIP-004-3 R2.2.4;CIP-004-3 R3;CIP-007-3 R2;CIP-007-3 R2.1;CIP-007-3
R2.2;CIP-007-3 R2.3;CIP-007-3 R5.1;CIP-007-3 R6.1
control.compliance.openshift.io/NIST-800-53: AC-4;AC-4(21);CA-3(5);CM-6;CM-6(1);CM-7;CM-7(1);SC-7;SC-7(3);SC-7(5);SC-7(8);SC-7(12);SC-7(13);SC-7(18)
labels:
compliance.openshift.io/profile-bundle: ocp4
name: ocp4-configure-network-policies-namespaces
namespace: openshift-compliance
rationale: <description of why this rule is checked>
severity: high
title: <summary of the rule>
Rule オブジェクトは、関連付けられた ProfileBundle オブジェクトを簡単に識別できるように適切なラベルを取得します。ProfileBundle は、このオブジェクトの OwnerReferences でも指定されます。
5.13.2.4. TailoredProfile オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
TailoredProfile オブジェクトを使用して、組織の要件に基づいてデフォルトの Profile オブジェクトを変更します。ルールを有効または無効にしたり、変数値を設定したり、カスタマイズの正当性を示したりすることができます。検証後、TailoredProfile オブジェクトは ConfigMap を作成します。これは、ComplianceScan オブジェクトから参照できます。
ScanSettingBinding オブジェクトで参照することにより、TailoredProfile オブジェクトを使用できます。ScanSettingBinding の詳細については、ScanSettingBinding オブジェクトを参照してください。
TailoredProfile オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
kind: TailoredProfile
metadata:
name: rhcos4-with-usb
spec:
extends: rhcos4-moderate
title: <title of the tailored profile>
disableRules:
- name: <name of a rule object to be disabled>
rationale: <description of why this rule is checked>
status:
id: xccdf_compliance.openshift.io_profile_rhcos4-with-usb
outputRef:
name: rhcos4-with-usb-tp
namespace: openshift-compliance
state: READY
- 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: <scan type>注記product-typeのアノテーションを設定していない場合、コンプライアンスオペレーターはデフォルトでPlatformスキャンタイプになります。TailoredProfileオブジェクトの名前に-node接尾辞を追加すると、nodeスキャンタイプになります。
5.13.3. コンプライアンススキャン設定の設定 リンクのコピーリンクがクリップボードにコピーされました!
コンプライアンススキャンの要件を定義した後、スキャンのタイプ、スキャンの発生、およびスキャンの場所を指定することにより、コンプライアンススキャンを設定できます。そのために、コンプライアンス Operator は ScanSetting オブジェクトを提供します。
5.13.3.1. ScanSetting オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
ScanSetting オブジェクトを使用して、スキャンを実行するための運用ポリシーを定義および再利用します。デフォルトでは、コンプライアンスオペレータは次の ScanSetting オブジェクトを作成します。
- default - 1Gi Persistent Volume (PV) を使用して、マスターノードとワーカーノードの両方で毎日午前 1 時にスキャンを実行し、最後の 3 つの結果を保持します。修復は自動的に適用も更新もされません。
-
default - 1Gi Persistent Volume (PV) を使用して、コントロールプレーンとワーカーノードの両方で毎日午前 1 時にスキャンを実行し、最後の 3 つの結果を保持します。
autoApplyRemediationsとautoUpdateRemediationsの両方が true に設定されています。
ScanSetting オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
kind: ScanSetting
metadata:
name: <name of the scan>
autoApplyRemediations: false
autoUpdateRemediations: false
schedule: "0 1 * * *"
rawResultStorage:
size: "2Gi"
rotation: 10
roles:
- worker
- master
- 1
- 自動修復を有効にするには、
trueに設定します。自動修復を無効にするには、falseに設定します。 - 2
- コンテンツ更新の自動修復を有効にするには、
trueに設定します。コンテンツ更新の自動修復を無効にするには、falseに設定します。 - 3
- スキャンを実行する頻度を cron 形式で指定します。
- 4
- 生の結果を保存するためにスキャン用に作成する必要があるストレージサイズを指定します。デフォルト値は
1Giです。 - 5
- 生の結果が保存されるスキャンの量を指定します。デフォルト値は
3です。古い結果がローテーションされると、管理者はローテーションが発生する前に結果を別の場所に保存する必要があります。注記ローテーションポリシーを無効にするには、値を
0に設定します。 - 6
node-role.kubernetes.ioラベル値を指定して、Nodeタイプのスキャンをスケジュールします。この値は、MachineConfigPoolの名前と一致する必要があります。
5.13.4. コンプライアンススキャン設定を使用したコンプライアンススキャン要件の処理 リンクのコピーリンクがクリップボードにコピーされました!
コンプライアンススキャン要件を定義し、スキャンを実行するように設定すると、コンプライアンスオペレーターは ScanSettingBinding オブジェクトを使用してそれを処理します。
5.13.4.1. ScanSettingBinding オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
ScanSettingBinding オブジェクトを使用して、Profile または TailoredProfile オブジェクトを参照してコンプライアンス要件を指定します。次に、スキャンの操作上の制約を提供する ScanSetting オブジェクトにリンクされます。次に、コンプライアンス Operator は、ScanSetting オブジェクトと ScanSettingBinding オブジェクトに基づいて ComplianceSuite オブジェクトを生成します。
ScanSettingBinding オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
kind: ScanSettingBinding
metadata:
name: <name of the scan>
profiles:
# Node checks
- name: rhcos4-with-usb
kind: TailoredProfile
apiGroup: compliance.openshift.io/v1alpha1
# Cluster checks
- name: ocp4-moderate
kind: Profile
apiGroup: compliance.openshift.io/v1alpha1
settingsRef:
name: my-companys-constraints
kind: ScanSetting
apiGroup: compliance.openshift.io/v1alpha1
ScanSetting オブジェクトと ScanSettingBinding オブジェクトを作成すると、コンプライアンススイートが作成されます。コンプライアンススイートのリストを取得するには、次のコマンドを実行します。
$ oc get compliancesuites
ScanSettingBinding を削除すると、コンプライアンススイートも削除されます。
5.13.5. コンプライアンススキャンの追跡 リンクのコピーリンクがクリップボードにコピーされました!
コンプライアンススイートの作成後、ComplianceSuite オブジェクトを使用して、デプロイされたスキャンのステータスをモニターできます。
5.13.5.1. ComplianceSuite オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
ComplianceSuite オブジェクトは、スキャンの状態を追跡するのに役立ちます。スキャンと全体的な結果を作成するための生の設定が含まれています。
Node タイプのスキャンの場合、問題の修正が含まれているため、スキャンを MachineConfigPool にマップする必要があります。ラベルを指定する場合は、それがプールに直接適用されることを確認してください。
ComplianceSuite オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
kind: ComplianceSuite
metadata:
name: <name of the scan>
spec:
autoApplyRemediations: false
schedule: "0 1 * * *"
scans:
- name: workers-scan
scanType: Node
profile: xccdf_org.ssgproject.content_profile_moderate
content: ssg-rhcos4-ds.xml
contentImage: quay.io/complianceascode/ocp4:latest
rule: "xccdf_org.ssgproject.content_rule_no_netrc_files"
nodeSelector:
node-role.kubernetes.io/worker: ""
status:
Phase: DONE
Result: NON-COMPLIANT
scanStatuses:
- name: workers-scan
phase: DONE
result: NON-COMPLIANT
バックグラウンドのスイートは、scans パラメーターに基づいて ComplianceScan オブジェクトを作成します。プログラムで ComplianceSuites イベントを取得できます。スイートのイベントを取得するには、次のコマンドを実行します。
$ oc get events --field-selector involvedObject.kind=ComplianceSuite,involvedObject.name=<name of the suite>
手動で ComplianceSuite を定義すると、XCCDF 属性が含まれているため、エラーが発生する可能性があります。
5.13.5.2. 高度な ComplianceScan オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
コンプライアンスオペレーターには、デバッグまたは既存のツールとの統合のための上級ユーザー向けのオプションが含まれています。ComplianceScan オブジェクトを直接作成しないことをお勧めしますが、代わりに、ComplianceSuite オブジェクトを使用してオブジェクトを管理できます。
AdvancedComplianceScan オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
kind: ComplianceScan
metadata:
name: <name of the scan>
spec:
scanType: Node
profile: xccdf_org.ssgproject.content_profile_moderate
content: ssg-ocp4-ds.xml
contentImage: quay.io/complianceascode/ocp4:latest
rule: "xccdf_org.ssgproject.content_rule_no_netrc_files"
nodeSelector:
node-role.kubernetes.io/worker: ""
status:
phase: DONE
result: NON-COMPLIANT
- 1
NodeまたはPlatformのいずれかを指定します。ノードプロファイルはクラスターノードをスキャンし、プラットフォームプロファイルは Kubernetes プラットフォームをスキャンします。- 2
- 実行するプロファイルの XCCDF 識別子を指定します。
- 3
- プロファイルファイルをカプセル化するコンテナーイメージを指定します。
- 4
- これはオプションです。単一のルールを実行するスキャンを指定します。このルールは XCCDF ID で識別され、指定されたプロファイルに属している必要があります。注記
ruleパラメーターをスキップすると、指定されたプロファイルで使用可能なすべてのルールに対してスキャンが実行されます。 - 5
- OpenShift Container Platform を使用していて、修復を生成したい場合は、nodeSelector ラベルが
MachineConfigPoolラベルと一致する必要があります。注記nodeSelectorパラメーターを指定しないか、MachineConfigラベルと一致しない場合でも、スキャンは実行されますが、修復は作成されません。 - 6
- スキャンの現在のフェーズを示します。
- 7
- スキャンの判定を示します。
ComplianceSuite オブジェクトを削除すると、関連するすべてのスキャンが削除されます。
スキャンが完了すると、ComplianceCheckResult オブジェクトのカスタムリソースとして結果が生成されます。ただし、生の結果は ARF 形式で入手できます。これらの結果は、スキャンの名前に関連付けられた永続ボリュームクレーム (PVC) を持つ永続ボリューム (PV) に保存されます。プログラムで ComplianceScans イベントを取得できます。スイートのイベントを生成するには、次のコマンドを実行します。
oc get events --field-selector involvedObject.kind=ComplianceScan,involvedObject.name=<name of the suite>
5.13.6. コンプライアンス結果の表示 リンクのコピーリンクがクリップボードにコピーされました!
コンプライアンススイートが DONE フェーズに達すると、スキャン結果と可能な修正を表示できます。
5.13.6.1. ComplianceCheckResult オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
特定のプロファイルでスキャンを実行すると、プロファイル内のいくつかのルールが検証されます。これらのルールごとに、ComplianceCheckResult オブジェクトが作成され、特定のルールのクラスターの状態が提供されます。
ComplianceCheckResult オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
kind: ComplianceCheckResult
metadata:
labels:
compliance.openshift.io/check-severity: medium
compliance.openshift.io/check-status: FAIL
compliance.openshift.io/suite: example-compliancesuite
compliance.openshift.io/scan-name: workers-scan
name: workers-scan-no-direct-root-logins
namespace: openshift-compliance
ownerReferences:
- apiVersion: compliance.openshift.io/v1alpha1
blockOwnerDeletion: true
controller: true
kind: ComplianceScan
name: workers-scan
description: <description of scan check>
instructions: <manual instructions for the scan>
id: xccdf_org.ssgproject.content_rule_no_direct_root_logins
severity: medium
status: FAIL
スイートからすべてのチェック結果を取得するには、次のコマンドを実行します。
oc get compliancecheckresults -l compliance.openshift.io/suite=<suit name>
5.13.6.2. ComplianceRemediation オブジェクト リンクのコピーリンクがクリップボードにコピーされました!
特定のチェックについては、データストリームで指定された修正を行うことができます。ただし、Kubernetes 修正が利用可能な場合、コンプライアンスオペレーターは ComplianceRemediation オブジェクトを作成します。
ComplianceRemediation オブジェクトの例
apiVersion: compliance.openshift.io/v1alpha1
kind: ComplianceRemediation
metadata:
labels:
compliance.openshift.io/suite: example-compliancesuite
compliance.openshift.io/scan-name: workers-scan
machineconfiguration.openshift.io/role: worker
name: workers-scan-disable-users-coredumps
namespace: openshift-compliance
ownerReferences:
- apiVersion: compliance.openshift.io/v1alpha1
blockOwnerDeletion: true
controller: true
kind: ComplianceCheckResult
name: workers-scan-disable-users-coredumps
uid: <UID>
spec:
apply: false
object:
current:
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
spec:
config:
ignition:
version: 2.2.0
storage:
files:
- contents:
source: data:,%2A%20%20%20%20%20hard%20%20%20core%20%20%20%200
filesystem: root
mode: 420
path: /etc/security/limits.d/75-disable_users_coredumps.conf
outdated: {}
スイートからすべての修復を取得するには、次のコマンドを実行します。
oc get complianceremediations -l compliance.openshift.io/suite=<suite name>
自動的に修正できるすべての失敗したチェックを一覧表示するには、次のコマンドを実行します。
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'