5.11. 고급 Compliance Operator 작업 수행
Compliance Operator에는 디버깅 또는 기존 툴과의 통합에 필요한 고급 사용자용 옵션이 포함되어 있습니다.
5.11.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: 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
에서 유사한 모음을 생성하여 시작하거나 규칙 또는 프로필과 같이 ProfileBundle
오브젝트에서 구문 분석한 오브젝트를 검사하면 됩니다. 이러한 오브젝트에는 ComplianceSuite
에서 참조하는 데 사용할 수 있는 xccdf_org
식별자가 포함되어 있습니다.
5.11.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.11.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: quay.io/complianceascode/ocp4:latest debug: true tailoringConfigMap: name: nist-moderate-modified nodeSelector: node-role.kubernetes.io/worker: ""
5.11.4. 재검사 수행
일반적으로 매주 월요일 또는 매일 등 정의된 일정에 따라 검사를 다시 실행하려고 할 것입니다. 노드 문제를 해결한 후 다시 한 번 검사를 실행하는 것도 유용할 수 있습니다. 단일 검사를 수행하려면 compliance.openshift.io/rescan=
옵션을 사용하여 검사에 주석을 답니다.
$ oc -n openshift-compliance \ annotate compliancescans/rhcos4-e8-worker compliance.openshift.io/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.11.5. 결과에 대한 사용자 정의 스토리지 크기 설정
ComplianceCheckResult
와 같은 사용자 정의 리소스는 검사한 모든 노드에서 집계한 한 번의 점검 결과를 나타내지만 스캐너에서 생성한 원시 결과를 검토하는 것이 유용할 수 있습니다. 원시 결과는 ARF 형식으로 생성되며 크기가 클 수 있습니다(노드당 수십 메가바이트). 따라서 etcd
키-값 저장소에서 지원하는 Kubernetes 리소스에 저장하는 것은 비현실적입니다. 대신 검사할 때마다 기본 크기가 1GB인 영구 볼륨(PV)이 생성됩니다. 환경에 따라 적절하게 PV 크기를 늘릴 수 있습니다. 크기를 늘리려면 ScanSetting
및 ComplianceScan
리소스 모두에 노출되는 rawResultStorage.size
특성을 사용하면 됩니다.
관련 매개변수는 rawResultStorage.rotation
으로, 이전 검사가 되풀이되기 전에 PV에 유지되는 검사 수를 조절합니다. 기본값은 3이며 되풀이 정책을 0으로 설정하면 되풀이가 비활성화됩니다. 기본 되풀이 정책과 원시 ARF 검사 보고서당 100MB의 추정치가 지정되면 환경에 적합한 PV 크기를 계산할 수 있습니다.
5.11.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.11.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.11.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.11.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"]