: NiFi 서버에 로그인 화면을 적용하기 위해서는 SSL 연동이 필수이다. 현재(2020년 5월 12일 기준) EC2에 생성된 NiFi 서버의 SSL 인증서는 Self Signed Certificate을 사용하였으며, OpenSSL 툴을 사용하지 않고 좀 더 빠르게 Self Signed Certificate을 생성하기 위해 TinyCert(https://www.tinycert.org/)를 이용하였다.

(1) 인증서 생성 : NiFi 서버에 SSL 설정을 하기 위해서는 먼저 TinyCert 에서 CA 인증서와 서버 인증서를 생성 및 다운로드해야하는데 절차는 다음과 같다.

a. TinyCert에 접속하여 먼저 Sing Up을 한다. Email Address와 Password, Passphrase를 입력 해야 하는데 Passphrase는 서버 인증서를 NiFi 서버에 구성할때 필요하므로 기억을 해야한다.

b. TinyCert에 로그인이 된 상태에서 아래 (그림 1. CA 생성)에서와 같이 메인 화면에서 CA 인증서를 생성한다.

(그림 1. CA 생성)

1) "Create" 버튼을 클릭하여 CA 인증서를 생성한다. CA 인증서 항목은 적절하게 입력해주면 된다.

 

c. 서버 인증서 생성

(그림2. 서버 인증서 생성)

1) "Create" 버튼을 클릭해서 서버 인증서를 생성한다. 서버 인증서 항목은 적절하게 입력해주면 된다.

 

d. CA 다운로드

(그림3. CA 다운로드)

1) "다운로드" 버튼을 클릭해서 CA 인증서를 다운로드한다.

 

e. 서버 인증서 다운로드

(그림 4.1. 생성된 서버 인증서 목록)

1) 생성된 서버 인증서 목록을 클릭한다.

 

(그림 4.2. 생성된 서버 인증서 상세)

1) "다운로드" 버튼을 클릭해서 서버 인증서를 다운로드 버튼을 클릭한다.

2) 서버 인증서 타입을 "PKCS#12 Archive" 타입으로 선택하면 서버 인증서가 다운로드 된다. 

 

(2) NiFi 서버에 인증서 업로드 : 로컬 PC에 다운로드 받은 CA 인증서와 서버 인증서를 AWS EC2에 설치된 NiFi 서버쪽으로 업로드를 해야하는데 이를 위해서는 EC2 인스턴스에 해당하는 Private Key가 필요하다. Private Key는 개발 담당자(2020년 5월 12일 기준: 황정식)에게 문의한다. 아래 링크의 문서를 참조해서 다운로드 받은 CA 인증서와 서버 인증서를 NiFi 서버쪽으로 업로드한다.

a. SCP 파일 전송 관련 문서 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html

b. 현재(2020년 5월 12일 기준) 업로드된 CA 인증서와 서버 인증서의 디렉토리 경로는 (그림 5. CA 인증서와 서버 인증서의 디렉토리 경로)와 같다.

(그림 5. CA 인증서와 서버 인증서의 디렉토리 경로)

1) CA 인증서와 서버 인증서가 위치한 디렉토리 경로이다.

2) 로컬 PC에서 업로드 된 CA 인증서이다.

3) 로컬 PC에서 업로드 된 서버 인증서이다.

(3) Truststore 생성 :  NiFi 서버는 SSL 설정을 위해서 서버 인증서와 추가적으로 Truststore를 생성해야하는데 Truststore는 로컬 PC에서 업로드한 CA 인증서를 이용해서 (그림 6. Truststore 생성)과 같이 생성할 수 있다.

(그림 6. Truststore 생성)

1) <ca_file> 부분은 로컬 PC에서 업로드한 CA 인증서 파일명이며, <password>에는 패스워드를 입력하면 된다. 설정된 패스워드에 대해서는 개발 담당자(2020년 5월 12일 기준: 황정식)에게 문의한다.

(4) nifi.properties 설정 : nifi.properties 파일을 열어서 SSL 포트, KeyStore, Truststore 설정을 해준다.

a. HTTPS 설정 : NiFi 서버는 http와 https를 동시에 운용할 수 없기때문에 (그림7.1. HTTPS 설정)과 같이 프로퍼티 값을 수정한다.

(그림 7.1. HTTPS 설정)

1) "nifi.remote.input.secure" 프로퍼티의 값을 "true"로 수정한다.

2) "nifi.remote.input.http.enabled" 프로퍼티의 값을 "false"로 수정한다.

3) "nifi.web.https.port" 프로퍼티의 값을 "9443"으로 수정한다. NiFi의 https 디폴트 포트는 9443이다.

4) 그림 7.1에는 빨간 박스로 표시 되어 있지만 "nifi.web.https.host" 프로퍼티의 값으로 NiFi 서버와 매핑된 도메인을 입력해야지만 다음 글에서 설명하는 OpenID Connect 방식의 로그인을 사용할 수 있다.

b. KeyStore 및 Truststore 설정: CA 인증서를 이용해서 생성한 Truststore와 서버 인증서 설정을 (그림 7.2. KeyStore 및 Truststore 설정)과 같이 추가한다.

(그림 7.2. KeyStore 및 Truststore 설정)

1) "nifi.security.keystore" 프로퍼티의 값으로 서버 인증서의 경로를 입력한다.

2) "nifi.security.keystoreType" 프로퍼티의 값으로 "PKCS12"를 입력한다.

3) "nifi.security.keystorePasswd" 프로퍼티의 값으로 TinyCert에서 Sign up 시, 등록한 passphrase 값을 입력한다.

4) "nifi.security.truststore" 프로퍼티의 값으로 CA 인증서를 이용해서 생성한 Truststore의 경로를 입력한다.

5) "nifi.security.truststoreType" 프로퍼티의 값으로 "JKS"를 입력한다.

6) "nifi.security.truststorePasswd" 프로퍼티의 값으로 Truststore를 생성할 때 설정한 패스워드를 입력한다.

(5) hosts 파일 설정 : NiFi 서버에 접속하는 사용자는 (6)에서 설명할 도메인을 통해서 NiFi 서버에 접속을 할 수 있는데, 이 도메인은 EC2에서 추가한 외부 IP인 탄력적 IP와 매핑이 되어 있다. 하지만 NiFi 서버 입장에서는 EC2 인스턴스 내부 IP와 매핑이 되어야하므로 hosts 파일에 매핑 정보를 추가해주어야 한다. 

a. hosts 파일의 경로 : /etc/hosts

b. 내부 IP는 "hostname -I" 명령어로 확인 가능하며, NiFi 서버가 설치된 EC2 인스턴스의 내부 IP는 "172.31.34.156" 이다.

b. (그림 8. 도메인과 내부 IP 매핑 정보)와 같이 매핑 정보를 추가해준다.

1) EC2 인스턴스의 내부 IP와 도메인 매핑 정보를 hosts 파일에 추가한다.

(6) 접속 테스트

a. nifi.sh 명령을 사용해 NiFi 서버를 가동 시킨다. nifi.sh 전체 명령어는 아래와 같다.

 ubuntu@ip:~/app/nifi-1.11.4$ pwd
/home/ubuntu/app/nifi-1.11.4
ubuntu@ip:~/app/nifi-1.11.4$ bin/nifi.sh start

 

b. 아래 주소로 접속을 해본다.

https://도메인:9443/nifi

1) NiFi 서버쪽에 정상적으로 접속이 되지 않는 이유는 NiFi 서버는 SSL 설정이 완료되면 추가적으로 로그인 설정을 해주어야 한다. 접속 시, 발생하는 에러는 SSL 설정은 되어 있으나 로그인 설정이 되어 있지 않았기때문에 발생하는 에러이다.

다음 글에서는 NiFi 로그인 인증 방식중에 하나인 OpenID Connect 설정을 해보겠습니다.

'Open source > Apache NiFi' 카테고리의 다른 글

OpenID Connect 방식의 로그인 연동  (3) 2021.07.09

+ Recent posts

출처: http://large.tistory.com/23 [Large]