로컬 시스템에서 프라이빗 Amazon Redshift 클러스터에 액세스하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 8월 27일

로컬 컴퓨터를 사용하여 Amazon Virtual Private Cloud(VPC)의 프라이빗 서브넷에 있는 Amazon Redshift 클러스터에 액세스하려고 합니다. 어떻게 해야 합니까?

간략한 설명

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 및 SQL Workbench/J를 사용하여 SSH 터널을 생성합니다. 터널은 로컬 시스템에서 프라이빗 Amazon Redshift 클러스터로 들어오는 모든 트래픽을 라우팅합니다.

​해결 방법

VPC, EC2 인스턴스 및 Amazon Redshift 클러스터 생성

1.    퍼블릭 서브넷과 프라이빗 서브넷이 있는 VPC 생성

2.    Amazon Linux 2 Amazon Machine Image(AMI)에서 1단계에서 생성한 VPC의 퍼블릭 서브넷으로 EC2 인스턴스를 시작합니다. 인스턴스를 생성할 때 다음 옵션을 선택합니다.
3단계에서 [Auto-assign Public IP]에 [Enable]을 선택합니다. 또는 탄력적 IP 주소를 인스턴스에 할당할 수 있습니다.
6단계에서 SSH 규칙으로 새 보안 그룹을 생성합니다. [Source]에서 [Custom]을 선택한 다음, IP CIDR 블록을 입력하거나 [My IP]를 선택합니다.

3.    [Amazon Redshift 콘솔]에서 클러스터 서브넷 그룹을 생성합니다.
[VPC ID]에서 1단계에서 생성한 VPC의 ID를 선택합니다.
[Subnet ID]에서 프라이빗 서브넷의 ID를 선택합니다.

4.    새 보안 그룹을 생성합니다.

5.    인스턴스의 보안 그룹에서 인바운드 트래픽을 허용하는 규칙을 새로 생성된 보안 그룹에 추가합니다.
[Type]에서 [Custom TCP]를 선택합니다.
[Port Range]에 5439 (Amazon Redshift의 기본 포트)를 입력합니다.
[Source]에 [Custom]을 선택하고 2단계에서 생성한 보안 그룹 이름을 입력합니다.

6.    새 Amazon Redshift 클러스터를 시작하거나 스냅샷에서 클러스터를 복원합니다. [Additional Configuration] 페이지에서 다음 옵션을 선택합니다.
[Choose a VPC]에서 1단계에서 생성한 VPC를 선택합니다.
[Cluster subnet group]에서 3단계에서 생성한 그룹을 선택합니다.
[Publicly accessible]에서 [No]를 선택합니다.
[VPC security groups]에서 4단계에서 생성한 보안 그룹을 선택합니다.

계속하기 전에 클러스터가 available 상태가 될 때까지 기다립니다.

7.    다음 명령을 실행하여 로컬 시스템에서 EC2 인스턴스에 연결합니다. [your_key.pem] 및 [your_EC2_endpoint]를 해당 값으로 바꿉니다. 자세한 내용은 SSH를 사용하여 Linux 인스턴스에 연결을 참조하십시오.

ssh -i "your_key.pem" ec2-user@your_EC2_endpoint

8.   다음 명령을 실행하여 telnet을 설치합니다.

sudo yum install telnet

9.    telnet을 사용하여 Amazon Redshift 클러스터에 대한 연결을 테스트합니다. 다음 명령에서 cluster-endpointcluster-port를 해당 값으로 바꿉니다.

telnet cluster-endpoint cluster-port

또는 dig를 사용하여 로컬 시스템이 Amazon Redshift 클러스터의 프라이빗 IP 주소에 도달할 수 있는지 확인합니다. 다음 명령에서 cluster-endpoint를 클러스터 엔드포인트로 바꿉니다.

dig cluster-endpoint

터널 생성

1.    로컬 시스템에 SQL Workbench/J를 설치합니다.

2.    최신 Amazon Redshift JDBC 드라이버를 다운로드합니다.

3.    SQL Workbench/J에 2단계에서 다운로드한 JDBC 드라이버를 사용하여 연결 프로필을 생성합니다.

4.    SQL Workbench/J에 SSH 연결을 구성하려면 [SSH]를 선택하고 다음 을(를) 입력합니다.
SSH 호스트 이름: EC2 인스턴스의 퍼블릭 IP 주소 또는 DNS
SSH 포트: 22
사용자 이름: ec2-user
프라이빗 키 파일: EC2 인스턴스를 생성할 때 다운로드한 .pem 파일
암호: 이 필드는 비워 둠
로컬 포트: 사용하지 않는 임의의 로컬 포트(Amazon Redshift 클러스터는 기본적으로 5439 포트 사용)
DB 호스트 이름: 클러스터 엔드포인트(포트 번호 또는 데이터베이스 이름을 포함하지 않아야 함)
DB 포트: 5439
JDBC URL 다시 쓰기: 이 옵션 선택

5.    OK를 선택하여 SSH 설정을 저장합니다.

6.    JDBC URL과 슈퍼 사용자 이름 및 암호를 올바르게 입력했는지 확인합니다.

7.    [Test]를 선택하여 연결이 작동하는지 확인합니다. 자세한 내용은 SQL Workbench/J 설명서의 SSH 터널을 통해 연결을 참조하십시오.

(선택 사항) AWS Identity and Access Management(IAM) 사용자에 대한 연결 수정

IAM 사용자로 Amazon Redshift 클러스터에 연결하려면 이전 단계에서 생성한 연결 프로필을 수정합니다.

1.    IAM 사용자에게 dbgroup, dbuser 및 dbname 리소스에 대해 GetClusterCredentials, JoinGroup 및 CreateClusterUser Amazon Redshift 작업을 허용하는 정책이 있는지 확인합니다. 다음 예제에서 아래와 같은 값을 대체합니다.
us-west-2: 클러스터가 위치한 지역
012345678912: 해당 AWS 계정 ID
clustername: 클러스터의 이름
group_name: 데이터베이스 그룹 이름
user_name: Amazon Redshift 사용자 이름(특정 사용자를 지정하는 대신 "*" 사용 가능)
database_name: 데이터베이스 이름

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "redshift:GetClusterCredentials",
                "redshift:CreateClusterUser",
                "redshift:JoinGroup"
            ],
            "Resource": [
                "arn:aws:redshift:eu-west-2:012345678912:dbgroup:clustername/group_name",
                "arn:aws:redshift:eu-west-2:012345678912:dbuser:clustername/user_name or * ",
                "arn:aws:redshift:eu-west-2:012345678912:dbname:clustername/database_name"
            ]
        }
    ]
}

2.    SQL Workbench/J에서 연결 프로필의 JDBC URL의 첫 번째 부분을 jdbc: redshift: iam으로 변경합니다. (예: jdbc: redshift: iam://127.0.0.1:5439/example).

3.    [Extended Properties]를 선택한 후 다음 속성을 생성합니다.
AccessKeyID
: IAM 사용자의 액세스 키 ID
SecretAccessKey: IAM 사용자의 보안 액세스 키
DbGroups: 선택 사항 – IAM 사용자가 기존 그룹에 참여하도록 강제합니다.
DbUser: IAM 사용자의 이름
AutoCreate: true로 설정
ClusterID
: Amazon Redshift 클러스터의 이름(데이터베이스 이름 아님)
지역
: 클러스터가 위치한 AWS 지역(예: us-east-1)

4.    클러스터 연결 프로필 페이지에서 [Test]를 선택합니다.


이 문서가 도움이 되었습니까?


결제 또는 기술 지원이 필요합니까?