Apache NiFi
NiagaraFiles의 준말.
소프트웨어 시스템 간 데이터 흐름을 자동화하도록 설계된 아파치 재단의 소프트웨어 프로젝트
https로 앞단에 ELB를 두고 있는 Nifi에 접속할 수 있도록 설정하는 방법을 적어둔다.
구조
대략 이런 구조와 트래픽 흐름이라고 생각하면 될 듯하다. 당연히 구조 전체를 표시하진 않았고, Nifi 뒷단도 생략했다.
사전 환경
- AWS EC2 Ubuntu
- AWS NLB
- Nifi Standalone 1.8.0
방법
1. Nifi Toolkit 설치
자체 서명 인증서를 생성하는 Toolkit을 설치한다.
nifi 설치 경로의 상위 디렉터리에 설치하도록 한다.
# nifi HOME이 /nifi/home/nifi-1.8.0 인 경우
cd /nifi/home
sudo wget https://archive.apache.org/dist/nifi/1.8.0/nifi-toolkit-1.8.0-bin.tar.gz
tar -xvzf nifi-toolkit-1.8.0-bin.tar.gz
2. 인증서 생성
cd /nifi/home/nifi-toolkit-1.8.0/bin
./tls-toolkit.sh standalone -n 'inlb.elb.ap-northeast-2.amazonaws.com' -c 'inlb.elb.ap-northeast-2.amazonaws.com' -C 'CN=admin, OU=NIFI' -O -o /nifi/home/OUTPUT_toolkit
옵션 설명
- -n : 호스트 이름
- -c : 인증서 발급자 정보. 기본값은 localhost
- -C : 인증서 이름
- -o : 결과 파일 경로
각 옵션의 정확한 정의는 Apache NiFi Toolkit Guide를 참고한다.
인증서 발급자는 서버 IP로 해도 된다.
3. 생성된 파일 중 keystore, truststore를 nifi 설정 경로로 복사
cd /nifi/home/nifi-1.8.0/conf
cp /nifi/home/OUTPUT_toolkit/inlb.elb.ap-northeast-2.amazonaws.com/keystore.jks keystore.jks
cp /nifi/home/OUTPUT_toolkit/inlb.elb.ap-northeast-2.amazonaws.com/truststore.jks truststore.jks
4. nifi.properties 수정
툴킷에 의해 생성된 nifi.properties를 참고하여 conf/properties 파일을 수정한다.
view /nifi/home/OUTPUT_toolkit/
vim /nifi/home/nifi-1.8.0/conf/nifi.properties
수정할 부분
# input.secure, http.enabled 설정
# Site to Site properties
nifi.remote.input.host=
# nifi.remote.input.secure=false
nifi.remote.input.secure=true
nifi.remote.input.socket.port=
nifi.remote.input.http.enabled=true
nifi.remote.input.http.transaction.ttl=30 sec
nifi.remote.contents.cache.expiration=30 secs
# http host 및 port 해제, https host 및 port 설정 #
# web properties #
nifi.web.war.directory=./lib
nifi.web.http.host=
# nifi.web.http.port=8999
nifi.web.http.network.interface.default=
nifi.web.https.host=
# nifi.web.https.port=
nifi.web.https.port=8999
nifi.web.https.network.interface.default=
nifi.web.jetty.working.directory=./work/jetty
nifi.web.jetty.threads=200
nifi.web.max.header.size=16 KB
nifi.web.proxy.context.path=
# inlb 엔드포인트를 프록시로 설정
nifi.web.proxy.host=inlb.elb.ap-northeast-2.amazonaws.com:8999
# keystore 설정
nifi.security.keystore=./conf/keystore.jks
nifi.security.keystoreType=jks
nifi.security.keystorePasswd=PASSWORD
nifi.security.keyPasswd=PASSWORD
# truststore 설정
nifi.security.truststore=./conf/truststore.jks
nifi.security.truststoreType=jks
nifi.security.truststorePasswd=PASSWORD
nifi.security.user.authorizer=managed-authorizer
nifi.security.user.login.identity.provider=
nifi.security.ocsp.responder.url=
nifi.security.ocsp.responder.certificate=
만약 앞단에 LB를 두지 않았다면 proxy 설정은 하지 않아도 된다.
5. authorizers.xml 설정
필요한 경우, 생성한 인증서를 사용해 접속한 사용자가 nifi 관리 권한을 가질 수 있도록 설정한다.
vim /nifi/home/nifi-1.8.0/conf/authorizers.xml
수정 부분
#Initial User Identity 정보에 인증서 이름 등록
<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"></property>-->
<property name="Initial User Identity 1">CN=admin, OU=NIFI</property>
</userGroupProvider>
#Initial Admin Identity 정보에 인증서 이름 등록
<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"></property>-->
<property name="Initial Admin Identity">CN=admin, OU=NIFI</property>
<property name="Legacy Authorized Users File"></property>
<property name="Node Identity 1"></property>
<property name="Node Group"></property>
</accessPolicyProvider>
6. nifi 중지 및 시작
nifi를 시작하여 변경된 설정을 적용한다.
/nifi/home/nifi-1.8.0/bin/nifi.sh stop
/nifi/home/nifi-1.8.0/bin/nifi.sh start
restart 말고 완전히 중지 후 시작하도록 한다. 기분 탓이겠지만 재시작하면 설정이 잘 안 먹는 것 같다.
start 후에는 nifi가 정상적으로 서비스를 시작하는지 log를 확인하는 것이 좋다. 아래 명령어는 start 후 바로 로그를 찍도록 한다.
/nifi/home/nifi-1.8.0/bin/nifi.sh start; tail -f /nifi/home/nifi-1.8.0/logs/nifi-app.log
tail -f /nifi/home/nifi-1.8.0/logs/nifi-bootstrap.log
필요하다면 같은 경로에 있는 nifi-bootstrap.log도 함께 확인한다.
7. nifi 정상 동작 확인
/nifi/home/nifi-1.8.0/bin/nifi.sh status
# 또는
ps -ef | grep nifi
서비스가 정상적으로 올라왔다면 TLS 구성은 완료한 것이다.
이후 사용하는 브라우저에 생성한 인증서를 등록하여 접속 확인을 해보면 된다.
+ 등록 방법 참고