공식 문서 :

nifi.apache.org/docs/nifi-docs/html/administration-guide.html#security_configuration

nifi.apache.org/docs/nifi-docs/html/walkthroughs.html#securing-nifi-with-tls

nifi.apache.org/docs/nifi-docs/html/walkthroughs.html#creating-and-securing-a-nifi-cluster-with-the-tls-toolkit

 

 

< 개요 >

 

Apache NiFi 가 기본 설정값으로 설치되었다면, NiFi WebUI 에는 누구나 접근이 가능하기 때문에,

TLS(Transport Layer Security) 를 적용하여 인증서가 있는 사용자만 https 를 통해 접근할 수 있도록 한다.

여기서는 Standalone NiFi 를 기준으로 설명한다.

Cluster NiFI 에 대한 내용은 해당 문서 참고

 

< 구체적인 절차 >

 

아래부터 nifi 를 다운받고 설치할 디렉터리를 $NIFI_HOME 이라고 한다.

JAVA 가 설치되어있고, JAVA_HOME 이 설정되어 있어야 한다.

 

NiFi 와 NiFi toolkit 을 다운받는다. 링크 : https://nifi.apache.org/download.html

$NIFI_HOME 에 nifi-1.12.1-bin.tar.gz  nifi-toolkit-1.12.1-bin.tar.gz 를 받으면 된다.

 

 

 

아래 명령으로 압축 해제

tar zxvf nifi-1.12.1-bin.tar.gz

tar zxvf nifi-toolkit-1.12.1-bin.tar.gz

 

 

아래 위치로 이동

cd $NIFI_HOME/nifi-toolkit-1.12.1/bin

 

 

 

toolkit 을 사용하여 인증서를 생성한다.

./tls-toolkit.sh standalone -n 'localhost' -C 'CN=eye, OU=nifi' -O -o $NIFI_HOME/nifi-1.12.1/conf

반드시 CN 과 OU 사이에는 공백이 존재해야 한다.

참고로 ./tls-toolkit.sh standalone -h 명령을 통해 도움말을 볼 수 있다.

CN, OU... 등은 LDAP 엔트리라고 하는데, 자세한 설명은 여기서 하지 않고 아래 링크들 참고

CN 은 common name, OU 는 organization unit 을 의미한다.

 

여기서 LDAP 란, Lightweight Directory Access Protocol 의 약어임.

LDAP NiFi 문서 : nifi.apache.org/docs/nifi-docs/html/administration-guide.html#ldap_login_identity_provider

LDAP 설명 : jabcholove.tistory.com/89

ldap.pdf
3.90MB

위에 ldap.pdf 문서는 부산대학교 컴퓨터 공학과 박근오님께서 작성하심. 굉장히 오래되어 보이긴 함.

추가 설명 : m.blog.naver.com/nahaeya100/140122278976

ldap.or.kr/ldap-%EC%9D%B4%EB%9E%80/

 

 

 

 

 

아래 위치로 이동

cd $NIFI_HOME/nifi-1.12.1/conf

 

 

localhost 라는 폴더가 생성된 것을 볼 수 있는데, 내부에는 keystore.jks, truststore.jks, 그리고 https 세팅이 되어있는 nifi.properties 가 들어있다.

아래 명령어를 사용하여 jks 를 바깥($NIFI_HOME/nifi-1.12.1/conf)으로 내보낸다.

 

cp localhost/*jks .

 

localhost 내부의 nifi.properties 가 갖는 https 옵션값들을 바깥($NIFI_HOME/nifi-1.12.1/conf) 에 존재하는 nifi.properties 에 적용한다.

 

cp 등의 명령어를 통해 덮어쓰게되면 https 세팅에 관련된 값들을 제외한 부분들까지 덮어쓰게 되므로, NiFi 에 여러 옵션이 추가되어있는 상태라면 diff 등을 사용하여 https 세팅 관련된 부분만 옮기도록 한다.

 

 

 

authorizers.xml 의 내부를 다음과 같이 업데이트한다.

아래서 말하는 Initial Admin Identity 는 NiFi 인스턴스에 언제든 접근이 가능하고, WebUI 혹은 API(예를 들면 cli)을 통해 user 및 group 권한을 수정할 수 있는 사용자 ID를 의미한다.

 

userGroupProvider : Initial User Identity 1 : 52번째 줄

accessPolicyProvider : Initial Admin Identity : 282번째 줄

 

authorizer : Initial Admin Identity : 338번째 줄 (주석 해제해야 함)

공식 문서를 보면 가장 마지막 authorizer 는 채워넣지 않아도 되는 듯.

 

 

 

아래 명령어를 통해 nifi 를 시작하고, log 를 살펴본다.

 

../bin/nifi.sh start ; tail -f ../logs/nifi-app.log

 

로그에서 다음과 같이 JettyServer 의 주소가 뜨면 된다.

 

 

 

 

인터넷 브라우저의 설정에 들어가서 인증서 부분을 찾는다.

해당 문서에서는 FireFox 를 사용한다.

FireFox 에서는 개인 정보 및 보안 부분에서 찾을 수 있다.

 

 

인증서 보기(C) 를 누른 후, 개인 인증서 탭에서 가져오기(M) 를 선택한다.

 

 

인증서는 $NIFI_HOME/nifi-1.12.1/conf 에 있는 CN=eye_OU=nifi.p12 를 선택한다.

 

 

비밀번호를 요구하면 $NIFI_HOME/nifi-1.12.1/conf 에 있는

CN=eye_OU=nifi.password 내의 값을 비밀번호로 넣는다.

(cat 이나 vi 등을 사용하여 보면 된다.)

 

추가한 후 확인을 누른다.

 

 

인터넷 브라우저에서 https://localhost:9443/nifi/ 에 접근한다.

9443 인 이유는 http 가 아니라 https 의 port number 이기 때문
개인 인증서 요청창이 뜨면, 아까 추가했던 인증서를 선택하고 확인을 누른다.

 

 

보안 위험 가능성 화면이 뜨면, 고급을 누르고 위험을 감수하고 계속 진행을 누른다.

 

 

https 를 이용하여 NiFi 에 접근하였다.

아래 이미지에서 오른쪽 상단에 우리가 직접 만든 DN(distinguished name) 이 보인다.

 

 

 

 

 

 

모종의 이유로 user 접근 이슈가 생긴다면

authorizations.xml, users.xml 를 지우고 nifi 를 재실행하라는 글을 어디선가 봤음..

 

 

 

 

클러스터에서 TLS 적용하려면 아래 링크 참고

nifi.apache.org/docs/nifi-docs/html/walkthroughs.html#creating-and-securing-a-nifi-cluster-with-the-tls-toolkit

pierrevillard.com/2016/11/29/apache-nifi-1-1-0-secured-cluster-setup/

 

Kerberos 를 사용하는 방법은 아래 링크 참고

gist.github.com/cheerupdi/3d3e828a0052c47e82c603960a05d981

 

OIDC(OpenId Connect) 를 사용하는 방법은 아래 링크 참고

bryanbende.com/development/2017/10/03/apache-nifi-openid-connect

pierrevillard.com/tag/oidc/

 

 

 

 

 

 

 

 

 

참고

https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#authorizer-configuration

https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#tls_generation_toolkit 

https://nifi.apache.org/docs/nifi-docs/html/walkthroughs.html#securing-nifi-with-tls 

https://nifi.apache.org/docs/nifi-docs/html/toolkit-guide.html#tls_toolkit 

https://bryanbende.com/development/2018/10/23/apache-nifi-secure-cluster-setup

https://www.batchiq.com/nifi-configuring-ssl-auth.html 

https://community.cloudera.com/t5/Community-Articles/Using-the-TLS-Toolkit-to-simplify-security/ta-p/247531

https://bryanbende.com/development/2016/08/17/apache-nifi-1-0-0-authorization-and-multi-tenancy 

http://apache-nifi-users-list.2361937.n4.nabble.com/Unable-to-login-to-secured-nifi-cluster-via-UI-td7975.html

http://mail-archives.apache.org/mod_mbox/nifi-users/201803.mbox/%3C4034DCCA-1779-4B66-BC44-0C230BC86895@apache.org%3E

https://travel-nomad.tistory.com/22 

http://www.gaudreault.ca/nifi-kerberize-ssl/

gist.github.com/cheerupdi/6e4f5b9bc77ee491ceb81e2f6a42725a

www.youtube.com/watch?v=DSO12fhnZ90

www.youtube.com/watch?v=7DM1ZuWmcAQ

 

 

+ Recent posts