728x90
반응형

 

만약 외부 노출 없이, 전체 TLS (neo4j+s 및 https)를 사용하고, `privatelink.neo4jfield.org` 같은 깔끔한 Private DNS를 통해 PrivateLink를 이용해서 Neo4j Enterprise Edition 클러스터를 VPC 전체에 안전하게 노출할 수 있다면 어떨까요?

많은 프로덕션 환경에서 이건 간단한 일이 아니죠. 네트워킹, DNS, TLS, 그리고 Neo4j 클러스터 라우팅 전반에 걸쳐 시행착오를 겪는 경우가 많아요.

이 가이드에서는 다음 요소들을 모두 통합하는, 검증된 프로덕션 레벨 솔루션을 제시할 거예요.

  • AWS PrivateLink를 사용해서 VPC 간 접근을 보호
  • 적절한 인증서 검증을 갖춘 엔드투엔드 TLS
  • 인증서와 연계된 깔끔한 Private DNS 통합
  • 바로 사용 가능한 Neo4j 클러스터 라우팅

이건 실제 구현을 기반으로 하기 때문에, 보안 그룹, DNS 확인, 또는 클러스터 연결과 관련된 엣지 케이스를 디버깅하는 데 시간을 낭비할 필요가 없을 거예요.

 

 

기업 환경에서는:

  • 데이터베이스가 외부로 공개되면 안 돼요.
  • 전체 네트워크 연결(VPC 피어링/TGW)을 열면 공격 표면이 늘어나죠.
  • Neo4j는 라우팅을 위해 클러스터 멤버에 대한 직접 연결이 필요해요.

 

AWS PrivateLink를 사용해서 필수 서비스만 노출하는 거예요.

  • HTTPS (7473)
  • 볼트 (7687)

다음을 유지하면서요:

  • 클러스터 포트(6000, 7000, 7688)는 엄격하게 내부적으로만 사용돼요.

안전하고 깔끔한 접근을 위해 전체 TLS와 함께 Private DNS(예: `privatelink.neo4jfield.org`)를 사용하는 거죠.


상위 수준 아키텍처

`us-east-1` (동부) 리전의 AWS VPC에서 호스팅되는 Neo4j Enterprise 클러스터를 상상해 보세요. 연결해야 하는 고객은 `us-central-1` (중앙) 리전의 별도 VPC에 있어요.

이미지 1: VPC 전반에 걸친 Neo4j PrivateLink 설정

프로덕션 레벨의 매우 안전하고 확장 가능한 지역 간, VPC 간 연결 솔루션을 제공하기 위해 다음 AWS 서비스를 사용하여 기존 아키텍처를 확장할 거예요.

  • Neo4j Enterprise Edition
  • 3노드 클러스터:
    • us-east-1a
    • us-east-1b
    • us-east-1c
  • 동부 VPC 내에서만 클러스터 통신이 제한됨
  • 다음을 통한 외부 액세스:
    • 볼트 (7687)
    • HTTPS (7473)
  • VPC 간 연결에 사용되는 AWS PrivateLink
  • 외부 노출은 없어요.

Neo4j 클러스터 구성

우리가 하는 일

  • 각 Node를 자체적으로 알려진 Bolt 주소로 구성해요.
  • 공유 HTTPS 엔드포인트를 사용하고요.
  • Bolt 및 HTTPS에 대해 전체 TLS를 활성화합니다.

Why

  • Neo4j 드라이버에는 클러스터 구성원으로의 직접 라우팅이 필요하거든요.
  • TLS는 안전한 클라이언트 연결을 보장해 준답니다.

예시 (Node A):

server.default_advertised_address=east-a.neo4jfield.org
server.bolt.advertised_address=east-a.neo4jfield.org:7687
server.https.advertised_address=privatelink.neo4jfield.org:7473

이미지 2: 지역의 Neo4j 클러스터

 

이번 섹션에서는 트래픽이 Neo4j 클러스터로 어떻게 들어오는지 알아볼게요.

우리가 하는 일

  • HTTPS용 NLB 1개(7473)
  • Bolt(7687)용 NLB 3개, Node당 1개
  • TCP 통과 사용
  • 교차 영역 로드 밸런싱 활성화

Why

  • 클러스터 인식 라우팅을 지원하고요.
  • End-to-end TLS를 보존합니다.
  • 고가용성을 보장해 준답니다.
이미지 3: 네트워크 로드 밸런서
이미지 4: 대상 그룹이 있는 Network Load Balancer

보안 모범 사례

이 섹션에서는 최소 권한 액세스를 적용합니다.

우리가 하는 일

  • 필수 포트(7473, 7687)만 허용
  • 클러스터 포트를 내부에 유지
  • 엔드포인트에 별도의 보안 그룹 사용

Why

  • 공격 표면 감소
  • 엄격한 네트워크 경계를 유지합니다.
이미지 5: 보안 그룹

이 섹션에서는 Neo4j를 소비자 VPC에 안전하게 노출합니다.

우리가 하는 일

  • 4개의 엔드포인트 서비스 생성(HTTPS 1개, Bolt 3개)
  • 프라이빗 DNS 활성화
  • TXT를 통해 도메인 확인

Why

  • 통제된 서비스 수준 액세스 제공
  • 무단 연결 방지
이미지 6: PrivateLink 엔드포인트

DNS Architecture

이번 섹션에서는 깔끔한 호스트 이름을 사용해서 서비스에 접근하는 방법을 알아볼 거예요.

우리가 하는 일

  • TXT 확인에만 공개 DNS를 사용해요.
  • 런타임에는 PrivateLink 관리형 프라이빗 DNS를 사용하죠.
  • 다음과 같은 도메인을 사용합니다.
  • privatelink.neo4jfield.org
  • east-a.neo4jfield.org

Why

  • TLS 인증서 정렬을 보장해요.
  • 수동 DNS 관리를 피할 수 있죠.
  • 모든 것을 비공개로 유지합니다.
이미지 7: 리소스 구성 – 사용자 정의 도메인 포함

Interface Endpoint (중앙 VPC)

이번 섹션에서는 소비자 VPC에서의 연결을 활성화하는 방법을 알아볼게요.

우리가 하는 일

  • 각 서비스에 대한 Interface Endpoint를 생성해요.
  • 여러 AZ에 배포하죠.
  • 전용 보안 그룹을 연결합니다.
  • 프라이빗 DNS를 활성화해요.

Why

  • 고가용성을 제공해요.
  • 비공개 연결을 보장하죠.
이미지 8: PrivateLink 엔드포인트

검증 체크리스트

  • 엔드포인트가 사용 가능하고 허용됩니다.
  • DNS는 개인 IP로 확인됩니다.
  • HTTPS는 privatelink.neo4jfield.org를 통해 작동합니다.
  • Bolt는 neo4j+s를 통해 작동합니다.
  • TLS 경고 없음
이미지 9: 소비자 VPC에서 사용 가능한 Neo4j 클러스터

생산 고려 사항

  • Enterprise Edition을 사용하면 보안 및 라우팅을 완벽하게 제어할 수 있어요.
  • PrivateLink를 통해 필요한 포트만 노출
  • 클러스터 통신을 내부적으로 유지
  • 상태 및 연결 모니터링

요약

이 디자인은 다음을 제공하죠:

  • VPC 간 Neo4j 액세스 보안
  • 전체 TLS(https 및 neo4j+s)
  • 최소 권한 노출
  • 깨끗한 개인 DNS

폐쇄

VPC 전체에서 Neo4j를 안전하게 노출하려고 시도하다가 DNS, TLS 또는 클러스터 라우팅과 관련된 문제에 직면했다면, 이 접근 방식은 실제 프로덕션 환경에서 작동하는 입증된 패턴이에요.

이 설정에는 놓치기 쉬운 작은 세부 사항이 많이 있는데, 이걸 올바르게 설정하면 상당한 시간과 노력을 절약할 수 있을 거예요.

비슷한 것을 구현했거나, 질문이 있거나, 이 디자인을 개선할 수 있는 기회를 발견했다면 여러분의 생각을 듣고 경험을 통해 배우고 싶어요.


에이치시스템즈LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.

👉 에이치시스템즈 홈페이지

728x90
반응형

+ Recent posts