6.6. File Integrity Operator 이해
File Integrity Operator는 클러스터 노드에서 파일 무결성 검사를 지속적으로 실행하는 OpenShift Container Platform Operator입니다. 이 Operator는 각 노드에서 권한 있는 AIDE(고급 침입 탐지 환경) 컨테이너를 초기화 및 실행하는 데몬 세트를 배포하여 데몬 세트 Pod 초기 실행 중 수정된 파일의 로그를 상태 오브젝트에 제공합니다.
현재는 RHCOS(Red Hat Enterprise Linux CoreOS) 노드만 지원됩니다.
6.6.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
- 사용자 정의 테인트가 있는 노드에 예약할tolerations를 지정합니다. 지정하지 않으면 기본 및 인프라 노드에서 실행되도록 허용하는 기본 허용 오차가 적용됩니다.
- 3
- 사용할 AIDE 구성이 포함된ConfigMap을 정의합니다.
- 4
- AIDE 무결성 검사 사이에 일시 중지하는 시간(초)입니다. 노드에 대한 빈번한 AIDE 검사는 리소스 집약적일 수 있으므로 간격을 더 길게 지정하는 것이 유용할 수 있습니다. 기본값은 900초(15분)입니다.
- 5
- 노드에 유지할 최대 AIDE 데이터베이스 및 로그 백업(초기 프로세스에서 왼쪽) 수입니다. 이 번호를 초과하는 이전 백업은 데몬에 의해 자동으로 정리됩니다. 기본값은 5로 설정됩니다.
- 6
- 첫 번째 AIDE 무결성 검사를 시작하기 전에 대기하는 시간(초)입니다. 기본값은 0입니다.
- 7
- FileIntegrity인스턴스의 실행 상태입니다. 상태가- 초기화됨,- 보류 중또는- 활성 상태입니다.
 - 초기화- FileIntegrity오브젝트는 현재 AIDE 데이터베이스를 초기화하거나 다시 초기화하고 있습니다.- 보류 중- FileIntegrity배포가 계속 생성되고 있습니다.- 활성- 검사가 활성 상태이며 진행 중입니다. 
- YAML 파일을 - openshift-file-integrity네임스페이스에 적용합니다.- oc apply -f worker-fileintegrity.yaml -n openshift-file-integrity - $ oc apply -f worker-fileintegrity.yaml -n openshift-file-integrity- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
검증
- 다음 명령을 실행하여 - FileIntegrity오브젝트가 성공적으로 생성되었는지 확인합니다.- oc get fileintegrities -n openshift-file-integrity - $ oc get fileintegrities -n openshift-file-integrity- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 출력 예 - NAME AGE worker-fileintegrity 14s - NAME AGE worker-fileintegrity 14s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
6.6.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 - Active- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
6.6.3. FileIntegrity 사용자 정의 리소스 단계
- 
							Pending- 사용자 정의 리소스(CR)가 생성된 후 단계입니다.
- 
							Active- 백업 데몬 세트가 설정되어 실행되는 단계입니다.
- 
							Initializing- AIDE 데이터베이스가 다시 초기화되는 단계입니다.
6.6.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.6.5. FileIntegrityNodeStatus CR 상태 유형
					이러한 조건은 해당 FileIntegrityNodeStatus CR 상태의 결과 배열에 보고됩니다.
				
- 
							Succeeded- 무결성 검사를 통과했습니다. 데이터베이스가 마지막으로 초기화된 이후 AIDE 검사에 포함된 파일과 디렉터리가 수정되지 않았습니다.
- 
							Failed- 무결성 검사에 실패했습니다. 데이터베이스가 마지막으로 초기화된 이후 AIDE 검사에 포함된 일부 파일 또는 디렉터리가 수정되었습니다.
- 
							Errored- AIDE 스캐너에 내부 오류가 발생했습니다.
6.6.5.1. FileIntegrityNodeStatus CR 성공 상태의 예
성공 상태가 있는 조건의 출력 예
이 경우 세 가지 검사가 모두 성공했으며 지금까지 다른 조건이 없습니다.
6.6.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 아카이브로 추가됩니다. 다음 명령을 사용하여 로그를 추출합니다.
oc get cm <failure-cm-name> -o json | jq -r '.data.integritylog' | base64 -d | gunzip
$ oc get cm <failure-cm-name> -o json | jq -r '.data.integritylog' | base64 -d | gunzip
							압축 로그는 구성 맵에 file-integrity.openshift.io/compressed 주석 키가 있는 것으로 표시됩니다.
						
6.6.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출력 예