AWS PrivateLink를 사용하여 Amazon Aurora DSQL 클러스터 관리 및 연결 - Amazon Aurora DSQL

AWS PrivateLink를 사용하여 Amazon Aurora DSQL 클러스터 관리 및 연결

AWS PrivateLink for Amazon Aurora DSQL을 사용하면 Amazon Virtual Private Cloud에서 인터페이스 Amazon VPC 엔드포인트(인터페이스 엔드포인트)를 프로비저닝할 수 있습니다. 이러한 엔드포인트는 Amazon VPC 및 AWS Direct Connect를 통해 온프레미스에 있는 애플리케이션에서 또는 Amazon VPC 피어링을 통해 다른 AWS 리전에 있는 애플리케이션에서 직접 액세스할 수 있습니다. AWS PrivateLink 및 인터페이스 엔드포인트를 사용하면 애플리케이션에서 Aurora DSQL로의 프라이빗 네트워크 연결을 단순화할 수 있습니다.

Amazon VPC 내의 애플리케이션은 퍼블릭 IP 주소 없이 Amazon VPC 인터페이스 엔드포인트를 사용하여 Aurora DSQL에 액세스할 수 있습니다.

인터페이스 엔드포인트는 Amazon VPC의 서브넷에서 프라이빗 IP 주소가 할당된 하나 이상의 탄력적 네트워크 인터페이스(ENI)로 표시됩니다. 인터페이스 엔드포인트를 통해 Aurora DSQL로 보내는 요청은 AWS 네트워크에 유지됩니다. Amazon VPC를 온프레미스 네트워크에 연결하는 방법에 대한 자세한 내용은 AWS Direct Connect 사용 설명서AWS Site-to-Site VPN VPN 사용 설명서를 참조하세요.

인터페이스 엔드포인트에 대한 일반적인 내용은 AWS PrivateLink 사용 설명서의 Access an AWS service using an interface Amazon VPC endpoint를 참조하세요.

Aurora DSQL용 Amazon VPC 엔드포인트의 유형

Aurora DSQL에는 두 가지 유형의 AWS PrivateLink 엔드포인트가 필요합니다.

  1. 관리 엔드포인트 -이 엔드포인트는 Aurora DSQL 클러스터의 get, create, update, delete, list와 같은 관리 작업에 사용됩니다. AWS PrivateLink를 사용하여 Aurora DSQL 클러스터 관리을(를) 참조하세요.

  2. 연결 엔드포인트 -이 엔드포인트는 PostgreSQL 클라이언트를 통해 Aurora DSQL 클러스터에 연결하는 데 사용됩니다. AWS PrivateLink를 사용하여 Aurora DSQL 클러스터에 연결을(를) 참조하세요.

Amazon VPC 고려 사항은 AWS PrivateLink for Aurora DSQL에 적용됩니다. 자세한 내용은 AWS PrivateLink 안내서의 Access an AWS service using an interface VPC endpointAWS PrivateLink quotas를 참조하세요.

AWS Command Line Interface 또는 AWS 소프트웨어 개발 키트(SDK)를 사용하여 Aurora DSQL 인터페이스 엔드포인트를 통해 Aurora DSQL 클러스터를 관리할 수 있습니다.

Amazon VPC 엔드포인트 생성

Amazon VPC 인터페이스 엔드포인트를 생성하려면 AWS PrivateLink 안내서의 Create an Amazon VPC endpoint를 참조하세요.

aws ec2 create-vpc-endpoint \ --region region \ --service-name com.amazonaws.region.dsql \ --vpc-id your-vpc-id \ --subnet-ids your-subnet-id \ --vpc-endpoint-type Interface \ --security-group-ids client-sg-id \

Aurora DSQL API 요청에 기본 리전 DNS 이름을 사용하려면 Aurora DSQL 인터페이스 엔드포인트를 생성할 때 프라이빗 DNS를 비활성화하지 마세요. 프라이빗 DNS가 활성화되면 Amazon VPC 내에서 이루어진 Aurora DSQL 서비스에 대한 요청은 퍼블릭 DNS 이름이 아닌 Amazon VPC 엔드포인트의 프라이빗 IP 주소로 자동 확인됩니다. 프라이빗 DNS가 활성화되면 Amazon VPC 내에서 이루어진 Aurora DSQL 요청은 Amazon VPC 엔드포인트로 자동으로 확인됩니다.

프라이빗 DNS가 활성화되지 않은 경우 AWS CLI 명령과 함께 --region--endpoint-url 파라미터를 사용하여 Aurora DSQL 인터페이스 엔드포인트를 통해 Aurora DSQL 클러스터를 관리합니다.

엔드포인트 URL을 사용하여 클러스터 나열

다음 예시에서 AWS 리전 us-east-1 및 VPC 엔드포인트 ID의 DNS 이름(vpce-1a2b3c4d-5e6f.dynamodb.us-east-1.vpce.amazonaws.com)을 실제 정보로 바꿉니다.

aws dsql --region us-east-1 --endpoint-url https://vpce-1a2b3c4d-5e6f.dsql.us-east-1.vpce.amazonaws.com list-clusters

API 작업

Aurora DSQL의 리소스 관리에 대한 설명서는 Aurora DSQL API 참조를 참조하세요.

엔드포인트 정책 관리

Amazon VPC 엔드포인트 정책을 철저히 테스트하고 구성하면 Aurora DSQL 클러스터가 안전하고 규정을 준수하며 조직의 특정 액세스 제어 및 거버넌스 요구 사항에 부합하도록 할 수 있습니다.

예: 전체 Aurora DSQL 액세스 정책

다음 정책은 지정된 Amazon VPC 엔드포인트를 통해 모든 Aurora DSQL 작업 및 리소스에 대한 전체 액세스 권한을 부여합니다.

aws ec2 modify-vpc-endpoint \ --vpc-endpoint-id vpce-xxxxxxxxxxxxxxxxx \ --region region \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "dsql:*", "Resource": "*" } ] }'

예: 제한된 Aurora DSQL 액세스 정책

다음 정책은 이러한 Aurora DSQL 작업만 허용합니다.

  • CreateCluster

  • GetCluster

  • ListClusters

다른 Aurora DSQL 작업은 모두 거부됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": [ "dsql:CreateCluster", "dsql:GetCluster", "dsql:ListClusters" ], "Resource": "*" } ] }

AWS PrivateLink 엔드포인트가 설정되고 활성화되면 PostgreSQL 클라이언트를 사용하여 Aurora DSQL 클러스터에 연결할 수 있습니다. 아래 연결 지침은 AWS PrivateLink 엔드포인트를 통해 연결하기 위한 적절한 호스트 이름을 구성하는 단계를 간략하게 설명합니다.

1단계: 클러스터의 서비스 이름 가져오기

클러스터에 연결하기 위한 AWS PrivateLink 엔드포인트를 생성할 때 먼저 해당 클러스터의 서비스 이름을 가져와야 합니다.

AWS CLI
aws dsql get-vpc-endpoint-service-name \ --region us-east-1 \ --identifier your-cluster-id

응답의 예

{
    "serviceName": "com.amazonaws.us-east-1.dsql-fnh4"
}

서비스 이름에는 예시의 dsql-fnh4와 같은 식별자가 포함됩니다. 이 식별자는 클러스터에 연결하기 위한 호스트 이름을 구성할 때도 필요합니다.

AWS SDK for Python (Boto3)
import boto3 dsql_client = boto3.client('dsql', region_name='us-east-1') response = dsql_client.get_vpc_endpoint_service_name( identifier='your-cluster-id' ) service_name = response['serviceName'] print(f"Service Name: {service_name}")
AWS SDK for Java 2.x
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.dsql.DsqlClient; import software.amazon.awssdk.services.dsql.model.GetVpcEndpointServiceNameRequest; import software.amazon.awssdk.services.dsql.model.GetVpcEndpointServiceNameResponse; String region = "us-east-1"; String clusterId = "your-cluster-id"; DsqlClient dsqlClient = DsqlClient.builder() .region(Region.of(region)) .credentialsProvider(DefaultCredentialsProvider.create()) .build(); GetVpcEndpointServiceNameResponse response = dsqlClient.getVpcEndpointServiceName( GetVpcEndpointServiceNameRequest.builder() .identifier(clusterId) .build() ); String serviceName = response.serviceName(); System.out.println("Service Name: " + serviceName);

2단계: Amazon VPC 엔드포인트 생성

이전 단계에서 얻은 서비스 이름을 사용하여 Amazon VPC 엔드포인트를 생성합니다.

중요

아래 연결 지침은 프라이빗이 DNS를 활성화한 경우에만 클러스터에 연결할 수 있습니다. 엔드포인트를 생성할 때 --no-private-dns-enabled 플래그를 사용하지 마세요. 사용하면 아래 연결 지침이 제대로 작동하지 않습니다. 프라이빗 DNS를 비활성화하는 경우 생성된 엔드포인트를 가리키는 자체 와일드카드 프라이빗 DNS 레코드를 생성해야 합니다.

AWS CLI
aws ec2 create-vpc-endpoint \ --region us-east-1 \ --service-name service-name-for-your-cluster \ --vpc-id your-vpc-id \ --subnet-ids subnet-id-1 subnet-id-2 \ --vpc-endpoint-type Interface \ --security-group-ids security-group-id

응답의 예

{
    "VpcEndpoint": {
        "VpcEndpointId": "vpce-0123456789abcdef0",
        "VpcEndpointType": "Interface",
        "VpcId": "vpc-0123456789abcdef0",
        "ServiceName": "com.amazonaws.us-east-1.dsql-fnh4",
        "State": "pending",
        "RouteTableIds": [],
        "SubnetIds": [
            "subnet-0123456789abcdef0",
            "subnet-0123456789abcdef1"
        ],
        "Groups": [
            {
                "GroupId": "sg-0123456789abcdef0",
                "GroupName": "default"
            }
        ],
        "PrivateDnsEnabled": true,
        "RequesterManaged": false,
        "NetworkInterfaceIds": [
            "eni-0123456789abcdef0",
            "eni-0123456789abcdef1"
        ],
        "DnsEntries": [
            {
                "DnsName": "*.dsql-fnh4.us-east-1.vpce.amazonaws.com",
                "HostedZoneId": "Z7HUB22UULQXV"
            }
        ],
        "CreationTimestamp": "2025-01-01T00:00:00.000Z"
    }
} 
SDK for Python
import boto3 ec2_client = boto3.client('ec2', region_name='us-east-1') response = ec2_client.create_vpc_endpoint( VpcEndpointType='Interface', VpcId='your-vpc-id', ServiceName='com.amazonaws.us-east-1.dsql-fnh4', # Use the service name from previous step SubnetIds=[ 'subnet-id-1', 'subnet-id-2' ], SecurityGroupIds=[ 'security-group-id' ] ) vpc_endpoint_id = response['VpcEndpoint']['VpcEndpointId'] print(f"VPC Endpoint created with ID: {vpc_endpoint_id}")
SDK for Java 2.x

Aurora DSQL API에 엔드포인트 URL 사용

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.ec2.Ec2Client; import software.amazon.awssdk.services.ec2.model.CreateVpcEndpointRequest; import software.amazon.awssdk.services.ec2.model.CreateVpcEndpointResponse; import software.amazon.awssdk.services.ec2.model.VpcEndpointType; String region = "us-east-1"; String serviceName = "com.amazonaws.us-east-1.dsql-fnh4"; // Use the service name from previous step String vpcId = "your-vpc-id"; Ec2Client ec2Client = Ec2Client.builder() .region(Region.of(region)) .credentialsProvider(DefaultCredentialsProvider.create()) .build(); CreateVpcEndpointRequest request = CreateVpcEndpointRequest.builder() .vpcId(vpcId) .serviceName(serviceName) .vpcEndpointType(VpcEndpointType.INTERFACE) .subnetIds("subnet-id-1", "subnet-id-2") .securityGroupIds("security-group-id") .build(); CreateVpcEndpointResponse response = ec2Client.createVpcEndpoint(request); String vpcEndpointId = response.vpcEndpoint().vpcEndpointId(); System.out.println("VPC Endpoint created with ID: " + vpcEndpointId);

AWS PrivateLink 연결 엔드포인트를 사용하여 Aurora DSQL 클러스터에 연결

AWS PrivateLink 엔드포인트가 설정되고 활성화되면(Stateavailable인지 확인) PostgreSQL 클라이언트를 사용하여 Aurora DSQL 클러스터에 연결할 수 있습니다. AWS SDK 사용에 대한 지침은 Programming with Aurora DSQL의 가이드를 참조하세요. 호스트 이름 형식과 일치하도록 클러스터 엔드포인트를 변경해야 합니다.

호스트 이름 구성

AWS PrivateLink를 통해 연결하기 위한 호스트 이름은 퍼블릭 DNS 호스트 이름과 다릅니다. 다음 구성 요소를 사용하여 구성해야 합니다.

  1. Your-cluster-id

  2. 서비스 이름의 서비스 식별자입니다. 예: dsql-fnh4

  3. AWS 리전은

다음 형식을 사용합니다. cluster-id.service-identifier.region.on.aws

예: PostgreSQL을 사용하여 연결

# Set environment variables export CLUSTERID=your-cluster-id export REGION=us-east-1 export SERVICE_IDENTIFIER=dsql-fnh4 # This should match the identifier in your service name # Construct the hostname export HOSTNAME="$CLUSTERID.$SERVICE_IDENTIFIER.$REGION.on.aws" # Generate authentication token export PGPASSWORD=$(aws dsql --region $REGION generate-db-connect-admin-auth-token --hostname $HOSTNAME) # Connect using psql psql -d postgres -h $HOSTNAME -U admin

일반적인 문제 및 해결 방법

다음 표에는 Aurora DSQL과 AWS PrivateLink를 함께 사용할 때와 관련된 일반적인 문제와 해결 방법이 나와 있습니다.

문제 가능한 원인 Solution

연결 제한 시간

보안 그룹이 제대로 구성되지 않음

Amazon VPC Reachability Analyzer를 사용하여 네트워킹 설정이 포트 5432에서 트래픽을 허용하는지 확인합니다.

DNS 확인 실패

프라이빗 DNS가 활성화되지 않음

프라이빗 DNS가 활성화된 상태에서 Amazon VPC 엔드포인트가 생성되었는지 확인합니다.

인증 실패

자격 증명이 잘못됨 또는 토큰이 만료됨

새 인증 토큰을 생성하고 사용자 이름을 확인합니다.

서비스 이름을 찾을 수 없음

클러스터 ID가 잘못됨

서비스 이름을 가져올 때 클러스터 ID와 AWS 리전을 다시 확인합니다.

자세한 정보는 다음 자료를 참조하세요.