CFM 4 / NiFi 2.x에서 Copy & Paste가 안 되는 이유
HTTP 기반 Non-Secure NiFi에서 복사·붙여넣기가 막히는 건 권한 문제가 아니라 브라우저 Secure Context 제한입니다. 원인과 두 가지 해결책을 정리합니다.
Cloudera CFM 4 환경에서 NiFi UI의 Copy / Paste 기능이 동작하지 않는 현상이 보고되곤 합니다. 처음에는 대부분 NiFi 권한 설정을 의심하지만, 실제 원인은 NiFi 바깥에 있습니다.
결론부터 말하면 NiFi 2.x가 사용하는 브라우저 Clipboard API가 Secure Context(HTTPS)에서만 허용되기 때문입니다. 다음처럼 HTTP로 접속하는 Non-Secure 환경에서 주로 발생합니다.
http://node3.cfm4.lab.data-dynamics.io:8080NiFi 권한 문제가 아닌 이유
Non-Secure NiFi Cluster는 Authentication과 Authorization을 아예 수행하지 않습니다. 사용자 권한으로 UI 작업이 제한되는 구조 자체가 없다는 뜻입니다. 따라서 아래 항목들은 이 현상의 원인 후보에서 제외됩니다.
- User Authentication
- User Authorization
- Access Policy
- Processor 또는 Process Group 권한
즉 NiFi 설정 문제가 아니라 브라우저 측 보안 정책이 원인입니다.
NiFi 2.x의 Clipboard 동작 방식
CFM 4에 포함된 NiFi 2.x는 Copy / Paste를 처리하기 위해 브라우저의 Clipboard API를 사용합니다.
navigator.clipboardNiFi UI에서 Copy를 수행하면 내부적으로 이 API를 통해 데이터가 브라우저 Clipboard에 저장됩니다.
브라우저 Secure Context 제한
Chrome을 비롯한 최신 브라우저는 navigator.clipboard를 보안상의 이유로 Secure Context에서만 사용하도록 제한합니다. 일반적으로 HTTPS로 접속한 페이지가 Secure Context로 간주됩니다.
| URL | Secure Context |
|---|---|
https://nifi.example.com | Yes |
http://nifi.example.com:8080 | No |
따라서 HTTP 기반 NiFi에 접속하면 브라우저가 Clipboard API 사용을 차단할 수 있습니다.
접속 방식별 동작
| NiFi 접속 방식 | Secure Context | Clipboard API | Copy / Paste |
|---|---|---|---|
https://nifi.example.com | Yes | 사용 가능 | 정상 |
http://localhost:8080 | 브라우저 예외 처리 가능 | 사용 가능할 수 있음 | 정상 가능 |
http://hostname:8080 | No | 제한 | 실패 가능 |
http://IP:8080 | No | 제한 | 실패 가능 |
localhost는 브라우저가 예외적으로 Secure Context에 준하여 취급하므로, 같은 NiFi라도 로컬에서 접속하면 멀쩡해 보이는 함정이 있습니다.
해결 방법 1 — Chrome에서 HTTP Origin을 Secure로 강제
테스트·개발 환경에서는 Chrome 설정으로 특정 HTTP URL을 Secure Context로 취급하게 만들 수 있습니다. Cloudera 측에서도 테스트 환경에서 이 설정으로 Copy / Paste가 정상 동작함을 확인했습니다.
1. Chrome Flags 페이지 접속
주소창에 다음을 입력합니다.
chrome://flags/#unsafely-treat-insecure-origin-as-secure2. Insecure origins treated as secure 활성화
Insecure origins treated as secure 항목을 찾아 값을 Enabled로 변경합니다.
3. NiFi URL 등록
설정 항목의 텍스트 박스에 NiFi URL을 입력합니다.
http://node3.cfm4.lab.data-dynamics.io:8080브라우저는 URL이 아니라 Origin 단위로 처리합니다. Origin은 Protocol + Host + Port의 조합입니다.
| 요소 | 값 |
|---|---|
| Protocol | http |
| Host | node3.cfm4.lab.data-dynamics.io |
| Port | 8080 |
4. Cluster의 여러 Node에 직접 접속하는 경우
NiFi Cluster의 각 Node URL로 직접 접속해야 한다면 Origin을 각각 등록해야 합니다. 아래 세 URL은 브라우저 관점에서 서로 다른 Origin입니다.
http://node1.cfm4.lab.data-dynamics.io:8080
http://node2.cfm4.lab.data-dynamics.io:8080
http://node3.cfm4.lab.data-dynamics.io:80805. Chrome 재시작
설정 후 화면 하단의 Relaunch 버튼을 클릭해 Chrome을 재시작하고, NiFi에 다시 접속해 Copy / Paste를 테스트합니다.
절차 요약
해결 방법 2 — NiFi에 TLS 구성
브라우저 설정을 건드리지 않으려면 NiFi에 TLS를 구성해 HTTPS로 접속하게 해야 합니다.
http://nifi.example.com:8080
↓
https://nifi.example.com (또는 https://nifi.example.com:8443)HTTPS를 사용하면 브라우저가 NiFi 페이지를 Secure Context로 인식하므로 navigator.clipboard가 정상 동작하고, 결과적으로 Copy / Paste도 복구됩니다.
TLS와 Authentication / Authorization
Cloudera는 브라우저 설정을 변경하지 않는 경우 다음과 같은 Secure NiFi 구성을 권고합니다.
단순히 Clipboard 문제만 푸는 것이 아니라 NiFi 자체를 Secure Mode로 구성하는 접근입니다. 이를 통해 다음을 함께 확보할 수 있습니다.
- HTTPS 통신
- Browser Secure Context
- Clipboard API 정상 사용
- 사용자 인증과 사용자별 권한 관리
- NiFi UI 보안 강화
두 방법 비교
| 구분 | Chrome 설정 변경 | NiFi TLS 구성 |
|---|---|---|
| 적용 위치 | 사용자 Browser | NiFi Server |
| 적용 난이도 | 낮음 | 상대적으로 높음 |
| Browser별 설정 필요 | Yes | No |
| HTTPS 필요 | No | Yes |
| Authentication 구성 | 불필요 | 일반적으로 구성 |
| Authorization 구성 | 불필요 | 일반적으로 구성 |
| 테스트 환경 | 적합 | 가능 |
| 운영 환경 | 비권장 | 권장 |
| 근본적인 해결 | 임시 우회 | Yes |
환경별 권장
| 환경 | 권장 방법 |
|---|---|
| 개인 개발 환경 | Chrome Flag 설정 |
| PoC 환경 | Chrome Flag 또는 TLS |
| 내부 테스트 환경 | Chrome Flag 사용 가능 |
| 개발/검증 환경 | 가능하면 TLS |
| Production 환경 | TLS + Authentication + Authorization |
Chrome 설정 이름을 다시 봅시다.
unsafely-treat-insecure-origin-as-secure이름 그대로 보안되지 않은 HTTP Origin을 브라우저에서 강제로 Secure Context로 처리하는 설정입니다. 운영 환경에서 여러 사용자의 브라우저에 이 설정을 배포하는 방식보다는, NiFi 자체에 TLS를 구성하는 편이 적절합니다.
전체 문제 구조
정리
CFM 4 / NiFi 2.x의 Copy / Paste 문제는 Non-Secure NiFi의 사용자 권한 문제가 아니라 브라우저 Clipboard API의 Secure Context 제한 때문입니다.
단기적으로는 Chrome의 chrome://flags/#unsafely-treat-insecure-origin-as-secure에 NiFi HTTP URL을 Secure Origin으로 등록해 해결할 수 있습니다. 다만 이것은 브라우저 측 예외 처리이므로, 운영 환경의 근본적인 해결책은 NiFi에 TLS를 구성하고 HTTPS로 접속하는 것입니다.
개발·테스트 환경은 Chrome Flag로 넘기고, 운영 환경은 TLS + Authentication + Authorization을 갖춘 HTTPS 기반 NiFi로 가는 것이 정석입니다.