$ 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/
尽管合规性运算符自动化了集群的许多检查和修复操作,但使集群完全符合合规性的完整过程通常需要管理员与合规性运算符 API 和其他组件进行交互。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
了。
合规性扫描完成后,各个检查的结果将列在生成的ComplianceCheckResult
自定义资源 (CR) 中。但是,管理员或审计员可能需要扫描的完整详细信息。OpenSCAP 工具会创建一个包含详细结果的高级录制格式 (ARF) 文件。此 ARF 文件太大,无法存储在配置映射或其他标准 Kubernetes 资源中,因此会创建一个持久卷 (PV) 来存储它。
使用 Compliance Operator 从 PV 获取结果是一个四步过程。但是,使用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
虽然可以将扫描作为计划作业运行,但您通常需要根据需要重新运行扫描,尤其是在应用补救措施或对集群进行其他更改后。
使用 Compliance Operator 重新运行扫描需要在扫描对象上使用注释。但是,使用oc-compliance
插件,您可以使用单个命令重新运行扫描。输入以下命令以重新运行名为my-binding
的ScanSettingBinding
对象的扫描。
$ oc compliance rerun-now scansettingbindings my-binding
Rerunning scans from 'my-binding': ocp4-cis
Re-running scan 'openshift-compliance/ocp4-cis'
使用 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
。可以提供多个对象。
对象名称是 Kubernetes 资源的名称,例如.metadata.name
。
添加--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 进行扫描的最快方法。
合规性标准通常按以下层次结构组织:
基准是特定标准的一组控制的顶级定义。例如,FedRAMP 中等或互联网安全中心 (CIS) v.1.6.0。
控制描述了为了符合基准而必须满足的一系列要求。例如,FedRAMP AC-01(访问控制策略和程序)。
规则是针对要使其符合合规性的系统的单个检查,并且这些规则中的一个或多个映射到一个控制。
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 |
+ +----------+
...
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 应用规则,因为它会解决依赖关系并确保集群保持良好状态。 |