공식 문서 :
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
< 개요 >
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 문서는 부산대학교 컴퓨터 공학과 박근오님께서 작성하심. 굉장히 오래되어 보이긴 함.
추가 설명 : 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 적용하려면 아래 링크 참고
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
참고
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://bryanbende.com/development/2016/08/17/apache-nifi-1-0-0-authorization-and-multi-tenancy
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
'NiFi' 카테고리의 다른 글
[NiFi] Docker NiFi Cluster 에 security 적용하는 방법(TLS) (0) | 2021.03.02 |
---|---|
[NiFi] Toolkit Guide 공부 필기 (0) | 2021.02.19 |
[NiFi] Attribute 에 Counter 만들기 (0) | 2021.02.05 |
[NiFi] Elasticsearch 와 연동하는 flow 작성 (0) | 2021.02.04 |
[NiFi] 처음 flow 생성시 도움되는 참고 링크(영어) (0) | 2021.02.04 |