Taaewoo
Data Engineering Blog
Taaewoo
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Computer Science (16)
      • Algorithm (6)
      • OS (1)
      • Java (2)
      • C++ (6)
      • Python (1)
    • Hadoop Ecosystem (27)
      • Hadoop (6)
      • Spark (5)
      • NiFi (6)
      • Hive (9)
      • Kafka (1)
    • BigData Engineering (14)
      • Jupyter (1)
      • Docker (3)
      • CDH (3)
      • Riot Data Pipeline (7)
    • Back-end 개발 (0)
      • Spring (0)
    • Algorithm 문제 풀이 (9)
      • 백준 (5)
      • LeetCode (4)
    • Conference (1)
      • LINE DEVELOPER DAY 2021 (1)
      • if(kakao) 2021 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Coding
  • kafka
  • 코딩
  • hadoop
  • java
  • NiFi
  • C++
  • 알고리즘
  • Hive
  • hdfs
  • sort
  • 정렬
  • BigData
  • algorithm
  • metastore
  • 프로그래밍
  • docker
  • 빅데이터
  • spark
  • CS

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Taaewoo

Data Engineering Blog

[NiFi] Untrusted proxy 및 UninheritableFlowException 에러 해결 방법
Hadoop Ecosystem/NiFi

[NiFi] Untrusted proxy 및 UninheritableFlowException 에러 해결 방법

2022. 5. 22. 04:23

 NiFi를 사용하면서 UninheritableFlowException 에러를 해결했던 방법을 공유하겠습니다. 참고로 제가 테스트 했던 NiFi는 File 기반의 유저 인증 방식을 사용했다는 점 참고 바랍니다.( FileUserGroupProvider )

 

문제 상황 & 분석 과정

 

 해당 에러는 NiFi 노드 증설 시 발생했던 에러입니다. 신규 노드에 대해서 서버 작업을 모두 완료한 뒤 NiFi 설치를 완료했습니다. 그리고 이후에 NiFi 관련 설정 파일을 수정했습니다.

    - File authorizers.xml
    - 수정한 내용  <userGroupProvider>, <accessPolicyProvide> 항목에 신규 노드 정보 추가
    - 관련 참고 링크
https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#multi-tenant-authorization
authorizers.xml
<authorziers>
    <userGroupProvider>
        <identifier>file-user-group-provider</identifier>
        <class>org.apache.nifi.authorization.FileUserGroupProvider</class>
        <property name="Users File">/var/lib/nifi/conf/users.xml</property> 
        <property name="Legacy Authorized Users File"> </property> 
        <property name="Initial User Identity 0">admin</property> 
        <property name="Initial User Identity 1">CN=NiFi_Server1_FQDN</property> 
        <property name="Initial User Identity 2">CN=NiFi_Server2_FQDN</property> 
        <property name="Initial User Identity 3">CN=NiFi_Server3_FQDN</property>
        <property name="Initial User Identity 4">CN=NiFi_Server4_FQDN</property> 
        <property name="Initial User Identity 5">CN=NiFi_Server5_FQDN</property> 
        <property name="Initial User Identity 6">CN=NiFi_Server6_FQDN</property> 
    </userGroupProvider>
    <accessPolicyProvider>
        <identifier>file-access-policy-provider</identifier>
        <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class>
        <property name="User Group Provider">file-user-group-provider</property> 
        <property name="Authorizations File">/var/lib/nifi/conf/authorizations.xml</property> 
        <property name="Initial Admin Identity">admin</property> 
        <property name="Legacy Authorized Users File"></property> 
        <property name="Initial User Identity 1">CN=NiFi_Server1_FQDN</property> 
        <property name="Initial User Identity 2">CN=NiFi_Server2_FQDN</property> 
        <property name="Initial User Identity 3">CN=NiFi_Server3_FQDN</property>
        <property name="Initial User Identity 4">CN=NiFi_Server4_FQDN</property> 
        <property name="Initial User Identity 5">CN=NiFi_Server5_FQDN</property> 
        <property name="Initial User Identity 6">CN=NiFi_Server6_FQDN</property> 
    </accessPolicyProvider>
    <authorizer>
        <identifier>file-provider</identifier>
        <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class>
        <property name="Access Policy Provider">file-access-policy-provider</property>
    </authorizer>
</authorizers>

 

 

 하지만 신규 노드 정보를 위 파일에 입력했음에도 불구하고 NiFi는 신규 노드를 인식하지 못했습니다. ( NiFi webserver에는 접속 가능하지만 이후 과정 이용 불가 )

    - NiFi web UI 에러 Untrusted proxy CN={ Node name }
    - nifi-app.log
  org.apache.nifi.controller.UninheritableFlowException: Failed to connect node to cluster because local flow is different than cluster flow.
....
  Caused by: org.apache.nifi.controller.UninheritableFlowException: Proposed Authorizer is not inheritable by the flow controller because of Authorizer differences: Proposed Authorizations do not match current Authorizations: Proposed fingerprint is not inheritable because the current access policies is not empty.
....

 

분석 및 해결 과정

 

 nifi-app.log에 적혀있는 UninheritableFlowException에 대해 찾아봤습니다. 해당 에러는 NiFi의 모든 노드가 동일한 "flow.xml.gz" 파일을 가지고 있지 않을 때 발생하는 에러였습니다. "flow.xml.gz" 파일은 NiFi Web UI에서 여러 Processor를 생성한 Canvas의 정보를 담고 있습니다. NiFi의 모든 노드는 동일한 Web UI를 제공하기 때문에 "flow.xml.gz" 파일이 한 노드에서라도 다르다면 에러가 발생합니다. 그래서 기존 노드에 존재하던 "flow.xml.gz" 파일을 신규 노드에 모두 배포를 해줬습니다.

    - File flow.xml.gz
    - 경로 /var/lib/nifi/conf
    - 작업
기존 노드의 파일을 신규 노드에 모두 배포

 

 

 그리고 위의 NiFi Web에서 발생하는 에러를 봤을 때 "authorizers.xml" 파일에 기입한 신규 노드 정보가 제대로 반영되지 않았을 거라고 생각했습니다. 그래서 NiFi가 노드 정보들을 어떻게 인식하는지 알아봤습니다. NiFi 노드의 정보들이 담겨있는 파일들을 찾을 수 있었습니다. 해당 파일들은 "flog.xml.gz"와 같은 경로에 존재하던 파일들로 "users.xml", "authorizations.xml" 두 파일들이었습니다. 두 파일을 확인하니 기존 노드들의 정보들만 존재했고, 신규 노드를 추가하려고 했지만, 노드마다 상당히 긴 키 값이 존재했습니다. 그래서 두 파일 모두 사용자가 직접 생성해주는 것이 아닌 NiFi가 "authorizers.xml"의 내용을 토대로 자동으로 생성해준다는 것을 알 수 있었습니다. 자동으로 생성될 파일들이니 사전에 백업을 해두고 삭제를 했습니다. 결과적으로 NiFi를 실행했을 때 두 파일은 모두 새롭게 생성되었고, 신규 노드의 정보들도 모두 기입이 되어있었습니다. 

authorizers.xml
......
    <userGroupProvider>
        ......
        <property name="Users File">/var/lib/nifi/conf/users.xml</property> 
        ......
    </userGroupProvider>
    <accessPolicyProvider>
        ......
        <property name="Authorizations File">/var/lib/nifi/conf/authorizations.xml</property> 
        ......
    </accessPolicyProvider>
......

    - File users.xml, authorizations.xml
    - 경로 /var/lib/nifi/conf
    - 작업
백업 후 삭제하고, NiFi 재실행

 문제들을 위의 방법대로 적용하니 NiFi는 정상적으로 기동이 되었고, 모든 서비스를 다시 사용할 수 있었습니다. 하지만 주의해야할 점으로는, "authorizations.xml" 파일을 지우고 재생성 시키기 때문에 기존에 명시해놨던 policy는 모두 초기화가 됩니다. 클러스터로써 분산 환경에서 NiFi를 이용하려면 필요한 policy들을 모두 재등록 해야한다는 점 꼭 주의하시기 바랍니다.

저작자표시 비영리 (새창열림)

'Hadoop Ecosystem > NiFi' 카테고리의 다른 글

[NiFi] Json 데이터의 동적 크기 Array 전처리하기 (Base64 decoding)  (1) 2022.09.21
[NiFi] Docker & NiFi 클러스터 환경에서 HDFS 데이터 분산 수집하기  (0) 2022.02.12
[NiFi] Docker로 NiFi 클러스터 구성하기  (0) 2022.01.31
[NiFi] Docker & NiFi로 HDFS 데이터 수집하기  (0) 2021.11.17
[NiFi] NiFi의 핵심 개념 및 아키텍쳐  (0) 2021.11.17
    'Hadoop Ecosystem/NiFi' 카테고리의 다른 글
    • [NiFi] Json 데이터의 동적 크기 Array 전처리하기 (Base64 decoding)
    • [NiFi] Docker & NiFi 클러스터 환경에서 HDFS 데이터 분산 수집하기
    • [NiFi] Docker로 NiFi 클러스터 구성하기
    • [NiFi] Docker & NiFi로 HDFS 데이터 수집하기
    Taaewoo
    Taaewoo

    티스토리툴바