이 글은 Apache NiFi의 기본설치방법에 대해 설명한다.
- OS : CentOS 7.3 64bit
- Apache Nifi : 1.13.2
※ 테스트용(http,익명사용자 모드) 으로 사용시에는 4~6작업은 생략해도 됨.
- NiFi 1.14.0버전부터는 default로 (https, single user login) 으로 변경됨.(9작업으로 이동)
- http(익명사용자모드)는 conf/nifi.properties 파일을 수정하면 가능함.
- root 계정으로 접속
- nifi 계정 생성
$ groupadd nifi
$ useradd -g nifi nifi
$ passwd nifi
- nifi 계정으로 재접속
$ tar -xzvf jdk-11.0.11_linux-x64_bin.tar.gz
$ vi .bash_profile
export JAVA_HOME=/home/nifi/jdk-11.0.11
PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
$ . .bash_profile
$ java -version
3. Apache NiFi 사이트(https://nifi.apache.org/download.html) 에 접속하여 nifi 및 toolkit Binary파일을 다운로드하고 압축을 해제한다.
$ wget https://mirror.navercorp.com/apache/nifi/1.13.2/nifi-1.13.2-bin.tar.gz
$ wget https://mirror.navercorp.com/apache/nifi/1.13.2/nifi-toolkit-1.13.2-bin.tar.gz
$ tar -xzvf nifi-1.13.2-bin.tar.gz
$ tar -xzvf nifi-toolkit-1.13.2-bin.tar.gz
$ {toolkit 설치 디렉토리}/bin/tls-toolkit.sh -n '호스트명' -C '클라이언트 정보' -o 'output 경로'
-n : 서버인증서 호스트명
-C : 관리자/사용자로 사용할 클라이언트 인증서 정보
-o : output 경로
ex> ./bin/tls-toolket.sh standalone -n 'winiot.w[01-07](2)' -C 'CN=admin, OU=winiot' -o './target'
$ cp {toolkit 설치 디렉토리}/target/{host명}/* {NiFi 설치 디렉토리}/conf/
- userGroupProvider 수정
<userGroupProvider>
<identifier>file-user-group-provider</identifier>
<class>org.apache.nifi.authorization.FileUserGroupProvider</class>
<property name="Users File">./conf/users.xml</property>
<property name="Legacy Authorized Users File"></property>
<property name="Initial User Identity 1">CN=admin, OU=winiot</property> // 관리자용 클라이언트 인증서 정보
<property name="Initial User Identity 2">CN={호스트명}, OU=NIFI</property> // 서버 인증서 정보
</userGroupProvider>
- accessPolicyProvider 수정
<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">./conf/authorizations.xml</property>
<property name="Initial Admin Identity">CN=admin, OU=winiot</property> // 관리자용 클라이언트 정보
<property name="Legacy Authorized Users File"></property>
<property name="Node Identity 1">CN={호스트명}, OU=NIFI</property> // 서버 인증서 정보
<property name="Node Group"></property>
</accessPolicyProvider>
- 실행
- foreground
$ {NiFi 설치 디렉토리}/bin/nifi.sh run
- background
$ {NiFi 설치 디렉토리}/bin/nifi.sh start
- 정지
- foreground
Ctrl-c를 입력
- background
$ {NiFi 설치 디렉토리}/bin/nifi.sh stop
- invalid host header 장애
- 원인: NiFi가 https로 실행되는 경우 바인딩 된 host[:port]와 일치하는 Host헤더가 있는 HTTP요청만 허용한다.
다른 host[:port]로 향하는 요청(프록시, 컨테이너환경 등)을 수락하려면 해당 설정을 수정해야 한다. - 해결방안: nifi.properties 수정
nifi.web.proxy.host = host:port
- 원인: NiFi가 https로 실행되는 경우 바인딩 된 host[:port]와 일치하는 Host헤더가 있는 HTTP요청만 허용한다.
-
Apache NiFi 1.14.0의 주요개선사항 중 하나는 기본구성에 대한 보안 활성화이다. 즉, 이제 기본 구성으로 NiFi를 실행하기만하면 로컬 인스턴스가 https로 접속하여 사용자 이름과 비밀번호를 통해 로그인할 수 있는 환경으로 실행된다. (NIFI-8220)
- the default web host and port have been switched to the https values
- automatic generation of a self-signed certificate and nifi.properties will be updated with the passwords.
- Single User Login Identity Provider
- Single User Authorizer
-
Username/Password는 랜덤 값으로 생성되며, log/nifi-app.log에서 확인가능
$ grep Generated logs/nifi-app*log Generated Username [USERNAME] Generated Password [PASSWORD] - 아래 명령어도 Username/Password 변경가능 $ ./bin/nifi.sh set-single-user-credentials <username> <password>
- https://nifi.apache.org/docs/nifi-docs/html/toolkit-guide.html#tls_toolkit
- https://bryanbende.com/development/2016/08/30/apache-nifi-1.0.0-secure-site-to-site
- https://bryanbende.com/development/2016/08/17/apache-nifi-1-0-0-authorization-and-multi-tenancy
- 일반유저 sudo권한추가 (https://info-lab.tistory.com/163)