5.15. 사용자 정의 리소스 정의 이해
OpenShift Container Platform의 Compliance Operator는 규정 준수 검사를 수행하기 위해 여러 CRD(Custom Resource Definitions)를 제공합니다. 규정 준수 검사를 실행하려면 ComplianceAsCode 커뮤니티 프로젝트에서 파생된 사전 정의된 보안 정책을 활용합니다. Compliance Operator는 이러한 보안 정책을 CRD로 변환합니다. 이 CRD는 규정 준수 검사를 실행하고 발견된 문제에 대한 수정을 가져오는 데 사용할 수 있습니다.
5.15.1. CRD 워크플로
CRD는 다음 워크플로를 제공하여 규정 준수 검사를 완료합니다.
- 규정 준수 검사 요구 사항 정의
- 규정 준수 검사 설정 구성
- 규정 준수 검사 설정으로 프로세스 규정 준수 요구 사항
- 규정 준수 검사 모니터링
- 규정 준수 검사 결과 확인
5.15.2. 규정 준수 검사 요구 사항 정의
기본적으로 Compliance Operator CRD에는 ProfileBundle
및 Profile
오브젝트가 포함되며, 이를 통해 규정 준수 검사 요구 사항에 대한 규칙을 정의하고 설정할 수 있습니다. TailoredProfile
오브젝트를 사용하여 기본 프로필을 사용자 지정할 수도 있습니다.
5.15.2.1. ProfileBundle 오브젝트
Compliance Operator를 설치하면 즉시 실행할 수 있는 ProfileBundle
오브젝트가 포함됩니다. Compliance Operator는 ProfileBundle
오브젝트를 구문 분석하고 번들의 각 프로필에 대한 Profile
오브젝트를 생성합니다. 또한 Profile
개체에서 사용하는 Rule
및 Variable
개체를 구문 분석합니다.
ProfileBundle
오브젝트의 예
apiVersion: compliance.openshift.io/v1alpha1
kind: ProfileBundle
name: <profile bundle name>
namespace: openshift-compliance
status:
dataStreamStatus: VALID 1
- 1
- Compliance Operator에서 콘텐츠 파일을 구문 분석할 수 있는지 여부를 나타냅니다.
contentFile
이 실패하면 발생한 오류에 대한 세부 정보를 제공하는 errorMessage
속성이 표시됩니다.
문제 해결
잘못된 이미지에서 알려진 콘텐츠 이미지로 롤백하면 ProfileBundle
오브젝트가 응답을 중지하고 PENDING
상태가 표시됩니다. 해결 방법으로 이전 이미지와 다른 이미지로 이동할 수 있습니다. 또는 ProfileBundle
오브젝트를 삭제하고 다시 생성하여 작업 상태로 돌아갈 수 있습니다.
5.15.2.2. 프로필 오브젝트
Profile
오브젝트는 특정 규정 준수 표준에 대해 평가할 수 있는 규칙 및 변수를 정의합니다. 노드
또는 플랫폼
유형에 대한 XCCDF 식별자 및 프로필 검사와 같은 OpenSCAP 프로필에 대한 세부 정보를 구문 분석했습니다. Profile 오브젝트를 직접 사용하거나 Tailor
오브젝트를 사용하여 추가로 사용자 지정할 수 있습니다.
Profile
Profile
오브젝트가 단일 ProfileBundle
오브젝트에서 파생되므로 수동으로 생성하거나 수정할 수 없습니다. 일반적으로 단일 ProfileBundle
오브젝트에는 여러 Profile
오브젝트가 포함될 수 있습니다.
Profile
오브젝트의 예
apiVersion: compliance.openshift.io/v1alpha1 description: <description of the profile> id: xccdf_org.ssgproject.content_profile_moderate 1 kind: Profile metadata: annotations: compliance.openshift.io/product: <product name> compliance.openshift.io/product-type: Node 2 creationTimestamp: "YYYY-MM-DDTMM:HH:SSZ" generation: 1 labels: compliance.openshift.io/profile-bundle: <profile bundle name> name: rhcos4-moderate namespace: openshift-compliance ownerReferences: - apiVersion: compliance.openshift.io/v1alpha1 blockOwnerDeletion: true controller: true kind: ProfileBundle name: <profile bundle name> uid: <uid string> resourceVersion: "<version number>" selfLink: /apis/compliance.openshift.io/v1alpha1/namespaces/openshift-compliance/profiles/rhcos4-moderate uid: <uid string> rules: 3 - rhcos4-account-disable-post-pw-expiration - rhcos4-accounts-no-uid-except-zero - rhcos4-audit-rules-dac-modification-chmod - rhcos4-audit-rules-dac-modification-chown title: <title of the profile>
5.15.2.3. 규칙 오브젝트
프로필을 구성하는 Rule
오브젝트도 오브젝트로 노출됩니다. Rule
오브젝트를 사용하여 규정 준수 확인 요구 사항을 정의하고 이를 수정하는 방법을 지정합니다.
Rule
오브젝트의 예
apiVersion: compliance.openshift.io/v1alpha1 checkType: Platform 1 description: <description of the rule> id: xccdf_org.ssgproject.content_rule_configure_network_policies_namespaces 2 instructions: <manual instructions for the scan> kind: Rule metadata: annotations: compliance.openshift.io/rule: configure-network-policies-namespaces control.compliance.openshift.io/CIS-OCP: 5.3.2 control.compliance.openshift.io/NERC-CIP: CIP-003-3 R4;CIP-003-3 R4.2;CIP-003-3 R5;CIP-003-3 R6;CIP-004-3 R2.2.4;CIP-004-3 R3;CIP-007-3 R2;CIP-007-3 R2.1;CIP-007-3 R2.2;CIP-007-3 R2.3;CIP-007-3 R5.1;CIP-007-3 R6.1 control.compliance.openshift.io/NIST-800-53: AC-4;AC-4(21);CA-3(5);CM-6;CM-6(1);CM-7;CM-7(1);SC-7;SC-7(3);SC-7(5);SC-7(8);SC-7(12);SC-7(13);SC-7(18) labels: compliance.openshift.io/profile-bundle: ocp4 name: ocp4-configure-network-policies-namespaces namespace: openshift-compliance rationale: <description of why this rule is checked> severity: high 3 title: <summary of the rule>
Rule
오브젝트는 관련 ProfileBundle
오브젝트를 쉽게 식별할 수 있도록 적절한 라벨을 가져옵니다. ProfileBundle
은 이 오브젝트의 OwnerReferences
에도 지정됩니다.
5.15.2.4. TailoredProfile 오브젝트
TailoredProfile
오브젝트를 사용하여 조직 요구 사항에 따라 기본 Profile
오브젝트를 수정합니다. 규칙을 활성화 또는 비활성화하고, 변수 값을 설정하고, 사용자 지정에 대한 확인을 제공할 수 있습니다. 검증 후 TailoredProfile
오브젝트는 ComplianceScan
오브젝트에서 참조할 수 있는 ConfigMap
을 생성합니다.
ScanSettingBinding
오브젝트에서 TailoredProfile
오브젝트를 참조할 수 있습니다. ScanSettingBinding 에 대한 자세한 내용은 ScanSettingBinding
오브젝트를 참조하십시오.
TailoredProfile
오브젝트의 예
apiVersion: compliance.openshift.io/v1alpha1 kind: TailoredProfile metadata: name: rhcos4-with-usb spec: extends: rhcos4-moderate 1 title: <title of the tailored profile> disableRules: - name: <name of a rule object to be disabled> rationale: <description of why this rule is checked> status: id: xccdf_compliance.openshift.io_profile_rhcos4-with-usb 2 outputRef: name: rhcos4-with-usb-tp 3 namespace: openshift-compliance state: READY 4
- 1
- 이는 선택 사항입니다.
Tailored
이 구축된 Profile 오브젝트의 이름입니다. 값을 설정하지 않으면Profile
enableRules
목록에서 새 프로필이 생성됩니다. - 2
- 맞춤형 프로필의 XCCDF 이름을 지정합니다.
- 3
ComplianceScan
의tailoringConfigMap.name
속성 값으로 사용할 수 있는ConfigMap
이름을 지정합니다.- 4
READY
,PENDING
및FAILURE
와 같은 오브젝트의 상태를 표시합니다. 오브젝트의 상태가ERROR
인 경우 특성status.errorMessage
는 실패 이유를 제공합니다.
오브젝트를 사용하면 TailoredProfile 구문을 사용하여 새 TailoredProfile
Profile
오브젝트를 생성할 수 있습니다. 새 프로필을
만들려면 다음 설정 매개변수를 설정합니다.
- 적절한 제목
-
extends
값이 비어 있어야 합니다. TailoredProfile
오브젝트의 스캔 유형 주석:compliance.openshift.io/product-type: Platform/Node
참고product-type
주석을 설정하지 않은 경우 Compliance Operator의 기본값은Platform
검사 유형입니다.TailoredProfile
오브젝트의 이름에-node
접미사를 추가하면노드
검사 유형이 생성됩니다.
5.15.3. 규정 준수 검사 설정 구성
규정 준수 검사의 요구 사항을 정의한 후 검사 유형, 검사 발생 및 검사 위치를 지정하여 구성할 수 있습니다. 이를 위해 Compliance Operator는 ScanSetting
오브젝트를 제공합니다.
5.15.3.1. ScanSetting 오브젝트
ScanSetting
오브젝트를 사용하여 운영 정책을 정의하고 재사용하여 검사를 실행합니다. 기본적으로 Compliance Operator는 다음 ScanSetting
오브젝트를 생성합니다.
- 기본값 - 1Gi 영구 볼륨(PV)을 사용하여 마스터 노드와 작업자 노드 모두에서 매일 검사를 실행하고 마지막 세 가지 결과를 유지합니다. 수정은 자동으로 적용되거나 업데이트되지 않습니다.
-
default-auto-apply - 1Gi 영구 볼륨(PV)을 사용하여 컨트롤 플레인과 작업자 노드 모두에서 1AM에서 매일 검사를 실행하고 마지막 세 가지 결과를 유지합니다.
autoApplyRemediations
및autoUpdateRemediations
가 모두 true로 설정됩니다.
ScanSetting
오브젝트의 예
Name: default-auto-apply Namespace: openshift-compliance Labels: <none> Annotations: <none> API Version: compliance.openshift.io/v1alpha1 Auto Apply Remediations: true Auto Update Remediations: true 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: 1 f:autoUpdateRemediations: 2 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 3 Size: 1Gi 4 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: 5 master worker Scan Tolerations: Operator: Exists Schedule: "0 1 * * *" 6 Show Not Applicable: false Strict Node Scan: true Events: <none>
- 1
- 자동 수정을 활성화하려면
true
로 설정합니다. 자동 수정을 비활성화하려면false
로 설정합니다. - 2
- 콘텐츠 업데이트에 대한 자동 수정을 활성화하려면
true
로 설정합니다. 콘텐츠 업데이트에 대한 자동 수정을 비활성화하려면false
로 설정합니다. - 3
- 원시 결과 형식으로 저장된 검사 수를 지정합니다. 기본값은
3
입니다. 이전 결과가 순환되면 관리자는 교체 전에 결과를 다른 곳에 저장해야 합니다. - 4
- 원시 결과를 저장하기 위해 검사에 생성해야 하는 스토리지 크기를 지정합니다. 기본값은
1Gi
입니다. - 6
- cron 형식으로 검사 실행 빈도를 지정합니다.참고
되풀이 정책을 비활성화하려면 값을
0
으로 설정합니다. - 5
Node
유형에 대한 검사를 예약하려면node-role.kubernetes.io
레이블 값을 지정합니다. 이 값은MachineConfigPool
의 이름과 일치해야 합니다.
5.15.4. 규정 준수 검사 설정으로 규정 준수 검사 요구 사항 처리
규정 준수 검사 요구 사항을 정의하고 검사를 실행하도록 설정을 구성한 경우 Compliance Operator는 ScanSettingBinding
오브젝트를 사용하여 처리합니다.
5.15.4.1. ScanSettingBinding 오브젝트
ScanSettingBinding
오브젝트를 사용하여 Profile
또는 TailoredProfile
오브젝트를 참조하는 규정 준수 요구 사항을 지정합니다. 그런 다음 검사에 대한 운영 제약 조건을 제공하는 ScanSetting
오브젝트에 연결됩니다. 그런 다음 Compliance Operator는 ScanSetting
및 ScanSettingBinding
오브젝트를 기반으로 ComplianceSuite
오브젝트를 생성합니다.
ScanSettingBinding
오브젝트의 예
apiVersion: compliance.openshift.io/v1alpha1 kind: ScanSettingBinding metadata: name: <name of the scan> profiles: 1 # Node checks - name: rhcos4-with-usb kind: TailoredProfile apiGroup: compliance.openshift.io/v1alpha1 # Cluster checks - name: ocp4-moderate kind: Profile apiGroup: compliance.openshift.io/v1alpha1 settingsRef: 2 name: my-companys-constraints kind: ScanSetting apiGroup: compliance.openshift.io/v1alpha1
ScanSetting
및 ScanSettingBinding
오브젝트를 생성하면 규정 준수 모음이 생성됩니다. 규정 준수 제품군 목록을 가져오려면 다음 명령을 실행합니다.
$ oc get compliancesuites
ScanSettingBinding
을 삭제하면 컴플라이언스 모음도 삭제됩니다.
5.15.5. 규정 준수 검사 추적
규정 준수 제품군 생성 후 ComplianceSuite
오브젝트를 사용하여 배포된 검사의 상태를 모니터링할 수 있습니다.
5.15.5.1. ComplianceSuite 오브젝트
ComplianceSuite
오브젝트를 사용하면 검사 상태를 추적할 수 있습니다. 검사 및 전체 결과를 생성하는 원시 설정이 포함되어 있습니다.
Node
유형 검사의 경우 문제에 대한 수정이 포함되어 있으므로 검사를 MachineConfigPool
에 매핑해야 합니다. 레이블을 지정하는 경우 풀에 직접 적용되는지 확인합니다.
ComplianceSuite
오브젝트의 예
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceSuite metadata: name: <name of the scan> spec: autoApplyRemediations: false 1 schedule: "0 1 * * *" 2 scans: 3 - name: workers-scan scanType: Node profile: xccdf_org.ssgproject.content_profile_moderate content: ssg-rhcos4-ds.xml contentImage: quay.io/complianceascode/ocp4:latest rule: "xccdf_org.ssgproject.content_rule_no_netrc_files" nodeSelector: node-role.kubernetes.io/worker: "" status: Phase: DONE 4 Result: NON-COMPLIANT 5 scanStatuses: - name: workers-scan phase: DONE result: NON-COMPLIANT
백그라운드에서 모음은 scans
매개변수를 기반으로 ComplianceScan
오브젝트를 생성합니다. 프로그래밍 방식으로 ComplianceSuites
이벤트를 가져올 수 있습니다. 제품군의 이벤트를 가져오려면 다음 명령을 실행합니다.
$ oc get events --field-selector involvedObject.kind=ComplianceSuite,involvedObject.name=<name of the suite>
XCCDF 속성이 포함되어 있으므로 ComplianceSuite
를 수동으로 정의할 때 오류가 발생할 수 있습니다.
5.15.5.2. 고급 ComplianceScan 오브젝트
Compliance Operator에는 디버깅하거나 기존 툴과 통합하기 위한 고급 사용자용 옵션이 포함되어 있습니다. ComplianceScan
오브젝트를 직접 생성하지 않는 것이 좋지만 ComplianceSuite
오브젝트를 사용하여 대신 관리할 수 있습니다.
고급 ComplianceScan
오브젝트의 예
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceScan metadata: name: <name of the scan> spec: scanType: Node 1 profile: xccdf_org.ssgproject.content_profile_moderate 2 content: ssg-ocp4-ds.xml contentImage: quay.io/complianceascode/ocp4:latest 3 rule: "xccdf_org.ssgproject.content_rule_no_netrc_files" 4 nodeSelector: 5 node-role.kubernetes.io/worker: "" status: phase: DONE 6 result: NON-COMPLIANT 7
- 1
Node
또는Platform
을 지정합니다. 노드 프로필은 클러스터 노드 및 플랫폼 프로필을 스캔하여 Kubernetes 플랫폼을 검사합니다.- 2
- 실행할 프로필의 XCCDF 식별자를 지정합니다.
- 3
- 프로필 파일을 캡슐화하는 컨테이너 이미지를 지정합니다.
- 4
- 이는 선택 사항입니다. 단일 규칙을 실행할 검사를 지정합니다. 이 규칙은 XCCDF ID로 식별되어야 하며 지정된 프로필에 속해야 합니다.참고
rule
매개변수를 건너뛰면 지정된 프로필의 사용 가능한 모든 규칙에 대해 검사가 실행됩니다. - 5
- OpenShift Container Platform에 있고 수정을 생성하려면 nodeSelector 레이블이
MachineConfigPool
레이블과 일치해야 합니다.참고nodeSelector
매개변수를 지정하지 않거나MachineConfig
레이블과 일치하지 않으면 검사가 계속 실행되지만 수정을 생성하지 않습니다. - 6
- 검사의 현재 단계를 나타냅니다.
- 7
- 검사 확인 여부를 나타냅니다.
ComplianceSuite
오브젝트를 삭제하면 관련 검사가 모두 삭제됩니다.
검사가 완료되면 ComplianceCheckResult
오브젝트의 Custom Resources로 결과가 생성됩니다. 그러나 원시 결과는 ARF 형식으로 제공됩니다. 이러한 결과는 검사 이름과 연결된 PVC(영구 볼륨 클레임)가 있는 PV(영구 볼륨)에 저장됩니다. 프로그래밍 방식으로 ComplianceScans
이벤트를 가져올 수 있습니다. 모음에 대한 이벤트를 생성하려면 다음 명령을 실행합니다.
oc get events --field-selector involvedObject.kind=ComplianceScan,involvedObject.name=<name of the suite>
5.15.6. 규정 준수 결과 보기
규정 준수 제품군이 DONE
단계에 도달하면 검사 결과 및 가능한 수정을 볼 수 있습니다.
5.15.6.1. ComplianceCheckResult 오브젝트
특정 프로필을 사용하여 검사를 실행하면 프로필의 여러 규칙이 확인됩니다. 이러한 각 규칙에 대해 특정 규칙에 대한 클러스터 상태를 제공하는 ComplianceCheckResult
오브젝트가 생성됩니다.
ComplianceCheckResult
오브젝트의 예
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceCheckResult metadata: labels: compliance.openshift.io/check-severity: medium compliance.openshift.io/check-status: FAIL compliance.openshift.io/suite: example-compliancesuite compliance.openshift.io/scan-name: workers-scan name: workers-scan-no-direct-root-logins namespace: openshift-compliance ownerReferences: - apiVersion: compliance.openshift.io/v1alpha1 blockOwnerDeletion: true controller: true kind: ComplianceScan name: workers-scan description: <description of scan check> instructions: <manual instructions for the scan> id: xccdf_org.ssgproject.content_rule_no_direct_root_logins severity: medium 1 status: FAIL 2
- 1
- 검사 검사의 심각도를 설명합니다.
- 2
- 검사 결과를 설명합니다. 가능한 값은 다음과 같습니다.
- ECDHE: 검사가 성공했습니다.
- FAIL: 검사에 실패했습니다.
- INFO: check was successful and found something not severe enough to be considered an error.
- MANUAL: 점검에서 상태를 자동으로 평가할 수 없으며 수동 점검이 필요합니다.
- INCONSISTENT: 서로 다른 노드가 서로 다른 결과를 보고합니다.
- ERROR: run을 성공적으로 확인했지만 완료할 수 없었습니다.
- NOTAPPLICABLE: 검사가 적용되지 않으므로 실행되지 않았습니다.
모음에서 모든 검사 결과를 가져오려면 다음 명령을 실행합니다.
oc get compliancecheckresults \ -l compliance.openshift.io/suite=workers-compliancesuite
5.15.6.2. ComplianceRemediation 오브젝트
특정 검사의 경우 datastream 지정된 수정 사항을 지정할 수 있습니다. 그러나 Kubernetes 수정을 사용할 수 있는 경우 Compliance Operator는 ComplianceRemediation
오브젝트를 생성합니다.
ComplianceRemediation
오브젝트의 예
apiVersion: compliance.openshift.io/v1alpha1 kind: ComplianceRemediation metadata: labels: compliance.openshift.io/suite: example-compliancesuite compliance.openshift.io/scan-name: workers-scan machineconfiguration.openshift.io/role: worker name: workers-scan-disable-users-coredumps namespace: openshift-compliance ownerReferences: - apiVersion: compliance.openshift.io/v1alpha1 blockOwnerDeletion: true controller: true kind: ComplianceCheckResult name: workers-scan-disable-users-coredumps uid: <UID> spec: apply: false 1 object: current: 2 apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig spec: config: ignition: version: 2.2.0 storage: files: - contents: source: data:,%2A%20%20%20%20%20hard%20%20%20core%20%20%20%200 filesystem: root mode: 420 path: /etc/security/limits.d/75-disable_users_coredumps.conf outdated: {} 3
모음에서 모든 수정을 가져오려면 다음 명령을 실행합니다.
oc get complianceremediations \ -l compliance.openshift.io/suite=workers-compliancesuite
자동으로 업데이트를 적용할 수 있는 모든 실패한 검사를 나열하려면 다음 명령을 실행합니다.
oc get compliancecheckresults \ -l 'compliance.openshift.io/check-status in (FAIL),compliance.openshift.io/automated-remediation'
수동으로 수정할 수 있는 모든 실패한 검사를 나열하려면 다음 명령을 실행합니다.
oc get compliancecheckresults \ -l 'compliance.openshift.io/check-status in (FAIL),!compliance.openshift.io/automated-remediation'