×

尽管合规性运算符自动化了集群的许多检查和修复操作,但使集群完全符合合规性的完整过程通常需要管理员与合规性运算符 API 和其他组件进行交互。oc-compliance 插件使此过程更加轻松。

安装 oc-compliance 插件

步骤
  1. 解压 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> 可以是scansettingbindingcompliancescancompliancesuite,具体取决于使用哪个对象启动扫描。

  • <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-bindingScanSettingBinding 对象的扫描。

    $ oc compliance rerun-now scansettingbindings my-binding
    示例输出
    Rerunning scans from 'my-binding': ocp4-cis
    Re-running scan 'openshift-compliance/ocp4-cis'

使用 ScanSettingBinding 自定义资源

使用 Compliance Operator 提供的ScanSettingScanSettingBinding 自定义资源 (CR) 时,可以使用一组通用的扫描选项(例如schedulemachine rolestolerations 等)来运行多个配置文件的扫描。虽然这比使用多个ComplianceSuiteComplianceScan 对象更容易,但可能会让新用户感到困惑。

oc compliance bind 子命令可帮助您创建ScanSettingBinding CR。

步骤
  1. 运行

    $ oc compliance bind [--dry-run] -N <binding name> [-S <scansetting name>] <objtype/objname> [..<objtype/objname>]
    • 如果省略-S 标志,则使用 Compliance Operator 提供的default 扫描设置。

    • 对象类型是 Kubernetes 对象类型,可以是profiletailoredprofile。可以提供多个对象。

    • 对象名称是 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
  2. 要将default 设置应用于ocp4-cisocp4-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 compliancecontrols 子命令提供给定配置文件满足的标准和控制的报告。

    $ 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 对象提取到目录中以进行检查。

步骤
  1. 查看配置文件的补救措施

    $ 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”警告,因为规则无法自动补救,或者没有提供补救措施。
  2. 您可以查看 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
  3. 查看扫描后创建的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
  4. 您可以查看 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 应用规则,因为它会解决依赖关系并确保集群保持良好状态。

查看 ComplianceCheckResult 对象详细信息

扫描完成后,将为各个扫描规则创建ComplianceCheckResult 对象。view-result 子命令提供ComplianceCheckResult 对象详细信息的人类可读输出。

步骤
  • 运行

    $ oc compliance view-result ocp4-cis-scheduler-no-bind-address