6.4. File Integrity Operator 이해
File Integrity Operator는 클러스터 노드에서 파일 무결성 검사를 지속적으로 실행하는 OpenShift Container Platform Operator입니다. 이 Operator는 각 노드에서 권한 있는 AIDE(고급 침입 탐지 환경) 컨테이너를 초기화 및 실행하는 데몬 세트를 배포하여 데몬 세트 Pod 초기 실행 중 수정된 파일의 로그를 상태 오브젝트에 제공합니다.
현재는 RHCOS(Red Hat Enterprise Linux CoreOS) 노드만 지원됩니다.
6.4.1. FileIntegrity 사용자 정의 리소스 생성 링크 복사링크가 클립보드에 복사되었습니다!
FileIntegrity 사용자 정의 리소스(CR) 인스턴스는 하나 이상의 노드에 대한 연속적인 파일 무결성 검사 세트를 나타냅니다.
각 FileIntegrity CR은 FileIntegrity CR 사양과 일치하는 노드에서 AIDE를 실행하는 데몬 세트에서 지원합니다.
프로세스
작업자 노드에서 검사를 활성화하려면
worker-fileintegrity.yaml이라는 다음 예제FileIntegrityCR을 생성합니다.FileIntegrity CR의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 노드 검사를 예약하기 위한 선택기를 정의합니다.
- 2
- 사용자 정의 테인트
가 있는 노드에 예약할 허용 오차를 지정합니다. 지정하지 않으면 기본 및 인프라 노드에서 실행할 수 있는 기본 허용 오차가 적용됩니다. - 3
- 사용할 AIDE 구성이 포함된
ConfigMap을 정의합니다. - 4
- AIDE 무결성 검사 사이에 일시 중지하는 시간(초)입니다. 노드에 대한 빈번한 AIDE 검사는 리소스 집약적일 수 있으므로 간격을 길게 지정하는 것이 유용할 수 있습니다. 기본값은 900초(15분)입니다.
- 5
- 노드에 유지할 최대 AIDE 데이터베이스 및 로그 백업(재초 프로세스에서 왼쪽) 수입니다. 이 수를 초과하는 이전 백업은 데몬에서 자동으로 정리합니다. 기본값은 5로 설정됩니다.
- 6
- 첫 번째 AIDE 무결성 검사를 시작하기 전에 대기하는 시간(초)입니다. 기본값은 0으로 설정됩니다.
- 7
FileIntegrity인스턴스의 실행 상태입니다. 상태는Initializing,Pending또는Active입니다.
초기화FileIntegrity오브젝트는 현재 AIDE 데이터베이스를 초기화하거나 다시 초기화하고 있습니다.보류FileIntegrity배포가 계속 생성되고 있습니다.활성 상태스캔은 활성 및 진행 중입니다.
openshift-file-integrity네임스페이스에 YAML 파일을 적용합니다.oc apply -f worker-fileintegrity.yaml -n openshift-file-integrity
$ oc apply -f worker-fileintegrity.yaml -n openshift-file-integrityCopy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음 명령을 실행하여
FileIntegrity오브젝트가 성공적으로 생성되었는지 확인합니다.oc get fileintegrities -n openshift-file-integrity
$ oc get fileintegrities -n openshift-file-integrityCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
NAME AGE worker-fileintegrity 14s
NAME AGE worker-fileintegrity 14sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.2. FileIntegrity 사용자 정의 리소스 상태 확인 링크 복사링크가 클립보드에 복사되었습니다!
FileIntegrity 사용자 정의 리소스(CR)는 .status.phase 하위 리소스를 통해 해당 상태를 보고합니다.
프로세스
FileIntegrityCR 상태를 쿼리하려면 다음을 실행합니다.oc get fileintegrities/worker-fileintegrity -o jsonpath="{ .status.phase }"$ oc get fileintegrities/worker-fileintegrity -o jsonpath="{ .status.phase }"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Active
ActiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.3. FileIntegrity 사용자 정의 리소스 단계 링크 복사링크가 클립보드에 복사되었습니다!
-
Pending- 사용자 정의 리소스(CR)가 생성된 후 단계입니다. -
Active- 백업 데몬 세트가 설정되어 실행되는 단계입니다. -
Initializing- AIDE 데이터베이스가 다시 초기화되는 단계입니다.
6.4.4. FileIntegrityNodeStatuses 오브젝트 이해 링크 복사링크가 클립보드에 복사되었습니다!
FileIntegrity CR의 검사 결과는 FileIntegrityNodeStatuses라는 다른 오브젝트에 보고됩니다.
oc get fileintegritynodestatuses
$ oc get fileintegritynodestatuses
출력 예
NAME AGE worker-fileintegrity-ip-10-0-130-192.ec2.internal 101s worker-fileintegrity-ip-10-0-147-133.ec2.internal 109s worker-fileintegrity-ip-10-0-165-160.ec2.internal 102s
NAME AGE
worker-fileintegrity-ip-10-0-130-192.ec2.internal 101s
worker-fileintegrity-ip-10-0-147-133.ec2.internal 109s
worker-fileintegrity-ip-10-0-165-160.ec2.internal 102s
FileIntegrityNodeStatus 오브젝트 결과를 사용할 수 있는 데 시간이 걸릴 수 있습니다.
노드당 하나의 결과 오브젝트가 있습니다. 각 FileIntegrityNodeStatus 오브젝트의 nodeName 특성은 검사 중인 노드에 해당합니다. 파일 무결성 검사의 상태는 results 배열에 표시되며 여기에는 검사 조건이 포함됩니다.
oc get fileintegritynodestatuses.fileintegrity.openshift.io -ojsonpath='{.items[*].results}' | jq
$ oc get fileintegritynodestatuses.fileintegrity.openshift.io -ojsonpath='{.items[*].results}' | jq
fileintegritynodestatus 오브젝트는 AIDE 실행의 최신 상태를 보고하고 status 필드에 Failed, Succeeded, Errored로 표시합니다.
oc get fileintegritynodestatuses -w
$ oc get fileintegritynodestatuses -w
출력 예
6.4.5. FileIntegrityNodeStatus CR 상태 유형 링크 복사링크가 클립보드에 복사되었습니다!
이러한 조건은 해당 FileIntegrityNodeStatus CR 상태의 결과 배열에 보고됩니다.
-
Succeeded- 무결성 검사를 통과했습니다. 데이터베이스가 마지막으로 초기화된 이후 AIDE 검사에 포함된 파일과 디렉터리가 수정되지 않았습니다. -
Failed- 무결성 검사에 실패했습니다. 데이터베이스가 마지막으로 초기화된 이후 AIDE 검사에 포함된 일부 파일 또는 디렉터리가 수정되었습니다. -
Errored- AIDE 스캐너에 내부 오류가 발생했습니다.
6.4.5.1. FileIntegrityNodeStatus CR 성공 상태의 예 링크 복사링크가 클립보드에 복사되었습니다!
성공 상태가 있는 조건의 출력 예
이 경우 세 가지 검사가 모두 성공했으며 지금까지 다른 조건이 없습니다.
6.4.5.2. FileIntegrityNodeStatus CR 실패 상태의 예 링크 복사링크가 클립보드에 복사되었습니다!
실패 조건을 시뮬레이션하려면 AIDE가 추적하는 파일 중 하나를 수정하십시오. 예를 들어 작업자 노드 중 하나에서 /etc/resolv.conf를 수정합니다.
oc debug node/ip-10-0-130-192.ec2.internal
$ oc debug node/ip-10-0-130-192.ec2.internal
출력 예
잠시 후 해당 FileIntegrityNodeStatus 오브젝트의 결과 배열에 Failed 조건이 보고되었습니다. 이전의 Succeeded 조건이 유지되므로 검사가 실패한 시간을 정확히 찾을 수 있습니다.
oc get fileintegritynodestatuses.fileintegrity.openshift.io/worker-fileintegrity-ip-10-0-130-192.ec2.internal -ojsonpath='{.results}' | jq -r
$ oc get fileintegritynodestatuses.fileintegrity.openshift.io/worker-fileintegrity-ip-10-0-130-192.ec2.internal -ojsonpath='{.results}' | jq -r
또는 오브젝트 이름을 언급하지 않는 경우 다음을 실행합니다.
oc get fileintegritynodestatuses.fileintegrity.openshift.io -ojsonpath='{.items[*].results}' | jq
$ oc get fileintegritynodestatuses.fileintegrity.openshift.io -ojsonpath='{.items[*].results}' | jq
출력 예
Failed 조건은 정확히 무엇이 실패하고 왜 실패했는지에 대한 자세한 정보를 제공하는 구성 맵을 가리킵니다.
oc describe cm aide-ds-worker-fileintegrity-ip-10-0-130-192.ec2.internal-failed
$ oc describe cm aide-ds-worker-fileintegrity-ip-10-0-130-192.ec2.internal-failed
출력 예
구성 맵 데이터 크기 제한으로 인해 1MB 이상의 AIDE 로그가 실패 구성 맵에 base64로 인코딩된 gzip 아카이브로 추가됩니다. 이 경우 위 명령의 출력을 base64 --decode | gunzip 으로 연결하려고 합니다. 압축 로그는 구성 맵에 file-integrity.openshift.io/compressed 주석 키가 있는 것으로 표시됩니다.
6.4.6. 이벤트 이해 링크 복사링크가 클립보드에 복사되었습니다!
FileIntegrity 및 FileIntegrityNodeStatus 오브젝트의 상태의 전환은 이벤트에서 기록됩니다. 이벤트 생성 시간은 Active로 Initializing과 같은 최신 전환을 반영하며 반드시 최신 검사 결과가 반영되는 것은 아닙니다. 그러나 최신 이벤트는 항상 최근 상태를 반영합니다.
oc get events --field-selector reason=FileIntegrityStatus
$ oc get events --field-selector reason=FileIntegrityStatus
출력 예
LAST SEEN TYPE REASON OBJECT MESSAGE 97s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Pending 67s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Initializing 37s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Active
LAST SEEN TYPE REASON OBJECT MESSAGE
97s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Pending
67s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Initializing
37s Normal FileIntegrityStatus fileintegrity/example-fileintegrity Active
노드 검사에 실패하면 add/changed/removed 및 config map 정보를 사용하여 이벤트가 생성됩니다.
oc get events --field-selector reason=NodeIntegrityStatus
$ oc get events --field-selector reason=NodeIntegrityStatus
출력 예
추가, 변경 또는 제거된 파일의 수를 변경하면 노드 상태가 전환되지 않은 경우에도 새 이벤트가 생성됩니다.
oc get events --field-selector reason=NodeIntegrityStatus
$ oc get events --field-selector reason=NodeIntegrityStatus
출력 예