728x90
반응형

Neo4j Aura 인스턴스는 다음과 같이 구성할 수 있어요. 공개적으로 사용 가능, , 또는 공개 및 비공개 액세스를 모두 허용.

Aura에서 보안 연결을 사용하는 건 정말 중요해요. 왜냐하면:

  1. : 보안 연결은 전송 중인 데이터가 가로채이거나 변조되는 걸 막아주거든요. 민감한 정보를 다룰 때는 특히 중요하죠.
  2. : 내부 개인 네트워크 경로를 통해 트래픽을 라우팅해요. Virtual Private Cloud(VPC)를 사용하면 불필요한 인터넷 홉을 없애서 `Query` 대기 시간을 줄이고 처리량을 향상시킬 수 있어요.

보안 연결 및 네트워크 액세스 구성에 대한 자세한 내용은 Aura 보안 연결을 참고하세요.

이번 블로그에서는 **Aura에 대한 비공개 연결**을 구성하는 방법을 보여드릴 거예요. **Terraform**이라는 오픈 소스 IaC(Infrastructure as Code) 도구를 사용할 건데요. Terraform을 사용하면 코드를 통해 클라우드 인프라를 정의, 버전 관리 및 자동화할 수 있답니다.

전제 조건

  • Terraform (v1.3 이상)
  • Neo4j AuraDB/AuraDS Virtual Private Cloud(VDC) 계정
  • 클라우드 콘솔에 대한 액세스 권한 및 네트워킹 리소스 생성 권한
  • 선택 사항: CLI 인증 (az login, aws configure, gcloud auth login)

클라우드별 구현

각 클라우드마다 프라이빗 연결을 구현하는 메커니즘은 다르지만, 목표는 똑같아요. **여러분의 환경과 Aura 사이의 모든 트래픽을 비공개로 라우팅하는 거죠!**

아래에는 필요한 모든 리소스를 프로비저닝하기 위한 전체 템플릿이 포함된 각 클라우드 제공업체의 GitHub 저장소와 함께 각 플랫폼에 필요한 최소 Terraform 구성이 나와 있어요.

다음 단계를 따라서 Aura 보안 연결을 만들고 **새로운 네트워크 액세스 구성**을 만들어 보세요.

AWS PrivateLink

GitHub 저장소

AWS PrivateLink와의 VPC 연결

요구사항

  • 기존의 vpc_id and subnet_ids
  • 포트에서 인바운드 트래픽을 허용하는 보안 그룹 80, 443, 그리고 7687

보안 그룹:

resource "aws_security_group" "aura" {
  name        = "aura-privatelink-endpoint"
  description = "SG for Neo4j Aura PrivateLink endpoint"
  vpc_id      = var.vpc_id

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

resource "aws_vpc_security_group_ingress_rule" "http" {
  security_group_id = aws_security_group.aura.id
  cidr_ipv4         = var.vpc_cidr
  from_port         = 80
  to_port           = 80
  ip_protocol       = "tcp"
}

resource "aws_vpc_security_group_ingress_rule" "https" {
  security_group_id = aws_security_group.aura.id
  cidr_ipv4         = var.vpc_cidr
  from_port         = 443
  to_port           = 443
  ip_protocol       = "tcp"
}

resource "aws_vpc_security_group_ingress_rule" "bolt" {
  security_group_id = aws_security_group.aura.id
  cidr_ipv4         = var.vpc_cidr
  from_port         = 7687
  to_port           = 7687
  ip_protocol       = "tcp"
}

PrivateLink 끝점:

resource "aws_vpc_endpoint" "aura" {
  vpc_id              = var.vpc_id
  service_name        = var.service_name # e.g. "com.amazonaws.vpce.us-east-1.vpce-svc-0a0b02030n1n2j3k4h"
  vpc_endpoint_type   = "Interface"
  private_dns_enabled = var.enable_private_dns
  subnet_ids          = var.subnet_ids     
  security_group_ids  = [aws_security_group.aura.id]
}

Aura 콘솔에서 프라이빗 엔드포인트 연결을 생성할 때 두 번째 단계 아래에 표시됩니다.

AWS 엔드포인트 서비스 이름

AWS에서 PrivateLink를 활성화하려면 Aura에서 엔드포인트 연결을 수락해야 해요. 그래서 2단계 DNS 설정이 필요하답니다. 다음 단계를 따라 해보세요.

  1. enable_private_dns = false 를terraform.tfvars에 적용
  2. 다음을 사용하여 리소스를 생성합니다. Terraform apply -auto-approve
  3. Aura 콘솔에서 엔드포인트를 수락하세요. > > 개인 끝점 > 다음 3단계에 도달할 때까지 > 새로운 것을 수락하세요.
엔드포인트 연결 요청

4. enable_private_dns=true를terraform.tfvars에서 변경하고 Terraform apply -auto-approve를 실행하세요.

5. 연결 테스트 프라이빗 엔드포인트를 통해

Azure 개인 링크

GitHub 저장소

Azure Private Link와의 VNet 연결

요구사항

  • 리소스 그룹 이름 및 위치
  • 기존 서브넷 ID
  • VNet ID
  • Aura Private Link 서비스 이름
  • 프라이빗 DNS 영역 이름

개인 끝점:

resource "azurerm_private_endpoint" "aura" {
  name                = "pep-neo4j-aura"
  location            = var.location
  resource_group_name = var.resource_group_name
  subnet_id           = var.private_endpoint_subnet_id

    private_service_connection {
    name                              = "pep-neo4j-aura-connection"
    is_manual_connection              = true
    private_connection_resource_alias = var.aura_private_link_service_alias
    request_message                   = "Private endpoint request from Aura"
  }
}

The PrivateLink 서비스 이름은 아래의aura_private_link_service_alias에서 사용되는데요, Aura 콘솔 > > > 개인 끝점 > 다음으로 이동해서 2단계에서 확인할 수 있어요.

Aura 콘솔의 Private Link 서비스 이름

프라이빗 DNS 영역 및 와일드카드 레코드:

resource "azurerm_private_dns_zone" "aura" {
  name                = var.private_dns_zone_name
  resource_group_name = var.resource_group_name
}

resource "azurerm_private_dns_a_record" "aura" {
  name                = "*"
  zone_name           = azurerm_private_dns_zone.aura.name
  resource_group_name = var.resource_group_name
  ttl                 = 300
  records             = [azurerm_private_endpoint.aura.private_service_connection[0].private_ip_address]
  depends_on = [azurerm_private_endpoint.aura]
}

resource "azurerm_private_dns_zone_virtual_network_link" "aura" {
  name                  = "dns-link-neo4j-aura"
  resource_group_name   = var.resource_group_name
  private_dns_zone_name = azurerm_private_dns_zone.aura.name
  virtual_network_id    = var.vnet_id  
  registration_enabled  = false
  depends_on = [azurerm_private_dns_zone.aura]
}

Neo4j에 설명된 대로 네트워크 연결을 위해서는 위의 DNS 영역 및 와일드카드 레코드 생성이 필요해요. 자세한 내용은 다음 링크를 참고해주세요. support 그리고 Neo4j documentation.

Azure 리소스를 계획하고 적용한 후 마지막 단계는 Aura 콘솔에 접속해서 이를 수락하는 건데요. > > > 개인 끝점 > 다음으로 이동해서 3단계에서 진행할 수 있어요.

Azure 끝점 연결 요청

끝점 연결 요청이 으로 변경되면, 프라이빗 엔드포인트를 통한 연결을 테스트해보세요.

Google Cloud 개인 서비스 연결

GitHub 저장소

GCP Private Service Connect를 통한 VPC 연결

요구사항

  • Aura 서비스 연결과 동일한 지역에 있는 기존 VPC 및 서브넷
  • Aura의 serviceAttachment URL
  • DNS 재정의를 위한 Aura의 FQDN

API를 활성화하고 내부 IP를 예약합니다.

resource "google_project_service" "compute_api" {
  project = var.project_id
  service = "compute.googleapis.com"
}

resource "google_project_service" "dns_api" {
  project = var.project_id
  service = "dns.googleapis.com"
}

resource "google_compute_address" "psc_ip" {
  name         = "psc-endpoint-ip"
  region       = var.region
  address_type = "INTERNAL"
  purpose      = "GCE_ENDPOINT"
  subnetwork   = <YOUR_SUBNETWORK_SELF_LINK>
}

PSC 전달 규칙 및 DNS 응답 정책:

resource "google_compute_forwarding_rule" "psc_endpoint" {
  name       = "psc-endpoint-aura"
  region     = var.region
  network    = <YOUR_VPC_ID>
  subnetwork = <YOUR_SUBNETWORK_SELF_LINK>
  ip_address = google_compute_address.psc_ip.self_link
  load_balancing_scheme = ""
  target     = var.aura_service_attachment
}

resource "google_dns_response_policy" "neo4j_policy" {
  response_policy_name = "neo4j-aura-policy"

  networks {
    network_url = google_compute_network.vpc.id
  }

  depends_on = [google_project_service.dns_api]
}

resource "google_dns_response_policy_rule" "neo4j_rule" {
  response_policy = google_dns_response_policy.neo4j_policy.response_policy_name
  rule_name       = "neo4j-aura-localdata"
  dns_name = var.aura_fqdn

  local_data {
    local_datas {
      name    = var.aura_fqdn #e.g. "*.production-orch-xxxx.neo4j.io."
      type    = "A"
      ttl     = 300
      rrdatas = [google_compute_address.psc_ip.address]
    }
  }
}

다음에 사용되는 Aura 서비스 첨부 URL var.aura_service_attachment 및 사용된 FQDN var.aura_fqdn 는 Aura 콘솔에서 프라이빗 엔드포인트를 설정하는 동안 획득할 수 있어요. > > > 개인 끝점 > 다음 2단계에 도달할 때까지.

Aura의 서비스 첨부 URL

모든 리소스가 생성된 후 프라이빗 엔드포인트를 통한 연결 테스트.

요약

보안 연결은 전송 중인 데이터가 가로채거나 변조되지 않도록 보호하는 데 도움이 되죠. 또한 Virtual Private Cloud(VPC) 내의 프라이빗 네트워크 경로를 통해 트래픽을 라우팅함으로써 불필요한 인터넷 홉을 제거하고 쿼리 대기 시간을 줄이고 처리량을 향상시켜요.

오픈 소스 IaC 도구인 Terraform을 사용하여 AWS, Azure 및 Google Cloud에서 Aura에 대한 비공개 연결을 구성하는 방법을 보여드렸어요.

  • Aura
  • Graph 기술

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

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

728x90
반응형

+ Recent posts