AWS 기술 블로그

Amazon Redshift와 Keycloak을 활용한 사설망 내 중앙 집중화된 사용자 인증 및 권한 관리 – 사설망 내 Amazon Redshift 클러스터 생성 및 PrivateLink 구성

안내

글은 총 5개의 이어지는 글로 구성된 Amazon Redshift Keycloak 활용한 사설망 중앙 집중화된 사용자 인증 권한 관리 시리즈의 첫번째 글에 해당됩니다. 사설망에서 ID Federation 통하여 Amazon Redshift 연결, 사용하고 상세 수준 권한관리를 하시려는 독자분들께서는 시리즈의 첫번째 부터 순서대로 읽으시며 실습을 겸하시면 필요한 구성을 성공적으로 진행하실 있습니다. 

** 글에서 이어집니다.

단계 3: Amazon Redshift 클러스터 생성 및 Amazon Redshift 엔드포인트 생성

인터넷으로부터 격리된 네트워크 환경에서 ID 페더레이션으로 Amazon Redshift 서비스를 사용하기 위해서는 클라이언트가 Amazon Redshift 클러스터 엔드포인트(그림 3의 3.2) 뿐만 아니라, 클러스터를 관리하는 Amazon Redshift 엔드포인트(그림 3의 3.3)에 비공개로 접근할 수 있도록 구성해야 합니다.

3.1. Amazon Redshift 클러스터를 생성합니다.

  • 컴퓨팅 용량: Amazon Redshift에서 클러스터를 생성하는 방법은 Amazon Redshift 클러스터 배포 유형에 따라 다릅니다. 프로비저닝 클러스터의 경우 사용자가 직접 노드 유형과 노드 수를 선택하여 용량을 결정하지만, 서버리스 작업 그룹은 컴퓨팅 용량이 자동으로 관리되며 사용자가 RPU(Redshift Processing Units)를 사용하여 기본 용량과 최대 용량을 지정할 수 있습니다.
  • 네트워크 및 보안: 클라이언트가 비공개 네트워크로 데이터베이스에 접속할 수 있도록 엔드포인트 위치를 프라이빗 서브넷으로 지정하고, 보안 그룹을 설정하여 데이터베이스에 대한 접근 권한을 관리합니다. 또한 향상된 VPC 라우팅 기능을 활성화하여 데이터베이스와 Amazon S3와 같은 데이터 리포지토리 간의 네트워크 트래픽이 인터넷 대신 VPC를 통해 라우팅 되도록 합니다. 이 기능은 프로비저닝 클러스터와 서버리스 작업 그룹 모두에서 지원됩니다.
  • 관리자 암호: AWS Secrets Manager에서 관리자 보안 인증 정보를 관리할 수도 있습니다. 이를 위해서는 프라이빗 서브넷에 AWS Secrets Manager용 VPC 엔드포인트를 설정해야 합니다.
  • 연결된 IAM 역할: Amazon Redshift가 사용자를 대신하여 Amazon S3, AWS Glue와 같은 AWS 서비스에 액세스할 수 있도록 권한을 부여할 수 있습니다. 이 권한은 AWS IAM 역할을 클러스터와 연결하는 메커니즘으로 동작합니다. 또한 Amazon Redshift는 연결된 IAM 역할 외에도 ID 페더레이션 방식으로 Amazon Redshift 로컬 리소스와 Amazon Redshift Spectrum 외부 스키마(External schema)에 대한 액세스 관리를 지원합니다. 이러한 기능을 사용하면 세분화된 액세스 제어를 구현할 수 있으며, 보안 모범 사례를 따르는 데 도움이 됩니다.
  • 데이터베이스 암호화: Amazon Redshift는 암호화 키 계층을 통해 데이터베이스를 암호화합니다. 데이터베이스 암호화는 저장된 데이터를 보호할 뿐만 아니라 클러스터 스냅샷의 데이터 블록 및 시스템 메타데이터도 암호화합니다.
  • 감사 로깅: Amazon Redshift 서비스는 기본적으로 감사 로그를 제공합니다. 감사 로그는 사용자 로그, 연결 로그, 사용자 활동 로그 세 가지 유형으로 구분되며, Amazon S3 버킷이나 Amazon CloudWatch Logs에 저장할 수 있습니다. 이렇게 저장된 로그를 통해 보안 모니터링과 규정 준수 활동을 효과적으로 수행할 수 있습니다.

3.2. Amazon Redshift 클러스터 엔드포인트 정보를 확인합니다.

Amazon Redshift 클러스터 생성이 완료되면, 클라이언트가 데이터베이스에 접속할 수 있는 클러스터 엔드포인트가 자동으로 생성됩니다. 이 엔드포인트는 데이터베이스 생성 시 사용자가 지정한 프라이빗 서브넷에 위치하게 됩니다. Amazon Redshift 클러스터 배포 유형에 따라 엔드포인트 정보를 확인하는 방법은 다음과 같습니다.

3.2.1.   Amazon Redshift 서버리스 작업 그룹(예: dw-workgroup)의 엔드포인트 정보를 확인하는 방법

AWS 관리 콘솔과 AWS CLI를 사용하여 Amazon Redshift 서버리스 작업 그룹의 엔드포인트를 조회한 결과는 다음과 같습니다. 이 결과를 통해 Amazon Redshift 서버리스 작업 그룹의 엔드포인트가 여러 가용 영역에 구성되었음을 확인할 수 있습니다.

3.2.1.1. AWS 관리 콘솔에서 Amazon Redshift 서버리스 작업 그룹을 조회합니다.

Amazon Redshift 서버리스 작업 그룹의 엔드포인트 형식

workgroup-name.account-id.region-code.redshift-serverless.amazonaws.com:port/database-name
Bash
  • workgroup-name: 서버리스 작업 그룹의 이름입니다.
  • account-id: AWS 계정 ID입니다.
  • region-code: 서버리스 작업 그룹 엔드포인트가 위치한 AWS 리전 (예: us-east-1, ap-northeast-2 등)입니다.
  • redshift-serverless.amazonaws.com: Amazon Redshift 서버리스 서비스의 도메인 이름입니다.
  • port: 연결에 사용되는 포트 번호입니다. 기본값은 5439이지만, 5431-5455 또는 8191-8215 범위의 포트로 변경할 수 있습니다.
  • database-name: 서버리스 작업 그룹의 데이터베이스 이름입니다.

3.2.1.2. AWS CLI로 Amazon Redshift 서버리스 작업 그룹을 조회합니다.

aws redshift-serverless get-workgroup \
--workgroup-name dw-workgroup \
--query 'workgroup.endpoint'

{
    "address": "dw-workgroup.460560861820.ap-northeast-2.redshift-serverless.amazonaws.com",
    "port": 5439,
    "vpcEndpoints": [
        {
            "networkInterfaces": [
                {
                    "availabilityZone": "ap-northeast-2c",
                    "networkInterfaceId": "eni-063c2418c7605b6e9",
                    "privateIpAddress": "10.0.43.189",
                    "subnetId": "subnet-00bce718fbb9619dc"
                },
                {
                    "availabilityZone": "ap-northeast-2b",
                    "networkInterfaceId": "eni-0b172f78b610e7fb8",
                    "privateIpAddress": "10.0.42.39",
                    "subnetId": "subnet-000846b0ea0fa40b2"
                },
                {
                    "availabilityZone": "ap-northeast-2a",
                    "networkInterfaceId": "eni-0fec11b82cd8be521",
                    "privateIpAddress": "10.0.41.65",
                    "subnetId": "subnet-0561c89e392d1c57d"
                }
            ],
            "vpcEndpointId": "vpce-051a8bfa09b69cef7",
            "vpcId": "vpc-0f0f08a656ba2f09e"
        }
    ]
}
Bash

3.2.2. Amazon Redshift 프로비저닝 클러스터(예: dw-provisioned-cluster)의 엔드포인트 정보를 확인하는 방법

아래는 AWS 관리 콘솔과 AWS CLI를 사용하여 Redshift 프로비저닝 클러스터의 클러스터 엔드포인트를 조회한 결과입니다. 클러스터 엔드포인트가 하나의 가용 영역에 있는 프라이빗 서브넷에 구성되었습니다.

3.2.2.1.  AWS 관리 콘솔에서 Amazon Redshift 클러스터를 조회합니다.

Amazon Redshift 클러스터의 엔드포인트 형식

cluster-name.unique-id.region-code.redshift.amazonaws.com:port/database-name
Bash
  • cluster-name: 클러스터를 생성할 때 지정한 이름입니다.
  • unique-id: AWS에서 자동으로 생성한 고유 식별자입니다.
  • region-code: 클러스터가 위치한 AWS 리전 (예: us-east-1, ap-northeast-2 등)입니다.
  • amazonaws.com: Amazon Redshift 서비스의 도메인 이름입니다.
  • port: 클러스터가 사용하는 포트 번호입니다. 기본값은 5439입니다
  • database-name: 클러스터의 데이터베이스 이름입니다.

3.2.2.2. AWS CLI로 Amazon Redshift 클러스터를 조회합니다.

aws redshift describe-clusters \
--cluster-identifier dw-provisioned-cluster \
--query 'Clusters[*].[Endpoint]'

[
    [
        {
            "Address": "dw-provisioned-cluster.cxl18sipp7q4.ap-northeast-2.redshift.amazonaws.com",
            "Port": 5439,
            "VpcEndpoints": [
                {
                    "VpcEndpointId": "vpce-0717ee5b8ad9c7f20",
                    "VpcId": "vpc-0f0f08a656ba2f09e",
                    "NetworkInterfaces": [
                        {
                            "NetworkInterfaceId": "eni-0ad5c52bcb2faf316",
                            "SubnetId": "subnet-0561c89e392d1c57d",
                            "PrivateIpAddress": "10.0.41.21",
                            "AvailabilityZone": "ap-northeast-2a"
                        }
                    ]
                }
            ]
        }
    ]
]
Bash

3.3. Amazon Redshift 엔드포인트를 생성합니다.

Amazon Redshift 엔드포인트를 생성하기에 앞서, Amazon Redshift가 제공하는 세 가지 유형의 VPC 엔드포인트에 대해 정확히 이해할 필요가 있습니다.

  • Amazon Redshift 클러스터 엔드포인트: Amazon Redshift 프로비저닝 클러스터 또는 서버리스 작업 그룹을 최초 생성할 때 만들어지는 엔드포인트입니다. 이는 실제 데이터베이스 연결에 사용됩니다.
    # Redshift 서버리스 작업 그룹의 엔드포인트 형식
    workgroup-name.account-id.region-code.redshift-serverless.amazonaws.com:port/database-name
    
    # Redshift 프로비저닝 클러스터의 엔드포인트 형식
    cluster-name.unique-id.region-code.redshift.amazonaws.com:port/database-name
    
    Bash
  • Amazon Redshift 엔드포인트: Amazon Redshift 클러스터 생성, 삭제, 모니터링 등 Redshift 관리 및 제어를 위한 엔드포인트입니다. ID 페더레이션으로 Redshift 클러스터에 연결할 때 필요한 임시 데이터베이스 자격 증명도 이 엔드포인트를 통해 제공됩니다. 그리고 Amazon Redshift 클러스터 배포 유형에 따라 Amazon Redshift 엔드포인트 형식이 다릅니다.
    # Amazon Redshift 서버리스 작업 그룹 관리를 위한 엔드포인트 형식
    redshift-serverless.region-code.amazonaws.com
    
    # Amazon Redshift 프로비저닝 클러스터 관리를 위한 엔드포인트 형식
    redshift.region-code.amazonaws.com
    
    Bash
  • Amazon Redshift 관리형 VPC 엔드포인트: Amazon Redshift 관리형 VPC 엔드포인트는 강력한 보안 모델을 제공합니다. 이를 통해 다른 계정, VPC, 또는 서브넷에서 Redshift 클러스터가 있는 VPC와 직접적인 연결이 없어도 클러스터에 비공개로 접근할 수 있습니다. 이 기능은 이 글의 주제를 벗어나므로 자세히 다루지 않겠지만, 알아두면 유용한 중요한 보안 기능입니다.

정리하면, Amazon Redshift 클러스터 또는 서버리스 작업 그룹 엔드포인트는 Amazon Redshift 클러스터 생성 시 지정한 VPC 서브넷에 자동으로 생성됩니다. 그러나 Amazon Redshift 엔드포인트는 Amazon Redshift 클러스터 배포 유형에 따라 사용자가 직접 생성해야 합니다. 다음은 Amazon Redshift 프로비저닝 클러스터를 비공개 네트워크에서 관리하기 위해 Amazon Redshift 엔드포인트를 다중 가용 영역 서브넷에 생성하는 AWS 관리 콘솔 화면입니다.

다음은 Redshift 서버리스 작업 그룹을 관리하기 위해 Amazon Redshift 서버리스 엔드포인트를 다중 가용 영역 서브넷에 생성하는 AWS 관리 콘솔 화면입니다.

그리고 다음 AWS CLI를 통해 Amazon Redshift 클러스터 배포 유형별 Redshift 엔드포인트 정보를 확인할 수 있습니다.

export VPC_ID=vpc-0f0f08a656ba2f09e
export REGION_CODE=ap-northeast-2

aws ec2 describe-vpc-endpoints \
  --filters "Name=vpc-id,Values=$VPC_ID" "Name=service-name,Values=com.amazonaws.$REGION_CODE.redshift,com.amazonaws.$REGION_CODE.redshift-serverless" \
  --region $REGION_CODE \
  --query 'VpcEndpoints[].{VpcEndpointType:VpcEndpointType,ServiceName:ServiceName,VpcEndpointId:VpcEndpointId,SubnetIds:join(``, SubnetIds),NetworkInterfaceIds:join(``, NetworkInterfaceIds)}' \
  --output table
--------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                 DescribeVpcEndpoints                                                                 |
+-----------------------+----------------------------------------------------+---------------------------+-------------------------+-------------------+
|  NetworkInterfaceIds  |                    ServiceName                     |         SubnetIds         |      VpcEndpointId      |  VpcEndpointType  |
+-----------------------+----------------------------------------------------+---------------------------+-------------------------+-------------------+
|  eni-0e7ff9695db44071e|  com.amazonaws.ap-northeast-2.redshift-serverless  |  subnet-046b83b9e7426ede3 |  vpce-07361862e3c93afd3 |  Interface        |
|  eni-0125e2c4df7cebdd9|  com.amazonaws.ap-northeast-2.redshift             |  subnet-046b83b9e7426ede3 |  vpce-0cd81abcd85dac010 |  Interface        |
+-----------------------+----------------------------------------------------+---------------------------+-------------------------+-------------------+
Bash

단계 4: ID 페더레이션과 Amazon Redshift Spectrum 활용 시 필요한 AWS PrivateLink 구성

4.1. ID 페더레이션 및 Amazon Redshift 서비스 통합을 위한 AWS PrivateLink 설정

ID 페더레이션을 통해 Amazon Redshift 프로비저닝 클러스터나 서버리스 작업 그룹에 접속할 때는 DB 사용자 이름과 암호 대신 AWS STS에서 발급한 임시 보안 자격 증명을 사용합니다. 또한, Amazon Redshift Spectrum을 활용하여 Amazon S3의 데이터를 쉽게 카탈로그화하고, 접근 권한을 관리하며, ETL 과정 없이 엑사바이트 규모의 쿼리를 수행하려면 Amazon S3, AWS Glue Data Catalog, AWS Lake Formation 서비스에 대한 접근이 필요합니다. 이들 서비스에 비공개로 접근하기 위해서는 Amazon Redshift 엔드포인트를 구성할 때와 마찬가지로 각 서비스 엔드포인트를 프라이빗 서브넷에 구성해야 합니다.

# AWS STS VPC 엔드포인트 서비스 이름
com.amazonaws.ap-northeast-2.sts

# AWS Glue VPC 엔드포인트 서비스 이름
com.amazonaws.ap-northeast-2.glue

# AWS Lake Formation VPC 엔드포인트 서비스 이름
com.amazonaws.ap-northeast-2.lakeformation

# Amazon S3 VPC 엔드포인트 서비스 이름
com.amazonaws.ap-northeast-2.s3
Bash

다음은 AWS STS 서비스 엔드포인트 구성 예시이며, 프라이빗 DNS 이름이 활성화되어 있고 엔드포인트 네트워크 인터페이스에 사설 IP 주소가 할당된 것을 확인할 수 있습니다.

4.2. 윈도우 인스턴스에서 VPC 엔드포인트의 프라이빗 DNS 이름 확인

비공개 네트워크 환경에서 사용자가 ID 페더레이션을 통해 Amazon Redshift 데이터베이스에 접속하기 위해서는 클라이언트가 Amazon Redshift 프로비저닝 클러스터 또는 서버리스 작업 그룹의 엔드포인트와 AWS 서비스 엔드포인트의 프라이빗 DNS 이름을 해석할 수 있어야 합니다.

온프레미스 네트워크에서 VPC에 대한 DNS 쿼리를 허용하려면 AWS에 인바운드 Resolver 엔드포인트를 구성해야 합니다.

윈도우 인스턴스에서 DNS이름 해석을 위해, 일단 지금까지 구성한 모든 VPC 엔드포인트 정보를 AWS CLI로 확인해 보겠습니다.

# AWS 서비스 VPC 엔드포인트 조회
export VPC_ID=vpc-0f0f08a656ba2f09e
export REGION_CODE=ap-northeast-2

aws ec2 describe-vpc-endpoints \
--filters "Name=vpc-id,Values=$VPC_ID" "Name=service-name,Values=com.amazonaws.$REGION_CODE.sts,
   com.amazonaws.$REGION_CODE.s3,
   com.amazonaws.$REGION_CODE.glue,
   com.amazonaws.$REGION_CODE.lakeformation,
   com.amazonaws.$REGION_CODE.redshift,
   com.amazonaws.$REGION_CODE.redshift-serverless,
   com.amazonaws.vpce.$REGION_CODE.*" \
--region $REGION_CODE \
--query 'sort_by(VpcEndpoints, &ServiceName)[].{
   State:State,
   VpcEndpointType:VpcEndpointType,
   ServiceName:ServiceName,
   VpcEndpointId:VpcEndpointId}' \
--output table;
----------------------------------------------------------------------------------------------------------------------------
|                                                   DescribeVpcEndpoints                                                   |
+---------------------------------------------------------------+------------+-------------------------+-------------------+
|                          ServiceName                          |   State    |      VpcEndpointId      |  VpcEndpointType  |
+---------------------------------------------------------------+------------+-------------------------+-------------------+
|  com.amazonaws.ap-northeast-2.glue                            |  available |  vpce-0cef9977cf1c87fb1 |  Interface        |
|  com.amazonaws.ap-northeast-2.lakeformation                   |  available |  vpce-01b5fa7d3f0815725 |  Interface        |
|  com.amazonaws.ap-northeast-2.redshift                        |  available |  vpce-0cd81abcd85dac010 |  Interface        |
|  com.amazonaws.ap-northeast-2.redshift-serverless             |  available |  vpce-07361862e3c93afd3 |  Interface        |
|  com.amazonaws.ap-northeast-2.s3                              |  available |  vpce-04052c644115fc784 |  Gateway          |
|  com.amazonaws.ap-northeast-2.s3                              |  available |  vpce-0ca14469822a4019a |  Interface        |
|  com.amazonaws.ap-northeast-2.sts                             |  available |  vpce-0c8b69fc5a48eaa44 |  Interface        |
|  com.amazonaws.vpce.ap-northeast-2.vpce-svc-08921e31ea2ee5fa9 |  available |  vpce-0717ee5b8ad9c7f20 |  Interface        |
|  com.amazonaws.vpce.ap-northeast-2.vpce-svc-097d975e2344c386e |  available |  vpce-051a8bfa09b69cef7 |  Interface        |
+---------------------------------------------------------------+------------+-------------------------+-------------------+
Bash

서비스 이름이 com.amazonaws.vpce.region-code.vpce-svc-* 인 VPC 엔드포인트는 클라이언트가 데이터베이스에 연결하기 위한 Amazon Redshift 프로비저닝 클러스터와 서버리스 작업 그룹의 엔드포인트입니다. 단계 3.2에서 확인한 클러스터 엔드포인트의 VpcEndpointId 값과 비교해보면 값이 일치함을 알 수 있습니다.

그리고 각 VPC 엔드포인트의 사설 IP 주소는 다음 AWS CLI 명령어로 확인할 수 있습니다.

export VPC_ID=vpc-0f0f08a656ba2f09e
export REGION_CODE=ap-northeast-2


aws ec2 describe-network-interfaces \
--filters Name=vpc-id,Values=$VPC_ID \
--query 'sort_by(NetworkInterfaces, &PrivateIpAddress)[*].{
    PrivateIpAddress:PrivateIpAddress,
    AvailabilityZone:AvailabilityZone,
    Description:Description,
    NetworkInterfaceId:NetworkInterfaceId,
    OwnerId:OwnerId,
    RequesterId:RequesterId,
    RequesterManaged:RequesterManaged,
    Status:Status
}' \
--output table
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|                                                                                               DescribeNetworkInterfaces                                                                                              |
+------------------+-----------------------------------------------------------------+------------------------+---------------+-------------------+-------------------------------------+-------------------+----------+
| AvailabilityZone |                           Description                           |  NetworkInterfaceId    |    OwnerId    | PrivateIpAddress  |             RequesterId             | RequesterManaged  | Status   |
+------------------+-----------------------------------------------------------------+------------------------+---------------+-------------------+-------------------------------------+-------------------+----------+
|  ap-northeast-2a |                                                                 |  eni-0818f6ebbbc268297 |  460560861820 |  10.0.11.142      |  None                               |  False            |  in-use  |
|  ap-northeast-2a |  Interface for NAT Gateway nat-0a1f949e883b6b0ae                |  eni-0a6dccda0a98dc3e0 |  460560861820 |  10.0.11.224      |  300325803109                       |  True             |  in-use  |
|  ap-northeast-2a |  AWS Lambda VPC ENI-jaebo-34949a66-7cf0-464c-b247-ff40829b5fb7  |  eni-00368386d1fafa193 |  460560861820 |  10.0.21.105      |  AROAWWO4RBJ6B5LER5TCW:251931893616 |  False            |  in-use  |
|  ap-northeast-2a |                                                                 |  eni-0f292a071189507dc |  460560861820 |  10.0.21.93       |  None                               |  False            |  in-use  |
|  ap-northeast-2b |  AWS Lambda VPC ENI-jaebo-811493d8-c7cc-4319-8cef-1ac6e98b8ca5  |  eni-02ba6d16498172c26 |  460560861820 |  10.0.22.194      |  AROAWWO4RBJ6B5LER5TCW:251931893616 |  False            |  in-use  |
|  ap-northeast-2c |  AWS Lambda VPC ENI-jaebo-720c1e9d-70a0-4703-8876-462296e543fc  |  eni-06c018a1396dbe7cd |  460560861820 |  10.0.23.25       |  AROAWWO4RBJ6B5LER5TCW:251931893616 |  False            |  in-use  |
|  ap-northeast-2a |                                                                 |  eni-0410895727eabcf64 |  460560861820 |  10.0.31.154      |  None                               |  False            |  in-use  |
|  ap-northeast-2a |                                                                 |  eni-0dc58dbf7d331ea30 |  460560861820 |  10.0.31.38       |  None                               |  False            |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-0717ee5b8ad9c7f20                  |  eni-0ad5c52bcb2faf316 |  460560861820 |  10.0.41.21       |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  RedshiftNetworkInterface                                       |  eni-0c404fcfbe86fdfb0 |  460560861820 |  10.0.41.33       |  AIDAJEK3QC2NQFRWZJRH2              |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-051a8bfa09b69cef7                  |  eni-0fec11b82cd8be521 |  460560861820 |  10.0.41.65       |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2b |  RedshiftNetworkInterface                                       |  eni-05cdc7efdee74213d |  460560861820 |  10.0.42.162      |  AIDAJEK3QC2NQFRWZJRH2              |  True             |  in-use  |
|  ap-northeast-2b |  VPC Endpoint Interface vpce-051a8bfa09b69cef7                  |  eni-0b172f78b610e7fb8 |  460560861820 |  10.0.42.39       |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2c |  VPC Endpoint Interface vpce-051a8bfa09b69cef7                  |  eni-063c2418c7605b6e9 |  460560861820 |  10.0.43.189      |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-05838be959feef096                  |  eni-0a673449fec555502 |  460560861820 |  10.0.81.155      |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-01417090108816aea                  |  eni-076f858a09d251605 |  460560861820 |  10.0.81.158      |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-0c8b69fc5a48eaa44                  |  eni-0981d179a315d530a |  460560861820 |  10.0.81.185      |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-07361862e3c93afd3                  |  eni-0e7ff9695db44071e |  460560861820 |  10.0.81.189      |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-01b5fa7d3f0815725                  |  eni-0b801ce60fe0c74b4 |  460560861820 |  10.0.81.190      |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-0cef9977cf1c87fb1                  |  eni-02fc9ad1b43d9fdfa |  460560861820 |  10.0.81.213      |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-0ca14469822a4019a                  |  eni-089b3fe5481bf2e18 |  460560861820 |  10.0.81.23       |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-0cd81abcd85dac010                  |  eni-0125e2c4df7cebdd9 |  460560861820 |  10.0.81.249      |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-0b428b3f83836fe1c                  |  eni-03c24183a710bcea7 |  460560861820 |  10.0.81.28       |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-09cb598ce2c02a59d                  |  eni-002ab9ed64dbc69ac |  460560861820 |  10.0.81.64       |  727180483921                       |  True             |  in-use  |
|  ap-northeast-2a |  VPC Endpoint Interface vpce-07a4d12cea221d559                  |  eni-08ced569eda161fe3 |  460560861820 |  10.0.81.92       |  727180483921                       |  True             |  in-use  |
+------------------+-----------------------------------------------------------------+------------------------+---------------+-------------------+-------------------------------------+-------------------+----------+
Bash

이제 SQL 클라이언트를 실행할 윈도우 인스턴스에서 Amazon Redshift 클러스터 및 서비스 VPC 엔드포인트의 프라이빗 DNS 이름을 해석할 수 있는지 확인해 보겠습니다.

4.2.1. Amazon Redshift 엔드포인트의 프라이빗 DNS 이름 조회

윈도우 인스턴스에서 nslookup 유틸리티를 사용하여 이전 단계에서 생성한 Amazon Redshift 엔드포인트의 프라이빗 DNS 이름을 확인합니다. 이때 프라이빗 IP 주소가 반환되는지 확인합니다. 프라이빗 IP 주소가 정상적으로 반환되면, 클라이언트는 이 주소를 통해 ID 페더레이션을 사용하여 Amazon Redshift 클러스터에 접속하기 위한 임시 데이터베이스 자격 증명을 획득할 수 있습니다.

# Amazon Redshift 서버리스 작업 그룹 관리를 위한 프라이빗 Redshift 엔드포인트 DNS 조회
C:\>nslookup redshift-serverless.ap-northeast-2.amazonaws.com
Server:  ip-10-0-0-2.ap-northeast-2.compute.internal
Address:  10.0.0.2

Non-authoritative answer:
Name:    redshift-serverless.ap-northeast-2.amazonaws.com
Address:  10.0.81.189

# Amazon Redshift 프로비저닝 클러스터 관리를 위한 프라이빗 Redshift 엔드포인트 DNS 조회
C:\>nslookup redshift.ap-northeast-2.amazonaws.com
Server:  ip-10-0-0-2.ap-northeast-2.compute.internal
Address:  10.0.0.2

Non-authoritative answer:
Name:    redshift.ap-northeast-2.amazonaws.com
Address:  10.0.81.249
Bash

10.0.0.2는 VPC 네트워크(10.0.0.0/16)의 DNS 서버 IP 주소입니다. 이 주소는 VPC의 기본 네트워크 주소에 2를 더한 값으로 AWS에서 예약한 주소입니다.

4.2.2. 데이터베이스 연결을 위한 Amazon Redshift 프로비저닝 클러스터와 서버리스 작업그룹 엔드포인트의 프라이빗 DNS 이름 조회

4.2.2.1. Amazon Redshift 서버리스 작업 그룹의 엔드포인트 조회

# Redshift 작업 그룹 이름 예: dw-workgroup
# AWS CLI로 Amazon Redshift 서버리스 작업 그룹의 Endpoint 주소 확인
export REDSHIFT_SERVERLESS_ENDPOINT_ADDRESS=$(aws redshift-serverless get-workgroup \
--workgroup-name dw-workgroup \
--query 'workgroup.endpoint.address' \
--output text)

echo ${REDSHIFT_SERVERLESS_ENDPOINT_ADDRESS}

dw-workgroup.account-id.ap-northeast-2.redshift-serverless.amazonaws.com
# 윈도우 인스턴스에서 검증
nslookup ${REDSHIFT_SERVERLESS_ENDPOINT_ADDRESS}

c:\>nslookup dw-workgroup.account-id.ap-northeast-2.redshift-serverless.amazonaws.com
Server:  ip-10-0-0-2.ap-northeast-2.compute.internal
Address:  10.0.0.2

Non-authoritative answer:
Name:    vpce-051a8bfa09b69cef7-lx6wvdc8.vpce-svc-097d975e2344c386e.ap-northeast-2.vpce.amazonaws.com
Addresses:  10.0.41.65
          10.0.43.189
          10.0.42.39
Aliases:  dw-workgroup.account-id.ap-northeast-2.redshift-serverless.amazonaws.com
Bash

4.2.2.2. Amazon Redshift 프로비저닝 클러스터의 엔드포인트 조회

# Redshift프로비저닝 클러스터 이름 예: dw-provisioned-cluster
# AWS CLI로Amazon Redshift 클러스터의 Endpoint 주소 확인
export REDSHIFT_PROVISIONED_ENDPOINT_ADDRESS=$(aws redshift describe-clusters \
--cluster-identifier dw-provisioned-cluster \
--query 'Clusters[*].[Endpoint.Address]' \
--output text)

echo ${REDSHIFT_PROVISIONED_ENDPOINT_ADDRESS}

dw-provisioned-cluster.cxl18sipp7q4.ap-northeast-2.redshift.amazonaws.com
# 윈도우 인스턴스에서 검증
nslookup ${REDSHIFT_PROVISIONED_ENDPOINT_ADDRESS}

c:\>nslookup dw-provisioned-cluster.cxl18sipp7q4.ap-northeast-2.redshift.amazonaws.com
Server:  ip-10-0-0-2.ap-northeast-2.compute.internal
Address:  10.0.0.2

Non-authoritative answer:
Name:    vpce-0717ee5b8ad9c7f20-wqh479pc.vpce-svc-08921e31ea2ee5fa9.ap-northeast-2.vpce.amazonaws.com
Address:  10.0.41.21
Aliases:  dw-provisioned-cluster.cxl18sipp7q4.ap-northeast-2.redshift.amazonaws.com
Bash

4.2.3. Amazon Redshift 이외의 AWS 서비스를 위한 VPC 엔드포인트 프라이빗 DNS 이름 조회

윈도우 인스턴스에서 Amazon Redshift에서 사용할 모든 AWS 서비스 엔드포인트의 프라이빗 DNS 이름을 해석하면, Amazon S3 서비스 엔드포인트를 제외하고 해당 엔드포인트의 사설 IP 주소가 반환되는 것을 아래와 같이 확인할 수 있습니다.

인터넷 게이트웨이나 NAT 게이트웨이에 대한 경로가 없는 프라이빗 서브넷에 윈도우 인스턴스가 위치함에도 불구하고, Amazon S3 서비스 엔드포인트로 공인 IP 주소가 반환된 이유는 윈도우 인스턴스에서 Amazon S3로 향하는 트래픽의 라우팅 테이블에 Amazon S3에 대한 게이트웨이 엔드포인트가 대상으로 추가했기 때문입니다. Amazon S3에 대한 프라이빗 DNS를 구성하는데 있어서 다음을 참고하시면 도움이 됩니다.

C:\Users\Administrator>nslookup sts.ap-northeast-2.amazonaws.com
Server:  ip-10-0-0-2.ap-northeast-2.compute.internal
Address:  10.0.0.2

Non-authoritative answer:
Name:    sts.ap-northeast-2.amazonaws.com
Address:  10.0.81.185


C:\Users\Administrator>nslookup glue.ap-northeast-2.amazonaws.com
Server:  ip-10-0-0-2.ap-northeast-2.compute.internal
Address:  10.0.0.2

Non-authoritative answer:
Name:    glue.ap-northeast-2.amazonaws.com
Address:  10.0.81.213


C:\Users\Administrator>nslookup lakeformation.ap-northeast-2.amazonaws.com
Server:  ip-10-0-0-2.ap-northeast-2.compute.internal
Address:  10.0.0.2

Non-authoritative answer:
Name:    lakeformation.ap-northeast-2.amazonaws.com
Address:  10.0.81.190


C:\Users\Administrator>nslookup s3.ap-northeast-2.amazonaws.com
Server:  ip-10-0-0-2.ap-northeast-2.compute.internal
Address:  10.0.0.2

Non-authoritative answer:
Name:    s3.ap-northeast-2.amazonaws.com
Address:  52.219.206.73
Bash

** 다음 글로 이어집니다.

Joonghoon Shin

Joonghoon Shin

신중훈 솔루션즈 아키텍트는 금융 고객을 대상으로 클라우드 전략을 제안하고 클라우드 전환을 지원하는 역할을 수행하고 있습니다.

JeongKwon Lee

JeongKwon Lee

이정권 솔루션 아키텍트는 Redshift 서비스를 중심으로 AWS 기반의 서비스를 구성하고자 하는 고객분들께 클라우드 환경에 최적화된 아키텍처 가이드와 POC 등을 지원하는 역할을 수행하고 있습니다.

JongHyok Lee

JongHyok Lee

이종혁 Sr Analytics Specialist SA는 데이터와 애플리케이션 영역의 분석, 설계 및 구현과 관련된 다양한 경험을 바탕으로 고객분들께서 AWS의 분석 서비스들을 잘 활용하실 수 있도록 기술적인 도움을 드리고 있습니다.