5.10. 执行高级 Compliance Operator 任务
Compliance Operator 包含适用于高级用户的选项,用于调试或与现有工具集成。
5.10.1. 直接使用 ComplianceSuite 和 ComplianceScan 对象
虽然建议用户利用 ScanSetting
和 ScanSettingBinding
对象来定义套件和扫描,但也有直接定义 ComplianceSuite
对象的有效用例:
-
仅指定单个规则进行扫描。这可与
debug: true
属性一起用于调试,提高 OpenSCAP 扫描程序的详细程度,否则调试模式会变得非常冗长。将测试限制为一条规则有助于减少调试信息的数量。 - 提供自定义 nodeSelector。要使补救适用,nodeSelector 必须与一个池匹配。
- 使用定制文件将 Scan 指向定制配置映射。
- 不需要从捆绑包解析配置集的消耗成本时用于测试或开发。
以下示例显示仅使用一条规则扫描 worker 机器的 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: quay.io/complianceascode/ocp4:latest 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.10.2. 使用原始定制配置集
尽管 TailoredProfile
CR 支持最常见的定制操作,但 XCCDF 标准在定制 OpenSCAP 配置集方面具有更大的灵活性。此外,如果您的机构之前一直使用 OpenScap,则您可能有一个现有的 XCCDF 定制文件可重复使用。
ComplianceSuite
对象包含可指向自定义定制文件的可选 TailoringConfigMap
属性。TailoringConfigMap
属性的值是一个配置映射的名称,它必须包含名为 tailoring.xml
的键,这个键的值是定制内容。
流程
从一个文件创建
ConfigMap
对象:$ oc create configmap <scan_name> --from-file=tailoring.xml=/path/to/the/tailoringFile.xml
在属于 Suite 的 Scan 中引用定制文件:
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: quay.io/complianceascode/ocp4:latest debug: true tailoringConfigMap: name: <scan_name> nodeSelector: node-role.kubernetes.io/worker: ""
5.10.3. 执行重新扫描
通常,您希望按指定时间表重新运行扫描,如每周一或每天。在修复节点上的问题后,重新运行一次扫描也很有用。要执行单次扫描,可使用 compliance.openshift.io/rescan=
选项注解扫描:
$ oc annotate compliancescans/<scan_name> compliance.openshift.io/rescan=
一个重新扫描会为 rhcos-moderate
配置集生成四个额外的 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.10.4. 为结果设置自定义存储大小
虽然 ComplianceCheckResult
等自定义资源表示一次检查跨所有扫描节点的聚合结果,但审阅扫描程序生成的原始结果会很有用。原始结果以 ARF 格式生成,可能较大(每个节点几十兆字节),将其存储在由 etcd
键-值存储支持的 Kubernetes 资源中是不切实际的。相反,每次扫描都会创建一个默认为 1GB 大小的 PV。根据您的环境,您可能想要相应地增大 PV 大小。这可以使用在 ScanSetting
和 ComplianceScan
资源中公开的 rawResultStorage.size
属性完成。
相关的参数是 rawResultStorage.rotation
,它控制在旧的扫描被轮转前 PV 中保留的扫描次数。默认值为 3,将轮转策略设置为 0 可禁用轮转。根据默认轮转策略和每个原始 ARF 扫描报告 100MB 的估计大小,您可以计算出环境的正确 PV 大小。
5.10.4.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.10.5. 应用套件扫描生成的补救
虽然您可以使用 ComplianceSuite
对象中的 autoApplyRemediations
布尔值参数但您可以使用 compliance.openshift.io/apply-remediations
为对象添加注解。这允许 Operator 应用所有创建的补救。
流程
-
运行以下命令应用
compliance.openshift.io/apply-remediations
注解:
$ oc annotate compliancesuites/<suite-_name> compliance.openshift.io/apply-remediations=
5.10.6. 自动更新补救
在某些情况下带有较新内容的扫描可能会将补救标记为 OUTDATED
。作为管理员您可以应用 compliance.openshift.io/remove-outdated
注解来应用新的补救并删除过时的补救。
流程
-
应用
compliance.openshift.io/remove-outdated
注解:
$ oc annotate compliancesuites/<suite_name> compliance.openshift.io/remove-outdated=
或者在 ScanSetting
或 ComplianceSuite
对象中设置 autoUpdateRemediations 标志
以自动更新补救。