5.5. Compliance Operator 검사 관리
5.5.1. 지원되는 규정 준수 프로필
Compliance Operator(CO) 설치의 일부로 사용할 수 있는 여러 프로필이 있습니다. 다음 프로필을 사용하여 클러스터의 격차를 평가할 수는 있지만 사용만으로는 특정 프로필의 준수를 추론하거나 보장하지 않습니다.
Compliance Operator는 OpenShift Dedicated, Red Hat OpenShift on AWS, Azure Red Hat OpenShift와 같은 관리 플랫폼에서 잘못된 결과를 보고할 수 있습니다. 자세한 내용은 Red Hat Knowledgebase 솔루션 #6983418 에서 참조하십시오.
5.5.1.1. 컴플라이언스 프로필
Compliance Operator는 다음 규정 준수 프로필을 제공합니다.
Profile | 프로필 제목 | 애플리케이션 | Compliance Operator 버전 | 업계 규정 준수 벤치마크 | 지원되는 아키텍처 |
---|---|---|---|---|---|
rhcos4-stig | Red Hat Openshift용 DISA STIG(Security Technical Implementation Guide) | 노드 | 1.3.0+ | DISA-STIG [1] |
|
ocp4-stig-node | Red Hat Openshift용 DISA STIG(Security Technical Implementation Guide) | 노드 | 1.3.0+ | DISA-STIG [1] |
|
ocp4-stig | Red Hat Openshift용 DISA STIG(Security Technical Implementation Guide) | 플랫폼 | 1.3.0+ | DISA-STIG [1] |
|
ocp4-cis | CIS Red Hat OpenShift Container Platform 4 Benchmark v1.4.0 | 플랫폼 | 1.2.0+ | CIS Benchmarks ™ [1] |
|
ocp4-cis-node | CIS Red Hat OpenShift Container Platform 4 Benchmark v1.4.0 | 노드 [2] | 1.2.0+ | CIS Benchmarks ™ [1] |
|
ocp4-e8 | ACS(Austricial Security Center) Essential Eight | 플랫폼 | 0.1.39+ |
| |
ocp4-moderate | NIST 800-53 Moderate-Impact Baseline for Red Hat OpenShift - 플랫폼 수준 | 플랫폼 | 0.1.39+ |
| |
rhcos4-e8 | ACS(Austricial Security Center) Essential Eight | 노드 | 0.1.39+ |
| |
rhcos4-moderate | NIST 800-53 Moderate-Impact Baseline for Red Hat Enterprise Linux CoreOS | 노드 | 0.1.39+ |
| |
ocp4-moderate-node | NIST 800-53 Moderate-Impact Baseline for Red Hat OpenShift - Node level | 노드 [2] | 0.1.44+ |
| |
ocp4-nerc-cip | Red Hat OpenShift Container Platform - 플랫폼 수준에 대한 North America Electric Reliability Corporation (NERC)CIP(Critical Infrastructure Protection) 사이버 보안 표준 프로필 | 플랫폼 | 0.1.44+ |
| |
ocp4-nerc-cip-node | Red Hat OpenShift Container Platform - Node 레벨 - North Americactronic Reliability Corporation (NERC) Critical Infrastructure Protection (CIP) attacks standard profile for the Red Hat OpenShift Container Platform - Node level | 노드 [2] | 0.1.44+ |
| |
rhcos4-nerc-cip | Red Hat Enterprise Linux CoreOS용 North Americactronic Reliability Corporation (NERC)CIP(Critical Infrastructure Protection) 사이버 보안 표준 프로필 | 노드 | 0.1.44+ |
| |
ocp4-pci-dss | PCI-DSS v3.2.1 Control Baseline for Red Hat OpenShift Container Platform 4 | 플랫폼 | 0.1.47+ |
| |
ocp4-pci-dss-node | PCI-DSS v3.2.1 Control Baseline for Red Hat OpenShift Container Platform 4 | 노드 [2] | 0.1.47+ |
| |
ocp4-high | NIST 800-53 High-Impact Baseline for Red Hat OpenShift - 플랫폼 수준 | 플랫폼 | 0.1.52+ |
| |
ocp4-high-node | NIST 800-53 High-Impact Baseline for Red Hat OpenShift - 노드 수준 | 노드 [2] | 0.1.52+ |
| |
rhcos4-high | NIST 800-53 High-Impact Baseline for Red Hat Enterprise Linux CoreOS | 노드 | 0.1.52+ |
|
- CIS OpenShift Container Platform v4 벤치마크를 찾으려면 CIS 벤치마크로 이동하여 최신 CIS 벤치마크 다운로드를 클릭합니다. 여기에서 등록하여 벤치마크를 다운로드할 수 있습니다.
- 노드 프로필은 관련 플랫폼 프로필과 함께 사용해야 합니다. 자세한 내용은 Compliance Operator 프로필 유형을 참조하십시오.
5.5.1.1.1. 확장된 규정 준수 프로필 정보
일부 규정 준수 프로필에는 다음과 같은 업계 모범 사례를 필요로 하는 제어가 있어 일부 프로필이 다른 프로필을 확장할 수 있습니다. CIS(Center for Internet Security) 모범 사례를 NIST(National Institute of Standards and Technology) 보안 프레임워크와 결합하면 안전하고 호환되는 환경을 위한 경로가 설정됩니다.
예를 들어 NIST High-Impact 및 Moderate-Impact 프로필은 CIS 프로필을 확장하여 규정 준수를 달성합니다. 결과적으로 확장된 규정 준수 프로필을 사용하면 단일 클러스터에서 두 프로필을 모두 실행할 필요가 없습니다.
Profile | 확장 |
---|---|
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.5.1.2. 추가 리소스
5.5.2. Compliance Operator 검사
Compliance Operator를 사용하여 규정 준수 검사를 실행하도록 ScanSetting
및 ScanSettingBinding
API를 사용하는 것이 좋습니다. 이러한 API 오브젝트에 대한 자세한 내용을 보려면 다음을 실행합니다.
$ oc explain scansettings
또는
$ oc explain scansettingbindings
5.5.2.1. 규정 준수 검사 실행
CIS(Center for Internet Security) 프로필을 사용하여 검사를 실행할 수 있습니다. 편의를 위해 Compliance Operator는 시작 시 적절한 기본값을 사용하여 ScanSetting
오브젝트를 생성합니다. 이 ScanSetting
오브젝트의 이름은 default
입니다.
올인원 컨트롤 플레인 및 작업자 노드의 경우 규정 준수 스캔은 작업자 및 컨트롤 플레인 노드에서 두 번 실행됩니다. 규정 준수 검사에서 일관되지 않은 검사 결과를 생성할 수 있습니다. 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 Metadata: Creation Timestamp: 2022-10-10T14:07:29Z Generation: 1 Managed Fields: API Version: compliance.openshift.io/v1alpha1 Fields Type: FieldsV1 fieldsV1: 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-10T14:07:29Z Resource Version: 56111 UID: c21d1d14-3472-47d7-a450-b924287aec90 Raw Result Storage: Node Selector: node-role.kubernetes.io/master: Pv Access Modes: ReadWriteOnce 1 Rotation: 3 2 Size: 1Gi 3 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 4 worker 5 Scan Tolerations: 6 Operator: Exists Schedule: 0 1 * * * 7 Show Not Applicable: false Strict Node Scan: true Events: <none>
- 1
- Compliance Operator는 검사 결과가 포함된 PV(영구 볼륨)를 생성합니다. 기본적으로 PV는 Compliance Operator에서 클러스터에 구성된 스토리지 클래스에 대한 가정을 할 수 없기 때문에 액세스 모드
ReadWriteOnce
를 사용합니다. 대부분의 클러스터에서ReadWriteOnce
액세스 모드를 사용할 수 있습니다. 검사 결과를 가져오려면 볼륨을 바인딩하는 도우미 Pod를 사용하여 이를 수행할 수 있습니다.ReadWriteOnce
액세스 모드를 사용하는 볼륨은 한 번에 하나의 Pod에서만 마운트할 수 있으므로 도우미 Pod를 삭제해야 합니다. 그러지 않으면 Compliance Operator가 후속 검사에 볼륨을 재사용할 수 없습니다. - 2
- Compliance Operator는 세 번의 후속 검사 결과를 볼륨에 보관합니다. 이전 검사는 순환됩니다.
- 3
- Compliance Operator는 검사 결과에 대해 1GB의 스토리지를 할당합니다.
- 4 5
- 검사 설정에서 클러스터 노드를 검사하는 프로필을 사용하는 경우 이러한 노드 역할을 검사합니다.
- 6
- 기본 검사 설정 오브젝트는 모든 노드를 검사합니다.
- 7
- 기본 검사 설정 오브젝트는 매일 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
오브젝트에 바인딩하는ScanSettingBinding
오브젝트를 생성하고cis
및cis-node
프로파일을 사용하여 클러스터를 검사합니다. 예를 들어 다음과 같습니다.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.5.2.2. 작업자 노드에서 결과 서버 Pod 예약
결과 서버 Pod는 ARM(raw Asset Reporting Format) 검사 결과를 저장하는 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.5.2.3. ScanSetting
사용자 정의 리소스
이제 ScanSetting
사용자 정의 리소스를 사용하면 검사 제한 특성을 통해 스캐너 Pod의 기본 CPU 및 메모리 제한을 덮어쓸 수 있습니다. Compliance Operator는 기본값 500Mi 메모리, 스캐너 컨테이너에 100m CPU, api-resource-collector
컨테이너에 100m CPU가 있는 200Mi 메모리를 사용합니다. Operator의 메모리 제한을 설정하려면 OLM 또는 Operator 배포 자체를 통해 설치한 경우 Subscription
오브젝트를 수정합니다.
Compliance Operator의 기본 CPU 및 메모리 제한을 늘리려면 Compliance Operator 리소스 제한 증가를 참조하십시오.
기본 제한이 충분하지 않고 OOM(메모리 부족) 프로세스에서 Operator 또는 스캐너 Pod를 종료하는 경우 Compliance Operator 또는 scanner Pod에 대한 메모리 제한을 늘려야 합니다.
5.5.2.4. 호스팅된 컨트롤 플레인 관리 클러스터 구성
자체 호스팅 컨트롤 플레인 또는 Hypershift 환경을 호스팅하고 관리 클러스터에서 호스팅된 클러스터를 검사하려면 대상 호스팅 클러스터의 이름 및 접두사 네임스페이스를 설정해야 합니다. TailoredProfile
을 생성하여 이를 수행할 수 있습니다.
이 절차는 자체 호스팅 컨트롤 플레인 환경을 관리하는 사용자에게만 적용됩니다.
호스팅된 컨트롤 플레인 관리 클러스터에서 ocp4-cis
및 ocp4-pci-dss
프로필만 지원됩니다.
사전 요구 사항
- Compliance Operator는 관리 클러스터에 설치됩니다.
프로세스
다음 명령을 실행하여 검사할 호스팅 클러스터의
이름과
네임스페이스
를 가져옵니다.$ 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
을 생성하고 스캔할 Hosted Cluster의 이름과 네임스페이스를 정의합니다.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.5.2.5. 리소스 요청 및 제한 적용
kubelet이 컨테이너를 Pod의 일부로 시작하면 kubelet은 해당 컨테이너의 요청과 메모리 및 CPU에 대한 제한을 컨테이너 런타임으로 전달합니다. Linux에서 컨테이너 런타임은 사용자가 정의한 제한을 적용하고 적용하는 커널 cgroup을 구성합니다.
CPU 제한은 컨테이너에서 사용할 수 있는 CPU 시간을 정의합니다. 각 스케줄링 간격 동안 Linux 커널은 이 제한이 초과되었는지 확인합니다. 이 경우 커널은 cgroup 실행을 재개할 때까지 기다립니다.
contended 시스템에서 여러 개의 다른 컨테이너(cgroups)를 실행하려는 경우 CPU 요청이 큰 워크로드에 작은 요청이 있는 워크로드보다 더 많은 CPU 시간이 할당됩니다. 메모리 요청은 Pod 예약 중에 사용됩니다. cgroup v2를 사용하는 노드에서 컨테이너 런타임은 메모리 요청을 힌트로 사용하여 memory.min
및 memory.low
값을 설정할 수 있습니다.
컨테이너가 이 제한보다 많은 메모리를 할당하려고 하면 Linux 커널 메모리 부족 하위 시스템은 메모리를 할당하려는 컨테이너의 프로세스 중 하나를 중지하여 활성화 및 개입합니다. Pod 또는 컨테이너의 메모리 제한은 emptyDir과 같은 메모리 지원 볼륨의 페이지에도 적용할 수 있습니다.
kubelet은 로컬 임시 스토리지가 아닌 컨테이너 메모리가 사용되므로 tmpfs
emptyDir
볼륨을 추적합니다. 컨테이너가 메모리 요청을 초과하고 실행 중인 노드가 총 메모리가 부족하면 Pod의 컨테이너가 제거될 수 있습니다.
컨테이너는 연장된 기간에 CPU 제한을 초과할 수 없습니다. 컨테이너 실행 시간은 과도한 CPU 사용을 위한 Pod 또는 컨테이너를 중지하지 않습니다. 리소스 제한으로 인해 컨테이너를 예약할 수 없거나 종료될 수 없는지 확인하려면 Compliance Operator 문제 해결을 참조하십시오.
5.5.2.6. 컨테이너 리소스 요청을 사용하여 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: containers: - name: app image: images.my-company.example/app:v4 resources: requests: 1 memory: "64Mi" cpu: "250m" limits: 2 memory: "128Mi" cpu: "500m" - name: log-aggregator image: images.my-company.example/log-aggregator:v6 resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
5.5.3. Compliance Operator 조정
Compliance Operator는 즉시 사용할 수 있는 프로필과 함께 제공되지만 조직의 필요 및 요구 사항에 맞게 수정해야 합니다. 프로필을 수정하는 프로세스를 조정이라고 합니다.
Compliance Operator는 프로필을 조정할 수 있도록 TailoredProfile
오브젝트를 제공합니다.
5.5.3.1. 새로운 맞춤형 프로파일 생성
TailoredProfile
오브젝트를 사용하여 처음부터 맞춤형 프로필을 작성할 수 있습니다. 적절한 제목
과 설명을
설정하고 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.5.3.2. 맞춤형 프로필을 사용하여 기존 ProfileBundle 확장
TailoredProfile
CR에서는 가장 일반적인 맞춤 작업을 수행할 수 있지만 XCCDF 표준을 사용하면 OpenSCAP 프로필 맞춤 시 유연성이 훨씬 더 향상됩니다. 또한 조직에서 이전에 OpenScap을 사용한 적이 있는 경우 기존 XCCDF 맞춤 파일이 있을 수 있으며 이 파일을 다시 사용할 수 있습니다.
ComplianceSuite
오브젝트에는 사용자 정의 맞춤 파일을 가리킬 수 있는 선택적 TailoringConfigMap
특성이 포함되어 있습니다. TailoringConfigMap
특성 값은 구성 맵의 이름으로, 이 맵에는 tailoring.xml
이라는 키가 포함되어야 하며 이 키의 값은 맞춤 콘텐츠입니다.
절차
RHCOS(Red Hat Enterprise Linux CoreOS)
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
맞춤 프로필에 추가할 규칙을 선택합니다. 이 예제에서는 두 개의 규칙을 비활성화하고 하나의 값을 변경하여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.3. spec 변수의 속성 속성 설명 extends
이
TailoredProfile
이 빌드되는Profile
오브젝트의 이름입니다.title
TailoredProfile
의 사람이 읽을 수 있는 제목입니다.disableRules
이름 및 이유 쌍 목록입니다. 각 이름은 비활성화할 규칙 오브젝트의 이름을 나타냅니다. 이유 값은 규칙이 비활성화된 이유를 설명하는 사람이 읽을 수 있는 텍스트입니다.
manualRules
이름 및 이유 쌍 목록입니다. 수동 규칙이 추가되면 검사 결과 상태는 항상
수동
이며 수정이 생성되지 않습니다. 이 속성은 자동이며, 수동 규칙으로 설정할 때 기본적으로 값이 없습니다.enableRules
이름 및 이유 쌍 목록입니다. 각 이름은 활성화할 규칙 오브젝트의 이름을 나타냅니다. 이유 값은 규칙이 활성화된 이유를 설명하는 사람이 읽을 수 있는 텍스트입니다.
description
TailoredProfile
을 설명하는 사람이 읽을 수 있는 텍스트입니다.setValues
이름, 이유 및 값 그룹화 목록입니다. 각 이름은 설정된 값의 이름을 나타냅니다. 이유는 집합을 설명하는 사람이 읽을 수 있는 텍스트입니다. 값은 실제 설정입니다.
tailoredProfile.spec.ECDHERules
특성을 추가합니다.Example
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
네임스페이스에 생성됩니다.
출력 예
tailoredprofile.compliance.openshift.io/nist-moderate-modified created
새
nist-moderate-modified
맞춤 프로필을 기본ScanSetting
오브젝트에 바인딩하도록ScanSettingBinding
오브젝트를 정의합니다.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.5.4. Compliance Operator 원시 결과 검색
OpenShift Container Platform 클러스터의 규정 준수를 입증할 때 감사 목적으로 검사 결과를 제공해야 할 수 있습니다.
5.5.4.1. 영구 볼륨에서 Compliance Operator 원시 결과 가져오기
프로세스
Compliance Operator는 원시 결과를 생성하여 영구 볼륨에 저장합니다. 이러한 결과는 자산 보고 형식(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" }
원시 결과에 액세스할 수 있는 영구 볼륨 클레임이 표시됩니다.
결과 중 하나의 이름과 네임스페이스를 사용하여 원시 데이터 위치를 확인합니다.
$ 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: containers: - name: pv-extract-pod image: registry.access.redhat.com/ubi8/ubi command: ["sleep", "3000"] volumeMounts: - mountPath: "/workers-scan-results" name: workers-scan-vol volumes: - name: workers-scan-vol persistentVolumeClaim: claimName: rhcos4-moderate-worker
Pod가 실행되면 결과를 다운로드합니다.
$ oc cp pv-extract:/workers-scan-results -n openshift-compliance .
중요영구 볼륨을 마운트하는 Pod를 생성하면 클레임이
Bound
로 유지됩니다. 사용 중인 볼륨의 스토리지 클래스에ReadWriteOnce
로 설정된 권한이 있는 경우 한 번에 하나의 Pod에서만 볼륨을 마운트할 수 있습니다. 완료 시 Pod를 삭제해야 합니다. 그러지 않으면 Operator에서 Pod를 예약하고 이 위치에 결과를 계속 저장할 수 없습니다.추출이 완료되면 Pod를 삭제할 수 있습니다.
$ oc delete pod pv-extract -n openshift-compliance
5.5.5. Compliance Operator 결과 및 수정 관리
각 ComplianceCheckResult
는 하나의 규정 준수 규칙 검사 결과를 나타냅니다. 규칙을 자동으로 수정할 수 있는 경우 ComplianceCheckResult
가 소유한 동일한 이름의 ComplianceRemediation
오브젝트가 생성됩니다. 요청하지 않는 경우 수정은 자동으로 적용되지 않으므로 OpenShift Container Platform 관리자는 수정을 통해 수행되는 작업을 검토하고 확인한 후에만 수정을 적용할 수 있습니다.
5.5.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 | 규정 준수 검사가 실행되었지만 제대로 완료할 수 없습니다. |
적용되지 않음 | 규정 준수 점검은 적용되지 않거나 선택되지 않았기 때문에 실행되지 않았습니다. |
5.5.5.2. 수정 검토
수정이 포함된 ComplianceRemediation
오브젝트 및 ComplianceCheckResult
오브젝트를 모두 검토합니다. ComplianceCheckResult
오브젝트에는 검사에서 수행하는 작업과 방지를 위한 강화 작업에 관해 사람이 있을 수 있는 설명과 심각도 및 관련 보안 제어와 같은 기타 메타데이터
가 포함되어 있습니다. 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
오브젝트입니다. 플랫폼 검사의 경우 수정 페이로드는 종종 다른 종류의 오브젝트(예: ConfigMap
또는 Secret
오브젝트)에 해당하지만 일반적으로 이러한 수정을 적용하는 것은 관리자의 몫입니다. 그러지 않으면 일반 Kubernetes 오브젝트를 조작하기 위해 Compliance Operator에 매우 광범위한 권한이 있어야 하기 때문입니다. 플랫폼 검사를 수정하는 예는 본문 뒷부분에 있습니다.
수정 적용 시 수행되는 작업을 정확히 확인하기 위해 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.5.5.3. 사용자 정의 머신 구성 풀을 사용할 때 수정 적용
사용자 지정
을 생성할 때 MachineConfigPool
KubeletConfig
에 있는 machineConfigPoolSelector
가 MachineConfigPool과 일치할 수 있도록 레이블을 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.24.0 ip-10-0-158-32.us-east-2.compute.internal Ready worker 5h17m v1.24.0 ip-10-0-166-81.us-east-2.compute.internal Ready worker 5h17m v1.24.0 ip-10-0-171-170.us-east-2.compute.internal Ready master 5h21m v1.24.0 ip-10-0-197-35.us-east-2.compute.internal Ready master 5h22m v1.24.0
노드에 레이블을 추가합니다.
$ 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(Machine config pool)에 추가할 레이블 이름을 정의합니다.
MCP가 성공적으로 생성되었는지 확인합니다.
$ oc get mcp -w
5.5.5.4. 기본 구성 값에 대한 KubeletConfig 규칙 평가
OpenShift Container Platform 인프라에는 런타임에 불완전한 구성 파일이 포함될 수 있으며 노드는 누락된 구성 옵션의 기본 구성 값을 가정합니다. 일부 설정 옵션은 명령줄 인수로 전달할 수 있습니다. 결과적으로 Compliance Operator는 규칙 검사에 사용된 옵션이 누락될 수 있으므로 노드의 구성 파일이 완료되었는지 확인할 수 없습니다.
기본 구성 값이 검사를 통과하는 잘못된 음수 결과를 방지하기 위해 Compliance Operator는 Node/Proxy API를 사용하여 노드 풀의 노드 간에 일관된 모든 구성 옵션이 해당 노드 풀 내의 모든 노드에 대한 구성을 나타내는 파일에 저장됩니다. 이렇게 하면 검사 결과의 정확성이 높아집니다.
기본 마스터
및 작업자
노드 풀 구성에서 이 기능을 사용하려면 추가 구성을 변경할 필요가 없습니다.
5.5.5.5. 사용자 정의 노드 풀 스캔
Compliance Operator는 각 노드 풀 구성의 사본을 유지하지 않습니다. Compliance Operator는 단일 노드 풀 내의 모든 노드에 대한 일관된 구성 옵션을 구성 파일의 사본으로 집계합니다. 그런 다음 Compliance Operator는 특정 노드 풀에 구성 파일을 사용하여 해당 풀 내의 노드에 대한 규칙을 평가합니다.
절차
ScanSettingBinding
CR에 저장할ScanSetting
오브젝트에예제
역할을 추가합니다.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
검증
플랫폼 KubeletConfig 규칙은
Node/Proxy
오브젝트를 통해 확인합니다. 다음 명령을 실행하여 해당 규칙을 찾을 수 있습니다.$ oc get rules -o json | jq '.items[] | select(.checkType == "Platform") | select(.metadata.name | contains("ocp4-kubelet-")) | .metadata.name'
5.5.5.6. KubeletConfig
하위 풀 수정
KubeletConfig
수정 라벨은 MachineConfigPool
하위 풀에 적용할 수 있습니다.
절차
하위 풀
MachineConfigPool
CR에 레이블을 추가합니다.$ oc label mcp <sub-pool-name> pools.operator.machineconfiguration.openshift.io/<sub-pool-name>=
5.5.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
오브젝트로 렌더링됩니다. 이후 Machine Config Operator에서 MachineConfig
오브젝트를 렌더링하고 마지막으로 각 노드에서 실행되는 머신 제어 데몬 인스턴스에서 머신 구성 풀의 모든 노드에 이 오브젝트를 적용합니다.
Machine Config Operator에서 새 MachineConfig
오브젝트를 풀의 노드에 적용하면 풀에 속하는 모든 노드가 재부팅됩니다. 이러한 방법은 복합적인 75-$scan-name-$suite-name
MachineConfig
오브젝트를 각각 다시 렌더링하는 수정을 여러 번 적용할 때 불편할 수 있습니다. 수정을 즉시 적용하지 않으려면 MachineConfigPool
오브젝트의 .spec.paused
특성을 true
로 설정하여 머신 구성 풀을 일시 중지하면 됩니다.
CA 인증서 교체가 발생할 때 풀이 일시 중지되지 않았는지 확인합니다. MCP가 일시 중지되면 MCO는 새로 순환된 인증서를 해당 노드로 푸시할 수 없습니다. 이로 인해 클러스터의 성능이 저하되고 oc debug
,
,oc
logsoc exec
, oc attach
를 포함하여 여러 oc 명령에서 오류가 발생합니다. 인증서가 순환될 때 MCP가 일시 중지되면 OpenShift Container Platform 웹 콘솔의 경고 UI에 알림이 표시됩니다.
Compliance Operator는 수정을 자동으로 적용할 수 있습니다. ScanSetting
최상위 오브젝트에 autoApplyRemediations: true
를 설정합니다.
수정 사항 자동 적용은 신중하게 고려해야 합니다.
Compliance Operator는 수정 사이에 발생할 수 있는 종속성 문제를 자동으로 해결하지 않습니다. 정확한 결과를 보장하기 위해 수정을 적용한 후 다시 스캔해야 합니다.
5.5.5.8. 플랫폼 점검 수동 수정
플랫폼 검사에 대한 점검은 일반적으로 다음 두 가지 이유로 관리자가 수동으로 수정해야 합니다.
- 설정해야 하는 값을 자동으로 결정할 수 없는 경우가 있습니다. 검사 중 하나를 통해 허용된 레지스트리 목록을 제공해야 하지만 스캐너에서는 조직이 허용하려는 레지스트리를 알 수 없습니다.
-
다양한 점검에서 여러 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.5.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.5.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.5.5.11. KubeletConfig 수정 제거
KubeletConfig
수정 사항은 노드 수준 프로필에 포함됩니다. KubeletConfig 수정을 제거하려면 KubeletConfig
오브젝트에서 수동으로 제거해야 합니다. 이 예제에서는 one-rule-tp-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
오브젝트에서 remediation,imagefs.available: 10%
를 수동으로 제거합니다.$ oc edit -n openshift-compliance KubeletConfig compliance-operator-kubelet-master
중요수정으로 영향을 받는 모든 노드가 재부팅됩니다.
또한 수정 사항을 자동으로 적용하는 맞춤형 프로필의 예약된 검사에서 규칙을 제외해야 합니다. 그러지 않으면 다음 예약된 검사 중에 수정 사항이 다시 적용됩니다.
5.5.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 annotation
에 나열됩니다.
가능한 경우 클러스터가 규정 준수 상태에 통합될 수 있도록 수정이 계속 생성됩니다. 그러나 이러한 통합이 항상 가능한 것은 아니며 노드 간 차이를 수동으로 수정해야 합니다. compliance.openshift.io/rescan=
옵션으로 검사에 주석을 달아 일관된 결과를 가져오도록 규정 준수 검사를 다시 실행해야 합니다.
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/rescan=
5.5.5.13. 추가 리소스
5.5.6. 고급 Compliance Operator 작업 수행
Compliance Operator에는 디버깅 또는 기존 툴과의 통합에 필요한 고급 사용자용 옵션이 포함되어 있습니다.
5.5.6.1. ComplianceSuite 및 ComplianceScan 오브젝트 직접 사용
사용자가 ScanSetting
및 ScanSettingBinding
오브젝트를 활용하여 모음과 검사를 정의하는 것이 바람직하지만 ComplianceSuite
오브젝트를 직접 정의하는 유효한 사용 사례가 있습니다.
-
검사할 단일 규칙만 지정합니다. 그러지 않으면 디버그 모드가 매우 상세하게 표시되는 경향이 있으므로 이 방법은 OpenSCAP 스캐너의 상세 수준을 높이는
debug: true
특성과 함께 디버깅하는 데 유용할 수 있습니다. 테스트를 하나의 규칙으로 제한하면 디버그 정보의 양을 줄이는 데 도움이 됩니다. - 사용자 정의 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
에서 유사한 모음을 생성하여 시작하거나 규칙 또는 프로필과 같이 ProfileBundle
오브젝트에서 구문 분석한 오브젝트를 검사하면 됩니다. 이러한 오브젝트에는 ComplianceSuite
에서 참조하는 데 사용할 수 있는 xccdf_org
식별자가 포함되어 있습니다.
5.5.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.5.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.5.6.4. 재검사 수행
일반적으로 매주 월요일 또는 매일 등 정의된 일정에 따라 검사를 다시 실행하려고 할 것입니다. 노드 문제를 해결한 후 다시 한 번 검사를 실행하는 것도 유용할 수 있습니다. 단일 검사를 수행하려면 compliance.openshift.io/rescan=
옵션을 사용하여 검사에 주석을 답니다.
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/rescan=
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.5.6.5. 결과에 대한 사용자 정의 스토리지 크기 설정
ComplianceCheckResult
와 같은 사용자 정의 리소스는 검사한 모든 노드에서 집계한 한 번의 점검 결과를 나타내지만 스캐너에서 생성한 원시 결과를 검토하는 것이 유용할 수 있습니다. 원시 결과는 ARF 형식으로 생성되며 크기가 클 수 있습니다(노드당 수십 메가바이트). 따라서 etcd
키-값 저장소에서 지원하는 Kubernetes 리소스에 저장하는 것은 비현실적입니다. 대신 검사할 때마다 기본 크기가 1GB인 영구 볼륨(PV)이 생성됩니다. 환경에 따라 적절하게 PV 크기를 늘릴 수 있습니다. 크기를 늘리려면 ScanSetting
및 ComplianceScan
리소스 모두에 노출되는 rawResultStorage.size
특성을 사용하면 됩니다.
관련 매개변수는 rawResultStorage.rotation
으로, 이전 검사가 되풀이되기 전에 PV에 유지되는 검사 수를 조절합니다. 기본값은 3이며 되풀이 정책을 0으로 설정하면 되풀이가 비활성화됩니다. 기본 되풀이 정책과 원시 ARF 검사 보고서당 100MB의 추정치가 지정되면 환경에 적합한 PV 크기를 계산할 수 있습니다.
5.5.6.5.1. 사용자 정의 결과 스토리지 값 사용
OpenShift Container Platform은 다양한 퍼블릭 클라우드 또는 베어 메탈에 배포할 수 있으므로 Compliance Operator에서는 사용 가능한 스토리지 구성을 결정할 수 없습니다. 기본적으로 Compliance Operator는 클러스터의 기본 스토리지 클래스를 사용하여 결과를 저장하는 PV를 생성하지만 사용자 정의 스토리지 클래스는 rawResultStorage.StorageClassName
특성을 사용하여 구성할 수 있습니다.
클러스터에서 기본 스토리지 클래스를 지정하지 않는 경우 이 특성을 설정해야 합니다.
표준 스토리지 클래스를 사용하고 마지막 결과 10개를 유지하는 10GB 크기의 영구 볼륨을 만들도록 ScanSetting
사용자 정의 리소스를 구성합니다.
예제 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.5.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.5.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.5.6.8. Compliance Operator에 대한 사용자 정의 SCC 생성
일부 환경에서는 Compliance Operator api-resource-collector
에서 올바른 권한을 사용할 수 있도록 사용자 정의 SCC(보안 컨텍스트 제약 조건) 파일을 생성해야 합니다.
사전 요구 사항
-
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.5.6.9. 추가 리소스
5.5.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 오브젝트당 하나씩 여러 개의 컨트롤러로 구성됩니다. 문제가 있는 API 오브젝트에 해당하는 컨트롤러만 필터링하는 것이 유용할 수 있습니다.
ComplianceRemediation
을 적용할 수 없는 경우remediationctrl
컨트롤러의 메시지를 확인하십시오.jq
를 사용하여 구문 분석하면 단일 컨트롤러의 메시지를 필터링할 수 있습니다.$ oc -n openshift-compliance logs compliance-operator-775d7bddbd-gj58f \ | jq -c 'select(.logger == "profilebundlectrl")'
타임스탬프는 UTC의 UNIX epoch 이후의 초로 기록됩니다. 사람이 읽을 수 있는 날짜로 변환하려면
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.5.7.1. 검사 구조
다음 섹션에서는 Compliance Operator 검사의 구성 요소 및 단계를 간략하게 설명합니다.
5.5.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.5.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
오브젝트가 생성되었습니다. flow는 새로 생성된 ComplianceSuite
를 계속 조정합니다.
5.5.7.1.3. ComplianceSuite 사용자 정의 리소스 라이프사이클 및 디버깅
ComplianceSuite
CR은 ComplianceScan
관련 래퍼입니다. ComplianceSuite
CR은 logger=suitectrl
태그가 지정된 컨트롤러에서 처리합니다. 이 컨트롤러는 모음의 검사 생성을 처리하고 개별 검사 상태를 단일 모음 상태로 조정 및 집계합니다. 모음이 주기적으로 실행되도록 설정된 경우에는 초기 실행이 완료된 후 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
오브젝트에는 이 모음에 속한 Scan
오브젝트에서 Status
하위 리소스를 업데이트할 때 업데이트되는 Status
하위 리소스도 있습니다. 예상되는 모든 검사가 생성되면 제어가 검사 컨트롤러로 전달됩니다.
5.5.7.1.4. ComplianceScan 사용자 정의 리소스 라이프사이클 및 디버깅
ComplianceScan
CR은 scanctrl
컨트롤러에 의해 처리됩니다. 여기에서 실제 검사가 발생하고 검사 결과가 생성됩니다. 각 검사는 여러 단계를 거칩니다.
5.5.7.1.4.1. 보류 단계
이 단계에서는 검사의 정확성을 확인합니다. 스토리지 크기와 같은 일부 매개변수가 잘못된 경우 검사가 ‘오류와 함께 완료’ 결과로 전환되고, 그러지 않으면 시작 단계가 진행됩니다.
5.5.7.1.4.2. 시작 단계
이 단계에서는 스캐너 Pod에 대한 환경이나 스캐너 Pod를 평가할 스크립트를 직접 포함하는 여러 구성 맵이 있습니다. 구성 맵을 나열합니다.
$ oc -n openshift-compliance get cm \ -l compliance.openshift.io/scan-name=rhcos4-e8-worker,complianceoperator.openshift.io/scan-script=
이러한 구성 맵은 스캐너 Pod에서 사용합니다. 스캐너 동작을 수정하거나 스캐너 디버그 수준을 변경하거나 원시 결과를 출력해야 하는 경우 구성 맵을 수정하는 것이 좋습니다. 이후 원시 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
검사 인스턴스용 스캐너 Pod 1개와 node
검사 인스턴스에 일치하는 노드당 스캐너 Pod 1개입니다. 노드별 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
+ 검사는 실행 중 단계로 진행됩니다.
5.5.7.1.4.3. 실행 단계
실행 단계는 스캐너 Pod가 종료될 때까지 대기합니다. 다음은 실행 단계에서 사용되는 용어 및 프로세스입니다.
-
init container:
content-container
라는 하나의 init 컨테이너가 있습니다. contentImage 컨테이너를 실행하고 이 Pod의 다른 컨테이너와 공유하는/content
디렉터리에 contentFile을 복사하는 단일 명령을 실행합니다. -
scanner: 이 컨테이너는 검사를 실행합니다. 노드 검사의 경우 컨테이너는 노드 파일 시스템을
/host
로 마운트하고 init 컨테이너에서 제공하는 콘텐츠를 마운트합니다. 컨테이너는 또한 시작 단계에서 생성된entrypoint
ConfigMap
을 마운트하고 실행합니다. 진입점ConfigMap
의 기본 스크립트는 OpenSCAP을 실행하고 Pod 컨테이너 간 공유하는/results
디렉터리에 결과 파일을 저장합니다. 이 Pod의 로그를 보고 OpenSCAP 스캐너에서 점검한 사항을 확인할 수 있습니다. 더 자세한 출력 내용은debug
플래그를 사용하여 볼 수 있습니다. logcollector: logcollector 컨테이너는 스캐너 컨테이너가 종료될 때까지 대기합니다. 그런 다음 전체 ARF 결과를
ResultServer
에 업로드하고 XCCDF 결과를 검사 결과 및 OpenSCAP 결과 코드와 함께ConfigMap
으로 별도로 업로드합니다. 이러한 결과 구성 맵은 검사 이름(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 리소스를 파악한 후scanner
컨테이너에서 이러한 API 리소스를 읽는 공유 디렉터리에 저장합니다. -
scanner
컨테이너는 호스트 파일 시스템을 마운트할 필요가 없습니다.
스캐너 Pod가 완료되면 검사가 집계 단계로 이동합니다.
5.5.7.1.4.4. 집계 단계
검사 컨트롤러는 집계 단계에서 집계기 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가 종료되고 검사가 완료 단계로 전환됩니다.
5.5.7.1.4.5. 완료 단계
최종 검사 단계에서는 필요한 경우 검사 리소스가 정리되고 ResultServer
배포가 축소되거나(검사가 1회인 경우) 삭제됩니다(검사가 계속되는 경우). 삭제하는 경우 다음 검사 인스턴스에서 배포를 다시 생성합니다.
또한 주석을 달아 완료 단계에서 검사 재실행을 트리거할 수도 있습니다.
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/rescan=
autoApplyRemediations: true
를 사용하여 수정을 자동 적용하도록 설정하지 않으면 검사가 완료 단계에 도달한 후 자체적으로 수행되는 작업이 없습니다. OpenShift Container Platform 관리자가 수정 사항을 검토하고 필요에 따라 적용합니다. 수정을 자동 적용하도록 설정하면 완료 단계에서 ComplianceSuite
컨트롤러에 설정이 전달되고, 이 컨트롤러에서 검사가 매핑되는 머신 구성 풀을 일시 중지한 후 모든 수정을 한 번에 적용합니다. 수정은 ComplianceRemediation
컨트롤러에서 대신 적용합니다.
5.5.7.1.5. ComplianceRemediation 컨트롤러 라이프사이클 및 디버깅
예제 검사에서 몇 가지 결과가 보고되었습니다. 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.5.7.1.6. 유용한 레이블
Compliance Operator에서 생성하는 각 Pod는 특별히 해당 Pod가 속하는 검사와 수행하는 작업을 사용하여 레이블이 지정됩니다. 검사 식별자는 compliance.openshift.io/scan-name
으로 레이블이 지정됩니다. 워크로드 식별자는 workload
로 레이블이 지정됩니다.
Compliance Operator는 다음 워크로드를 예약합니다.
- scanner: 적합성 검사를 수행합니다.
- resultserver: 준수 검사에 대한 원시 결과를 저장합니다.
- aggregator: 결과를 집계하고, 불일치를 감지하고, 결과 오브젝트를 출력합니다(검사 결과 및 수정).
- suitererunner: 재실행할 모음에 태그를 지정합니다(일정이 설정된 경우).
- profileparser: 데이터 스트림을 구문 분석하고 적절한 프로필, 규칙, 변수를 만듭니다.
특정 워크로드에 디버깅 및 로그가 필요한 경우 다음을 실행합니다.
$ oc logs -l workload=<workload_name> -c <container_name>
5.5.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.5.7.3. Operator 리소스 제약 조건 구성
resources
필드는 OLM(Operator Lifecycle Manager)에서 생성한 Pod의 모든 컨테이너에 대한 리소스 제약 조건을 정의합니다.
이 프로세스에 적용된 리소스 제약 조건은 기존 리소스 제약 조건을 덮어씁니다.
절차
Subscription
오브젝트를 편집하여 0.25 cpu 및 64 Mi의 메모리 요청과 각 컨테이너에서 메모리 제한 0.5 cpu 및 128 Mi를 삽입합니다.kind: Subscription metadata: name: custom-operator spec: package: etcd channel: alpha config: resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
5.5.7.4. ScanSetting 타임아웃 구성
ScanSetting
오브젝트에는 ComplianceScanSetting
오브젝트에 1h30m
과 같은 기간 문자열로 지정할 수 있는 시간 초과 옵션이 있습니다. 지정된 시간 제한 내에서 검사가 완료되지 않으면 maxRetryOnTimeout
제한에 도달할 때까지 검사가 다시 시도합니다.
절차
ScanSetting에서
제한 시간
및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.5.7.5. 지원 요청
이 문서에 설명된 절차 또는 일반적으로 OpenShift Container Platform에 문제가 발생하는 경우 Red Hat 고객 포털에 액세스하십시오. 고객 포털에서 다음을 수행할 수 있습니다.
- Red Hat 제품과 관련된 기사 및 솔루션에 대한 Red Hat 지식베이스를 검색하거나 살펴볼 수 있습니다.
- Red Hat 지원에 대한 지원 케이스 제출할 수 있습니다.
- 다른 제품 설명서에 액세스 가능합니다.
클러스터 문제를 식별하기 위해 OpenShift Cluster Manager Hybrid Cloud Console 에서 Insights를 사용할 수 있습니다. Insights는 문제에 대한 세부 정보 및 문제 해결 방법에 대한 정보를 제공합니다.
이 문서를 개선하기 위한 제안이 있거나 오류를 발견한 경우 가장 관련 있는 문서 구성 요소에 대한 Jira 문제를 제출하십시오. 섹션 이름 및 OpenShift Container Platform 버전과 같은 구체적인 정보를 제공합니다.
5.5.8. oc-compliance 플러그인 사용
Compliance Operator 는 클러스터에 대한 많은 검사 및 수정을 자동화하지만 클러스터를 규정 준수 상태로 전환하려면 관리자가 Compliance Operator API 및 기타 구성 요소와 상호 작용해야 하는 경우가 많습니다. oc-compliance
플러그인을 사용하면 프로세스를 더 쉽게 수행할 수 있습니다.
5.5.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.5.8.2. 원시 결과 가져오기
규정 준수 검사가 완료되면 결과 ComplianceCheckResult
CR(사용자 정의 리소스)에 개별 검사 결과가 나열됩니다. 그러나 관리자 또는 감사자는 검사에 대한 전체 세부 정보가 필요할 수 있습니다. OpenSCAP 툴은 자세한 결과를 사용하여 AMQP(Advanced Recording Format) 포맷 파일을 생성합니다. 이 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.5.8.3. 검사 재실행
예약된 작업으로 스캔을 실행할 수 있지만 수정을 적용한 후 또는 클러스터에 대한 기타 변경이 이루어진 경우 필요에 따라 검사를 다시 실행해야 합니다.
절차
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'
5.5.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
일 수 있습니다. 두 개 이상의 오브젝트를 제공할 수 있습니다. -
오브젝트 이름은 Kubernetes 리소스의 이름입니다 (예:
.metadata.name
). --dry-run
옵션을 추가하여 생성된 오브젝트의 YAML 파일을 표시합니다.예를 들어 다음 프로필 및 검사 설정이 제공됩니다.
$ oc get profile.compliance -n openshift-compliance
출력 예
NAME AGE ocp4-cis 9m54s ocp4-cis-node 9m54s ocp4-e8 9m54s ocp4-moderate 9m54s ocp4-ncp 9m54s rhcos4-e8 9m54s rhcos4-moderate 9m54s rhcos4-ncp 9m54s rhcos4-ospp 9m54s rhcos4-stig 9m54s
$ 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.5.8.5. 인쇄 제어
컴플라이언스 표준은 일반적으로 다음과 같이 계층 구조로 구성됩니다.
- 벤치마크는 특정 표준에 대한 제어 집합의 최상위 정의입니다. 예를 들어 FedRAMP Moderate 또는 Center for Internet Security (CIS) v.1.6.0입니다.
- 제어는 벤치마크를 준수하기 위해 충족되어야 하는 일련의 요구 사항을 설명합니다. 예: FedRAMP AC-01(액세스 제어 정책 및 절차)
- 규칙은 규정을 준수하는 시스템에 특정한 단일 검사이며 이러한 규칙 중 하나 이상이 제어에 매핑됩니다.
- Compliance Operator는 단일 벤치마크의 프로필로 규칙 그룹화를 처리합니다. 프로필의 규칙 집합이 충족되도록 제어하는 것을 결정하기 어려울 수 있습니다.
프로세스
oc compliance
control
하위 명령은 표준에 대한 보고서를 제공하고 지정된 프로필이 충족되도록 제어합니다.$ oc compliance controls profile ocp4-cis-node
출력 예
+-----------+----------+ | FRAMEWORK | CONTROLS | +-----------+----------+ | CIS-OCP | 1.1.1 | + +----------+ | | 1.1.10 | + +----------+ | | 1.1.11 | + +----------+ ...
5.5.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.5.8.7. ComplianceCheckResult 오브젝트 세부 정보 보기
검사 실행이 완료되면 개별 검사 규칙에 대해 ComplianceCheckResult
오브젝트가 생성됩니다. view-result
하위 명령은 사용자가 읽을 수 있는 ComplianceCheckResult
오브젝트 세부 정보 출력을 제공합니다.
프로세스
다음을 실행합니다.
$ oc compliance view-result ocp4-cis-scheduler-no-bind-address