Apache Nifi

AWS ELB 경유 Nifi TLS 구성

비번변경 2021. 5. 29. 09:00
Apache NiFi
NiagaraFiles의 준말. 
소프트웨어 시스템 간 데이터 흐름을 자동화하도록 설계된 아파치 재단의 소프트웨어 프로젝트

 

https로 앞단에 ELB를 두고 있는 Nifi에 접속할 수 있도록 설정하는 방법을 적어둔다.

 

구조

nifi architecture

대략 이런 구조와 트래픽 흐름이라고 생각하면 될 듯하다. 당연히 구조 전체를 표시하진 않았고, 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 구성은 완료한 것이다.

 

이후 사용하는 브라우저에 생성한 인증서를 등록하여 접속 확인을 해보면 된다.

 

 

+ 등록 방법 참고

2021.05.30 - [기타] - Chrome 인증서 등록