2.3. Custom File Integrity Operator 구성

2.3.1. FileIntegrity 오브젝트 특성 보기

모든 Kubernetes 사용자 정의 리소스(CR)와 마찬가지로 oc explain fileintegrity를 실행하면 다음을 사용하여 개별 특성을 볼 수 있습니다.

$ oc explain fileintegrity.spec
$ oc explain fileintegrity.spec.config

2.3.2. 중요한 특성

표 2.1. 중요한 specspec.config 특성

특성설명

spec.nodeSelector

해당 노드에 AIDE Pod를 예약하기 위해서는 노드의 레이블과 일치해야 하는 키-값 쌍에 대한 맵입니다. 일반적인 사용은 node-role.kubernetes.io/worker: ""로 모든 작업자 노드에서 AIDE를 예약하고, node.openshift.io/os_id: "rhcos"로 모든 RHCOS(Red Hat Enterprise Linux CoreOS) 노드에서 일정을 예약하는 단일 키-값 쌍만 설정하는 것입니다.

spec.debug

부울 특성입니다. true로 설정하면 AIDE 데몬 세트의 Pod에서 실행 중인 데몬에서 추가 정보를 출력합니다.

spec.tolerations

사용자 정의 테인트가 있는 노드에 예약할 허용 오차를 지정합니다. 지정하지 않으면 기본 허용 오차가 적용되어 마스터 노드에서 허용 오차가 실행될 수 있습니다.

spec.config.gracePeriod

AIDE 무결성 검사 사이에 일시 중지하는 시간(초)입니다. 노드에 대한 빈번한 AIDE 검사는 리소스 집약적일 수 있으므로 간격을 길게 지정하는 것이 유용할 수 있습니다. 기본값은 900 또는 15분입니다.

spec.config.name, spec.config.namespace, spec.config.key

이 세 가지 특성을 사용하여 사용자 정의 AIDE 구성을 설정할 수 있습니다. 이름 또는 네임스페이스가 설정되지 않은 경우 File Integrity Operator에서 RHCOS 시스템에 적합한 구성을 생성합니다. 이름 및 네임스페이스 특성은 구성 맵을 가리킵니다. 키는 해당 구성 맵 내의 키를 가리킵니다. 키 특성을 사용하여 실제 구성이 포함되고 기본값이 aide.conf인 사용자 정의 키를 지정합니다.

2.3.3. 기본 구성 검사

기본 File Integrity Operator 구성은 FileIntegrity CR과 동일한 이름으로 구성 맵에 저장됩니다.

프로세스

  • 기본 구성을 검토하려면 다음을 실행합니다.

    $ oc describe cm/worker-fileintegrity

2.3.4. 기본 File Integrity Operator 구성 이해

다음은 구성 맵의 aide.conf 키에서 발췌한 것입니다.

@@define DBDIR /hostroot/etc/kubernetes
@@define LOGDIR /hostroot/etc/kubernetes
database=file:@@{DBDIR}/aide.db.gz
database_out=file:@@{DBDIR}/aide.db.gz
gzip_dbout=yes
verbose=5
report_url=file:@@{LOGDIR}/aide.log
report_url=stdout
PERMS = p+u+g+acl+selinux+xattrs
CONTENT_EX = sha512+ftype+p+u+g+n+acl+selinux+xattrs

/hostroot/boot/    	CONTENT_EX
/hostroot/root/\..* PERMS
/hostroot/root/   CONTENT_EX

FileIntegrity 인스턴스의 기본 구성은 다음 디렉터리의 파일에 대한 적용 범위를 제공합니다.

  • /root
  • /boot
  • /usr
  • /etc

다음 디렉터리에는 적용되지 않습니다.

  • /var
  • /opt
  • /etc/ 아래의 일부 OpenShift 관련 디렉터리는 제외됩니다.

2.3.5. 사용자 정의 AIDE 구성 제공

DBDIR, LOGDIR, database, database_out과 같은 AIDE 내부 동작을 구성하는 모든 항목을 Operator에서 덮어씁니다. Operator는 무결성 변경을 확인할 모든 경로 앞에 /hostroot/ 접두사를 추가합니다. 그러면 대부분 컨테이너화된 환경에 맞게 조정되지 않고 루트 디렉터리에서 더 쉽게 시작할 수 있는 기존 AIDE 구성이 재사용됩니다.

참고

/hostroot는 AIDE를 실행하는 Pod에서 호스트의 파일 시스템을 마운트하는 디렉터리입니다. 구성을 변경하면 데이터베이스가 다시 초기화됩니다.

2.3.6. 사용자 정의 File Integrity Operator 구성 정의

이 예제에서는 worker-fileintegrity CR에 제공된 기본 구성을 기반으로 마스터 노드에서 실행되는 스캐너의 사용자 정의 구성을 정의하는 데 중점을 둡니다. 이 워크플로는 데몬 세트로 실행되는 사용자 정의 소프트웨어를 배포하고 마스터 노드의 /opt/mydaemon에 데이터를 저장하려는 경우 유용할 수 있습니다.

프로세스

  1. 기본 구성을 복사합니다.
  2. 확인 또는 제외해야 하는 파일을 사용하여 기본 구성을 편집합니다.
  3. 편집한 내용을 새 구성 맵에 저장합니다.
  4. spec.config의 특성을 통해 FileIntegrity 오브젝트를 새 구성 맵으로 지정합니다.
  5. 기본 구성을 추출합니다.

    $ oc extract cm/worker-fileintegrity --keys=aide.conf

    그러면 편집할 수 있는 aide.conf라는 파일이 생성됩니다. Operator에서 경로를 후처리하는 방법을 설명하기 위해 이 예제에서는 접두사 없이 제외 디렉터리를 추가합니다.

    $ vim aide.conf

    출력 예

    /hostroot/etc/kubernetes/static-pod-resources
    !/hostroot/etc/kubernetes/aide.*
    !/hostroot/etc/kubernetes/manifests
    !/hostroot/etc/docker/certs.d
    !/hostroot/etc/selinux/targeted
    !/hostroot/etc/openvswitch/conf.db

    마스터 노드 관련 경로를 제외합니다.

    !/opt/mydaemon/

    다른 내용은 /etc에 저장합니다.

    /hostroot/etc/	CONTENT_EX
  6. 이 파일을 기반으로 구성 맵을 생성합니다.

    $ oc create cm master-aide-conf --from-file=aide.conf
  7. 구성 맵을 참조하는 FileIntegrity CR 매니페스트를 정의합니다.

    apiVersion: fileintegrity.openshift.io/v1alpha1
    kind: FileIntegrity
    metadata:
      name: master-fileintegrity
      namespace: openshift-file-integrity
    spec:
      nodeSelector:
          node-role.kubernetes.io/master: ""
      config:
          name: master-aide-conf
          namespace: openshift-file-integrity

    Operator는 제공된 구성 맵 파일을 처리하고 결과를 FileIntegrity 오브젝트와 동일한 이름의 구성 맵에 저장합니다.

    $ oc describe cm/master-fileintegrity | grep /opt/mydaemon

    출력 예

    !/hostroot/opt/mydaemon

2.3.7. 사용자 정의 파일 무결성 구성 변경

파일 무결성 구성을 변경하려면 생성된 구성 맵을 변경하지 마십시오. 대신 spec.name, namespace, key 특성을 통해 FileIntegrity 오브젝트에 연결된 구성 맵을 변경하십시오.

현재는 오브젝트와 해당 구성 맵을 강제로 조정하기 위해 FileIntegrity 오브젝트에도 주석을 달아야 합니다. 예를 들면 다음과 같습니다.

$ oc annotate fileintegrities/worker-fileintegrity file-integrity.openshift.io/config-version=2

주석의 값 또는 주석인지의 여부는 실제로 중요하지 않습니다. 이 작업의 목적은 FileIntegrity 오브젝트를 강제로 조정하고 생성 된 구성으로 처리된 구성 맵을 다시 렌더링하는 것입니다.