

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Neptune 클러스터에 연결
<a name="get-started-connecting"></a>

Neptune 클러스터를 생성한 후 액세스하도록 연결 방법을 구성할 수 있습니다.

## Neptune 엔드포인트와 통신하도록 `curl` 또는 awscurl 설정
<a name="get-started-access-graph-curl"></a>

이 설명서의 여러 예제에서 볼 수 있듯이 Neptune DB 클러스터에 쿼리를 제출하는 명령줄 도구를 사용하면 매우 편리합니다. [curl](https://curl.haxx.se/) 명령줄 도구는 IAM 인증이 활성화되지 않은 경우 Neptune 엔드포인트와 통신하기 위한 훌륭한 옵션입니다. 7.75.0부터 시작하는 버전에서는 IAM 인증이 활성화된 경우 요청에 서명하는 `--aws-sigv4` 옵션을 지원합니다.

IAM 인증이 *활성화된* 엔드포인트의 경우 [awscurl](https://github.com/okigan/awscurl)을 사용할 수도 있습니다. awscurl은 `curl`과 거의 동일한 구문을 사용하지만, IAM 인증에 필요한 서명 요청을 지원합니다. IAM 인증은 추가 보안을 제공하므로, 보통 활성화하는 것이 좋습니다.

 `curl` 또는 `awscurl`을 사용하는 방법에 대한 자세한 내용은 [curl man 페이지](https://curl.haxx.se/docs/manpage.html)와 *[Everything curl](https://ec.haxx.se/)* 설명서를 참조하세요.

HTTPS(Neptune에서 필요)를 사용하여 연결하려면 `curl`에서 적절한 인증서에 액세스할 수 있어야 합니다. `curl`이 적절한 인증서를 찾을 수 있어야 추가 파라미터 없이 HTTP 연결과 같이 HTTPS 연결을 처리할 수 있습니다. `awscurl`의 경우도 마찬가지입니다. 이 설명서의 예제는 해당 시나리오를 기반으로 합니다.

`curl` 설명서의 [SSL 인증서 확인](https://curl.haxx.se/docs/sslcerts.html)에는 이러한 인증서를 가져오는 방법과 `curl`에서 사용할 수 있는 인증 기관(CA) 인증서 스토어로 적절하게 형식을 지정하는 방법이 나와 있습니다.

이렇게 하면 `CURL_CA_BUNDLE` 환경 변수를 사용하여 이 CA 인증서 스토어의 위치를 지정할 수 있습니다. Windows에서 `curl`은 `curl-ca-bundle.crt`라는 파일에서 자동으로 이 인증서를 찾습니다. 먼저 `curl.exe`와 동일한 디렉터리에서 찾은 다음 경로의 다른 곳을 찾습니다. 자세한 내용은 [SSL Certificate Verification](https://curl.haxx.se/docs/sslcerts.html)을 참조하십시오.

## Neptune DB 클러스터에 연결하는 다양한 방법
<a name="get-started-connect-ways"></a>

Amazon Neptune DB 클러스터는 Amazon Virtual Private Cloud(VPC)에서*만* 생성할 수 있습니다. DB 클러스터에 대해 [Neptune 퍼블릭](neptune-public-endpoints.md) 엔드포인트를 활성화하고 설정하지 않는 한 엔드포인트는 해당 VPC 내에서만 액세스할 수 있습니다.

VPC에서 Neptune DB 클러스터에 대한 액세스를 설정하는 방법은 여러 가지가 있습니다.
+ [동일한 VPC에 있는 Amazon EC2 인스턴스에서 연결](get-started-connect-ec2-same-vpc.md)
+ [다른 VPC의 Amazon EC2 인스턴스에서 연결](get-started-connect-ec2-other-vpc.md)
+ [프라이빗 네트워크에서 연결](get-started-connect-private-net.md)
+ [퍼블릭 엔드포인트로부터 연결](neptune-public-endpoints.md)

# 동일 VPC 내 Amazon EC2 인스턴스를 Amazon Neptune 클러스터에 연결
<a name="get-started-connect-ec2-same-vpc"></a>

Neptune 데이터베이스에 연결하는 가장 일반적인 방법 중 하나는 Neptune DB 클러스터와 동일한 VPC에 있는 Amazon EC2 인스턴스에서 연결하는 것입니다. 예를 들어, EC2 인스턴스는 인터넷에 연결되는 웹 서버를 실행할 수 있습니다. 이 경우 EC2 인스턴스만 Neptune DB 클러스터에 액세스할 수 있고, 인터넷은 EC2 인스턴스에만 액세스할 수 있습니다.

![\[동일한 VPC의 EC2 인스턴스에서 Neptune 클러스터에 액세스하는 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/neptune/latest/userguide/images/VPC-connection-01.png)


이 구성을 활성화하려면 올바른 VPC 보안 그룹과 서브넷 그룹을 설정해야 합니다. 퍼블릭 서브넷에서 웹 서버를 호스팅하므로 웹 서버에서 퍼블릭 인터넷에 연결할 수 있으며, Neptune 클러스터 인스턴스는 보안을 유지하기 위해 프라이빗 서브넷에서 호스팅됩니다. [Amazon Neptune DB 클러스터가 위치한 곳에 Amazon VPC 설정](get-started-vpc.md)을(를) 참조하세요.

Amazon EC2 인스턴스가 포트 `8182` 등의 Neptune 엔드포인트에 연결되게 하려면 이를 수행할 보안 그룹을 설정해야 합니다. Amazon EC2 인스턴스가 가령 `ec2-sg1`이라는 보안 그룹을 사용하는 경우 포트 `8182`에 대한 인바운드 규칙이 있고 소스가 `ec2-sg1`인 Amazon EC2 보안 그룹(예: `db-sg1`)을 생성해야 합니다. 그런 다음 `db-sg1`을 Neptune 클러스터에 추가하여 연결을 허용합니다.

Amazon EC2 인스턴스를 생성한 후 SSH를 사용하여 로그인하고 Neptune DB 클러스터에 연결할 수 있습니다. SSH를 사용하여 Amazon EC2 인스턴스에 연결하는 방법에 대한 자세한 내용은 *Amazon EC2 사용 설명서*의 [Linux 인스턴스에 연결](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstances.html)을 참조하세요.

Linux 또는 macOS 명령줄을 사용하여 EC2 인스턴스에 연결하는 경우 CloudFormation 스택의 **출력** 섹션에 있는 **SSHAccess** 항목의 SSH 명령을 붙여넣을 수 있습니다. 현재 디렉터리에 PEM 파일이 있어야 하고 PEM 파일 권한은 400(`chmod 400 keypair.pem`)으로 설정되어야 합니다.

**프라이빗 서브넷과 퍼블릭 서브넷을 모두 포함하는 VPC를 생성하려면**

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) Amazon VPC 콘솔을 엽니다.

1. 의 오른쪽 상단 모서리에서 VPC를 생성할 리전을 AWS Management Console선택합니다.

1. **VPC 대시보드**에서 **VPC 마법사 시작**을 선택합니다.

1. **VPC 생성** 페이지의 **VPC 설정** 영역을 완료합니다.

   1. **생성할 리소스(Resources to create)**에서 **VPC, 서브넷 등(VPC, subnets, etc.)**을 선택합니다.

   1. 기본 이름 태그를 그대로 두거나, 원하는 이름을 입력하거나, **자동 생성** 확인란의 선택을 취소하여 이름 태그 생성을 비활성화합니다.

   1. IPv4 CIDR 블록 값은 `10.0.0.0/16`으로 둡니다.

   1. IPv6 CIDR 블록 값은 **IPv6 CIDR 블록 없음**으로 둡니다.

   1. **테넌시**는 **기본값**으로 둡니다.

   1. **가용 영역** 수는 **2**로 둡니다.

   1. NAT 게이트웨이가 하나 이상 필요한 경우가 아니라면 **NAT 게이트웨이(\$1)**는 **없음**으로 둡니다.

   1. Amazon S3를 사용할 경우가 아니라면 **VPC 엔드포인트**를 **없음**으로 설정합니다.

   1. **DNS 호스트 이름 활성화**와 **DNS 확인 활성화**를 모두 선택해야 합니다.

1. **VPC 생성**을 선택합니다.

# 다른 VPC에 있는 Amazon Neptune 클러스터에 Amazon EC2 인스턴스 연결
<a name="get-started-connect-ec2-other-vpc"></a>

Amazon Neptune 클러스터는 Amazon Virtual Private Cloud(Amazon VPC) *내에서만* 생성할 수 있으며, 해당 엔드포인트는 일반적으로 해당 VPC 내에서 실행 중인 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 액세스할 수 있습니다. 또는 퍼블릭 엔드포인트를 사용하여 액세스할 수 있습니다. 퍼블릭 엔드포인트에 대한 자세한 내용은 [Neptune 퍼블릭 엔드포인트](neptune-public-endpoints.md)를 참조하세요.

DB 클러스터가 액세스하는 데 사용하는 EC2 인스턴스와 다른 VPC에 있는 경우 [VPC 피어링](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)을 사용하여 다음과 같이 연결할 수 있습니다.

![\[다른 VPC에서 Neptune 클러스터에 액세스하는 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/neptune/latest/userguide/images/VPC-connection-02.png)


VPC 피어링 연결은 비공개적으로 두 VPC 간에 트래픽을 라우팅하여 VPC의 인스턴스가 동일한 네트워크에 속하는 것처럼 통신할 수 있도록 하기 위한 두 VPC 사이의 네트워킹 연결입니다. 계정의 VPC 간, 계정의 VPCs와 다른 계정의 VPC 간 AWS 또는 다른 AWS 리전의 VPC와의 VPC 피어링 연결을 생성할 수 있습니다 AWS .

AWS 는 VPC의 기존 인프라를 사용하여 VPC 피어링 연결을 생성합니다. 게이트웨이도 아니고 AWS Site-to-Site VPN 연결도 아니며 별도의 물리적 하드웨어에 의존하지 않습니다. 통신에 대한 단일 장애 지점이 없으며, 대역폭 병목 현상도 발생하지 않습니다.

VPC 피어링을 사용하는 방법에 대한 자세한 내용은 [Amazon VPC 피어링 가이드](https://docs.aws.amazon.com/vpc/latest/peering/)를 참조하세요.

# 프라이빗 네트워크를 통해 Amazon Neptune 클러스터에 연결
<a name="get-started-connect-private-net"></a>

다음과 같은 두 방법으로 프라이빗 네트워크에서 Neptune DB 클러스터에 액세스할 수 있습니다.
+ [AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 연결 사용.
+ [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/) 연결 사용.

위 링크에는 이러한 연결 방법 및 설정 방법에 대한 정보가 있습니다. a AWS Site-to-Site 연결의 구성은 다음과 같을 수 있습니다.

![\[프라이빗 네트워크에서 Neptune 클러스터에 액세스하는 다이어그램.\]](http://docs.aws.amazon.com/ko_kr/neptune/latest/userguide/images/VPC-connection-04.png)


# Neptune 퍼블릭 엔드포인트
<a name="neptune-public-endpoints"></a>

## 개요
<a name="neptune-public-endpoints-overview"></a>

Amazon Neptune 클러스터는 일반적으로 VPC 내에 배포되며 해당 VPC 내에서만 액세스할 수 있습니다. 이를 위해서는 VPC 내에서 애플리케이션 및 개발 환경을 구성하거나 프록시 서비스를 사용하여 VPC에 연결해야 하므로 설정 시간과 비용이 증가합니다.

퍼블릭 엔드포인트는 인터넷을 통해 Neptune에 직접 연결할 수 있도록 하여 이 경험을 간소화하므로 특수 네트워킹 지식 없이 그래프 데이터베이스를 더 쉽게 시작할 수 있습니다.

## 퍼블릭 엔드포인트를 사용해야 하는 경우
<a name="neptune-public-endpoints-when-to-use"></a>

다음 시나리오에서는 퍼블릭 엔드포인트를 사용하는 것이 좋습니다.
+ 복잡한 네트워크 구성 없이 개발 또는 테스트 환경에서 Neptune을 빠르게 테스트하려는 경우
+ 특화된 AWS 네트워킹 지식이 없음
+ 애플리케이션의 보안 태세에 프라이빗 VPC가 필요하지 않음
+ 로컬 개발 환경에서 Neptune에 연결해야 함

## 보안 고려 사항
<a name="neptune-public-endpoints-security"></a>

퍼블릭 엔드포인트를 사용할 때는 다음 보안 고려 사항에 유의하세요.
+ 퍼블릭 엔드포인트가 활성화된 클러스터에는 IAM 인증이 필요합니다.
+ 데이터베이스에 대한 액세스는 해당 데이터베이스가 사용하는 보안 그룹에 의해 제어됩니다.
+ 클러스터에 연결할 수 있는 IP 주소를 제한할 수 있습니다.
+ IAM 정책을 사용하여 퍼블릭 액세스 권한이 있는 클러스터를 생성하거나 수정할 수 있는 사용자를 제어할 수 있습니다. 참조: [퍼블릭 액세스 생성 제한](#neptune-public-endpoints-restrict-access)

## 퍼블릭 엔드포인트 활성화
<a name="neptune-public-endpoints-enabling"></a>

기본적으로 새 Neptune 데이터베이스는 퍼블릭 엔드포인트가 비활성화된 상태로 생성됩니다. 클러스터를 생성하거나 수정할 때 퍼블릭 액세스를 명시적으로 활성화해야 합니다.

퍼블릭 엔드포인트는 Neptune 엔진 릴리스 버전 1.4.6.x에서 지원됩니다. 이 기능을 사용하려면 기존 클러스터를 최소한이 버전으로 업그레이드해야 합니다.

퍼블릭 엔드포인트 설정은 Neptune 클러스터가 아닌 Neptune 인스턴스에서 사용할 수 있습니다. 따라서 Neptune 클러스터는 퍼블릭 엔드포인트가 있는 일부 인스턴스와 그렇지 않은 일부 인스턴스에 존재할 수 있습니다. 그러나 이러한 설정은 사용하지 않는 것이 좋습니다. 이에 대한 자세한 내용은 [퍼블릭 엔드포인트 작동 방식](#neptune-public-endpoints-how-they-work)을 참조하세요.

## 사전 조건
<a name="neptune-public-endpoints-prerequisites"></a>

### Neptune 클러스터의 IAM 인증 설정
<a name="neptune-public-endpoints-iam-auth"></a>

Neptune 인스턴스에서 퍼블릭 엔드포인트를 활성화하기 전에 클러스터가 IAM 인증을 지원하는지 확인합니다. 지원하지 않는 경우 다음 명령을 사용하여 설정합니다.

```
aws neptune modify-db-cluster \
  --region us-west-2 \
  --engine graphdb \
  --engine-version 1.4.6.x \
  --db-cluster-identifier neptune-public-endpoint \
  --enable-iam-database-authentication
```

### 네트워크 설정
<a name="neptune-public-endpoints-network-settings"></a>

1. VPC에 퍼블릭 라우팅을 활성화하는 서브넷이 있는지 확인합니다(서브넷의 라우팅 테이블에 인터넷 게이트웨이에 대한 항목이 있음). 클러스터를 생성하는 동안 `db-subnet-group-name` 파라미터를 제공하지 않으면 클러스터 생성을 위해 기본 서브넷 그룹이 선택됩니다.

1. 클러스터에 연결된 보안 그룹이 허용된 IP 범위 및 허용된 포트에 대한 인바운드 트래픽을 허용하는지 확인합니다. 예를 들어 모든 IPs이 포트 8182에서 실행되는 Neptune 인스턴스에 연결되도록 허용하려면 인바운드 규칙에 다음이 포함되어야 합니다.

   1. 유형: 모든 TCP

   1. 프로토콜: TCP

   1. 포트 범위: 8182

   1. CIDR 블록: 0.0.0.0/0

**참고**  
CIDR 블록 범위를 0.0.0.0/0으로 설정할 수 있지만 보안 태세를 강화하려면 클라이언트 애플리케이션의 특정 IP 범위로 줄이는 것이 좋습니다.

## 퍼블릭 엔드포인트를 사용하여 새 인스턴스 생성
<a name="neptune-public-endpoints-creating-instance"></a>

 AWS 관리 콘솔, AWS CLI 또는 AWS SDK를 사용하여 퍼블릭 엔드포인트가 있는 새 Neptune 인스턴스를 생성할 수 있습니다.

 AWS CLI 사용:

```
aws neptune create-db-instance \
  --region us-west-2 \
  --engine graphdb \
  --engine-version 1.4.6.x \
  --db-cluster-identifier neptune-public-endpoint \
  --publicly-accessible
```

## 퍼블릭 액세스를 위해 기존 인스턴스 수정
<a name="neptune-public-endpoints-modifying-instance"></a>

퍼블릭 액세스를 활성화하도록 기존 Neptune 인스턴스를 수정하려면 다음을 수행합니다.

```
aws neptune modify-db-instance \
  --region us-west-2 \
  --engine graphdb \
  --engine-version 1.4.6.x \
  --db-instance-identifier neptune-public-endpoint \
  --publicly-accessible
```

**참고**  
퍼블릭 액세스는 클러스터 수준이 아닌 인스턴스 수준에서 활성화됩니다. 퍼블릭 엔드포인트를 통해 클러스터에 항상 액세스할 수 있도록 하려면 클러스터의 모든 인스턴스에 퍼블릭 액세스가 활성화되어 있어야 합니다.

## 퍼블릭 엔드포인트 사용
<a name="neptune-public-endpoints-using"></a>

데이터베이스에 연결할 수 있는지 확인하려면 AWS CLI `NeptuneData` API를 사용하여 상태를 확인합니다.

```
aws neptunedata get-engine-status \
  --endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
```

데이터베이스에 액세스할 수 있는 경우 응답은 다음과 같습니다.

```
{
    "status": "healthy",
    "startTime": "Sun Aug 10 06:54:15 UTC 2025",
    "dbEngineVersion": "1.4.6.0.R1",
    "role": "writer",
    "dfeQueryEngine": "viaQueryHint",
    "gremlin": {
        "version": "tinkerpop-3.7.1"
    },
    "sparql": {
        "version": "sparql-1.1"
    },
    "opencypher": {
        "version": "Neptune-9.0.20190305-1.0"
    },
    "labMode": {
        "ObjectIndex": "disabled",
        "ReadWriteConflictDetection": "enabled"
    },
    "features": {
        "SlowQueryLogs": "disabled",
        "InlineServerGeneratedEdgeId": "disabled",
        "ResultCache": {
            "status": "disabled"
        },
        "IAMAuthentication": "disabled",
        "Streams": "disabled",
        "AuditLog": "disabled"
    },
    "settings": {
        "StrictTimeoutValidation": "true",
        "clusterQueryTimeoutInMs": "120000",
        "SlowQueryLogsThreshold": "5000"
    }
}
```

## 데이터베이스를 쿼리하는 방법의 예제
<a name="neptune-public-endpoints-examples"></a>

### AWS CLI
<a name="neptune-public-endpoints-aws-cli"></a>

```
aws neptunedata execute-open-cypher-query \
--open-cypher-query "MATCH (n) RETURN n LIMIT 10" \
--endpoint-url https://my-cluster-name.cluster-abcdefgh1234.us-east-1.neptune.amazonaws.com:8182
```

### Python
<a name="neptune-public-endpoints-python"></a>

```
import boto3
import json
from botocore.config import Config

# Configuration - Replace with your actual Neptune cluster details
cluster_endpoint = "my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com"
port = 8182
region = "my-region"

# Configure Neptune client
# This disables retries and sets the client timeout to infinite 
#     (relying on Neptune's query timeout)
endpoint_url = f"https://{cluster_endpoint}:{port}"
config = Config(
    region_name=region,
    retries={'max_attempts': 1},
    read_timeout=None
)

client = boto3.client("neptunedata", config=config, endpoint_url=endpoint_url)

cypher_query = "MATCH (n) RETURN n LIMIT 5"
try:
    response = client.execute_open_cypher_query(openCypherQuery=cypher_query)
    print("openCypher Results:")
    for item in response.get('results', []):
        print(f"  {item}")
except Exception as e:
    print(f"openCypher query failed: {e}")
```

### JavaScript
<a name="neptune-public-endpoints-javascript"></a>

```
import {
    NeptunedataClient,
    GetPropertygraphSummaryCommand
} from "@aws-sdk/client-neptunedata";
import { inspect } from "util";
import { NodeHttpHandler } from "@smithy/node-http-handler";

/**
 * Main execution function
 */
async function main() {
    // Configuration - Replace with your actual Neptune cluster details
    const clusterEndpoint = 'my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com';
    const port = 8182;
    const region = 'my-region';

    // Configure Neptune client
    // This disables retries and sets the client timeout to infinite 
    //     (relying on Neptune's query timeout)
    const endpoint = `https://${clusterEndpoint}:${port}`;
    const clientConfig = {
        endpoint: endpoint,
        sslEnabled: true,
        region: region,
        maxAttempts: 1,  // do not retry
        requestHandler: new NodeHttpHandler({
            requestTimeout: 0  // no client timeout
        })
    };

    const client = new NeptunedataClient(clientConfig);
    try {
        try {
            const command = new GetPropertygraphSummaryCommand({ mode: "basic" });
            const response = await client.send(command);
            console.log("Graph Summary:", inspect(response.payload, { depth: null }));
        } catch (error) {
            console.log("Property graph summary failed:", error.message);
        }    
    } catch (error) {
        console.error("Error in main execution:", error);
    }
}

// Run the main function
main().catch(console.error);
```

### Go
<a name="neptune-public-endpoints-go"></a>

```
package main
import (
    "context"
    "fmt"
    "github.com/aws/aws-sdk-go-v2/aws"
    "github.com/aws/aws-sdk-go-v2/config"
    "github.com/aws/aws-sdk-go-v2/service/neptunedata"
    "os"
    "encoding/json"
    "net/http"
)

func main() {    
    // Configuration - Replace with your actual Neptune cluster details
    clusterEndpoint := "my-cluster-name.cluster-abcdefgh1234.my-region.neptune.amazonaws.com"
    port := 8182
    region := "my-region"
    
    // Configure Neptune client
    // Configure HTTP client with no timeout
    //    (relying on Neptune's query timeout)
    endpoint := fmt.Sprintf("https://%s:%d", clusterEndpoint, port)
    // Load AWS SDK configuration
    sdkConfig, _ := config.LoadDefaultConfig(
        context.TODO(),
        config.WithRegion(region),
        config.WithHTTPClient(&http.Client{Timeout: 0}),
    )
    
    // Create Neptune client with custom endpoint
    client := neptunedata.NewFromConfig(sdkConfig, func(o *neptunedata.Options) {
        o.BaseEndpoint = aws.String(endpoint)
        o.Retryer = aws.NopRetryer{} // Do not retry calls if they fail
    })

    gremlinQuery := "g.addV('person').property('name','charlie').property(id,'charlie-1')"
    serializer := "application/vnd.gremlin-v1.0+json;types=false"
    
    gremlinInput := &neptunedata.ExecuteGremlinQueryInput{
        GremlinQuery: &gremlinQuery,
        Serializer:   &serializer,
    }
    gremlinResult, err := client.ExecuteGremlinQuery(context.TODO(), gremlinInput)
    if err != nil {
        fmt.Printf("Gremlin query failed: %v\n", err)
    } else {
        var resultMap map[string]interface{}
        err = gremlinResult.Result.UnmarshalSmithyDocument(&resultMap)
        if err != nil {
            fmt.Printf("Error unmarshaling Gremlin result: %v\n", err)
        } else {
            resultJSON, _ := json.MarshalIndent(resultMap, "", "  ")
            fmt.Printf("Gremlin Result: %s\n", string(resultJSON))
        }
    }
}
```

## 퍼블릭 엔드포인트 작동 방식
<a name="neptune-public-endpoints-how-they-work"></a>

Neptune 인스턴스에 공개적으로 액세스할 수 있는 경우:
+ DNS 엔드포인트는 DB 클러스터의 VPC 내에서 프라이빗 IP 주소로 확인됩니다.
+ DB 클러스터의 VPC 외부에서 퍼블릭 IP 주소로 확인됩니다.
+ 클러스터에 할당된 보안 그룹에 의해 액세스가 제어됩니다.
+ 퍼블릭하게 접근 가능한 인스턴스만 인터넷을 통해 접근할 수 있습니다.

### 리더 엔드포인트 동작
<a name="neptune-public-endpoints-reader-behavior"></a>
+ 모든 리더 인스턴스에 공개적으로 액세스할 수 있는 경우 리더 엔드포인트는 항상 퍼블릭 인터넷을 통해 확인됩니다.
+ 일부 리더 인스턴스만 공개적으로 액세스할 수 있는 경우 리더 엔드포인트는 읽기 쿼리를 제공할 공개적으로 액세스할 수 있는 인스턴스를 선택한 경우에만 공개적으로 확인됩니다.

### 클러스터 엔드포인트 동작
<a name="neptune-public-endpoints-cluster-behavior"></a>
+ DB 클러스터 엔드포인트는 항상 라이터의 인스턴스 엔드포인트로 확인됩니다.
+ 라이터 인스턴스에서 퍼블릭 엔드포인트가 활성화된 경우 클러스터 엔드포인트에 공개적으로 액세스할 수 있으며, 그렇지 않으면 액세스할 수 없습니다.

### 클러스터 장애 조치 후 동작
<a name="neptune-public-endpoints-failover-behavior"></a>
+ Neptune 클러스터에는 서로 다른 퍼블릭 액세스 가능 설정에 인스턴스가 있을 수 있습니다.
+ 클러스터에 퍼블릭 라이터와 비공개 리더가 있는 경우 클러스터 장애 조치를 게시하면 새 라이터(이전 리더)는 비공개가 되고 새 리더(이전 라이터)는 퍼블릭이 됩니다.

## 네트워크 구성 요구 사항
<a name="neptune-public-endpoints-network-requirements"></a>

퍼블릭 엔드포인트가 제대로 작동하려면 다음이 충족되어야 합니다.

1. Neptune 인스턴스가 VPC 내의 퍼블릭 서브넷에 있어야 합니다.

1. 이러한 서브넷과 연관된 라우팅 테이블에는 0.0.0.0/0에 대한 인터넷 게이트웨이로의 경로가 포함되어야 합니다.

1. 보안 그룹은 액세스 권한을 부여하려는 퍼블릭 IP 주소 또는 CIDR 범위에서 액세스를 허용해야 합니다.

## 퍼블릭 액세스 생성 제한
<a name="neptune-public-endpoints-restrict-access"></a>

IAM 정책을 사용하여 퍼블릭 액세스 권한이 있는 Neptune 클러스터를 생성하거나 수정할 수 있는 사용자를 제한할 수 있습니다. 다음 예제 정책은 퍼블릭 액세스 권한이 있는 Neptune 인스턴스 생성을 거부합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "rds:CreateDBInstance",
        "rds:ModifyDBInstance",
        "rds:RestoreDBInstanceFromDBSnapshot",
        "rds:RestoreDBInstanceToPointInTime"
      ],
      "Resource": "*",
      "Condition": {
        "Bool": {
          "rds:PubliclyAccessible": true
        }
      }
    }
  ]
}
```

------

`rds:PublicAccessEnabled` IAM 조건 키에 대한 자세한 정보: [Amazon RDS 서비스 권한 부여 참조](https://docs.aws.amazon.com//service-authorization/latest/reference/list_amazonrds.html#amazonrds-rds_PubliclyAccessible)

## CloudFormation 지원
<a name="neptune-public-endpoints-cloudformation"></a>

 CloudFormation 를 사용하여 CloudFormation 템플릿에서 `PubliclyAccessible` 파라미터를 지정하여 퍼블릭 엔드포인트가 활성화된 Neptune 클러스터를 시작할 수 있습니다.

## Neptune 기능과의 호환성
<a name="neptune-public-endpoints-compatibility"></a>

퍼블릭 엔드포인트가 활성화된 클러스터는 다음을 포함하여 VPC 전용 클러스터가 지원하는 모든 Neptune 기능을 지원합니다.
+ Neptune 워크벤치
+ 전체 텍스트 검색 통합
+ Neptune Streams
+ 사용자 지정 엔드포인트
+ Neptune Serverless
+ 그래프 탐색기

## 가격 책정
<a name="neptune-public-endpoints-pricing"></a>

퍼블릭 엔드포인트는 표준 Neptune 요금 외에 추가 비용 없이 사용할 수 있습니다. 그러나 퍼블릭 IP를 통해 로컬 환경에서 Neptune으로 연결하면 데이터 전송 비용이 증가할 수 있습니다.