Amazon Redshift에서 다른 계정의 Amazon S3 버킷으로 데이터를 COPY 또는 UNLOAD하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Redshift와 다른 계정에 있는 Amazon Simple Storage Service(S3) 버킷 간에 데이터를 COPY 또는 UNLOAD하려고 합니다. 하지만 다른 계정에서 AWS Identity and Access Management(IAM) 역할을 수임할 수 없습니다. 교차 계정 액세스를 설정하려면 어떻게 해야 합니까?

간략한 설명

Amazon Redshift를 사용하는 계정과 다른 계정에 있는 Amazon S3 리소스에 액세스하려면 다음 단계를 수행하세요. 다음 단계는 Redshift 서버리스 및 Redshift가 프로비저닝한 데이터 웨어하우스에 모두 적용됩니다.

1.    Amazon S3 계정에서 IAM 역할인 RoleA를 생성합니다.

2.    RoleA를 수임할 권한이 있는 Amazon Redshift 계정에서 IAM 역할 RoleB를 생성합니다.

3.    RoleARoleB 간의 교차 계정 액세스를 테스트합니다.

참고: 이 단계는 데이터 형식에 관계없이 작동합니다. 그러나 이러한 작업을 수행하는 동안 COPY 및 UNLOAD 명령 구문에 몇 가지 변경 사항이 있을 수 있습니다. 예를 들어 Parquet 데이터 형식을 사용하는 경우 구문은 다음과 같습니다.

copy table_name from 's3://awsexamplebucket/crosscopy1.csv' iam_role 'arn:aws:iam::Amazon_Redshift_Account_ID:role/RoleB,arn:aws:iam::Amazon_S3_Account_ID:role/RoleA format as parquet;

해결 방법

참고: 다음 단계에서는 Amazon Redshift 클러스터와 S3 버킷이 동일한 리전에 있다고 가정합니다. 이 둘이 서로 다른 리전에 있다면 COPY 또는 UNLOAD 명령에 REGION 파라미터를 추가해야 합니다.

Amazon S3(RoleA)를 사용하는 계정에서 IAM 역할을 생성합니다.

1.    IAM 콘솔을 엽니다.

2.    [Policies]를 선택한 후 [Create policy]를 선택합니다.

3.    [JSON] 탭을 선택하고 다음과 같은 IAM 정책을 입력합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:Encrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": [
        "<KMS_KEY_ARN_A_Used_for_S3_encryption>"
      ]
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": [
        "arn:aws:s3:::awsexamplebucket",
        "arn:aws:s3:::awsexamplebucket/*"
      ]
    }
  ]
}

awsexamplebucket은 액세스하려는 S3 버킷의 이름으로 바꿉니다. 또한 KMS_KEY_ARN_A_Used_for_S3_encryption은 S3 버킷을 암호화하는 데 사용되는 AWS Key Management Service(AWS KMS)의 Amazon 리소스 이름(ARN)으로 바꿉니다.

참고: S3 버킷이 AWS KMS 키로 암호화되지 않은 경우에는 AWS KMS 권한이 필요하지 않습니다.

4.    [정책 검토(Review policy)]를 선택합니다.

5.    정책 이름(예: policy_for_roleA)을 입력한 다음 정책 생성을 선택합니다.

6.    탐색 창에서 역할을 선택합니다.

7.    역할 생성을 선택합니다.

8.    신뢰할 수 있는 엔터티 역할로 다른 AWS 계정을 선택합니다.

9.    Amazon Redshift를 사용 중인 계정(RoleB)의 AWS 계정 ID를 입력합니다.

10.    다음: 권한을 선택한 후 방금 생성한 정책(policy_for_roleA)을 선택합니다.

11.    [다음: 태그(Next: Tags)]를 선택한 후 [다음: 검토(Next: Review)]를 선택합니다. 태그는 필요하지 않습니다.

12.    역할 이름(예: RoleA)을 입력합니다.

13.    [역할 생성(Create role)]을 선택합니다.

RoleA를 수임할 권한이 있는 Amazon Redshift 계정에서 IAM 역할(RoleB) 생성

1.    IAM 콘솔을 엽니다.

2.    [Policies]를 선택한 후 [Create policy]를 선택합니다.

3.    [JSON] 탭을 선택하고 다음과 같은 IAM 정책을 입력합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CrossAccountPolicy",
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "AmazonS3AccountRoleARN"
    }
  ]
}

AmazonS3AccountRoleARNRoleA의 ARN(arn:aws:iam::Amazon_S3_Account_ID:role/RoleA)으로 바꿉니다.

4.    [정책 검토(Review policy)]를 선택합니다.

5.    정책 이름(예: policy_for_roleB)을 입력한 다음 정책 생성을 선택합니다.

6.    탐색 창에서 역할을 선택합니다.

7.    역할 생성을 선택합니다.

8.    신뢰할 수 있는 엔터티 유형으로 AWS 서비스를 선택합니다.

9.    Redshift를 선택합니다.

10.    Redshift - 사용자 지정 가능을 선택합니다.

11.    다음: 권한을 선택한 후 방금 생성한 정책(policy_for_roleB)을 선택합니다.

12.    [다음: 태그(Next: Tags)]를 선택한 후 [다음: 검토(Next: Review)]를 선택합니다. 태그는 필요하지 않습니다.

13.    역할 이름(예: RoleB)을 입력합니다.

14.    [역할 생성(Create role)]을 선택합니다.

15.    IAM 역할(RoleB)을 Amazon Redshift 클러스터에 연결합니다.

        프로비저닝된 Redshift 클러스터의 경우 IAM 역할을 클러스터와 연결을 참조하세요.

        -또는-

        Redshift 서버리스의 경우 Amazon Redshift 서버리스의 보안 및 연결에서 네임스페이스에 IAM 역할 할당하기를 참조하세요.

참고: Amazon Redshift에서 IAM 역할을 연결하면 Amazon Redshift 클러스터가 RoleB를 수임하고, 그런 다음 RoleA를 수임합니다. 이 역할 연결을 통해 Amazon Redshift가 Amazon S3에 액세스할 수 있습니다.

S3 버킷과 Amazon Redshift 간의 교차 계정 액세스 테스트

COPY 명령을 실행하여 S3 버킷에서 Amazon Redshift로 데이터를 가져옵니다.

copy table_name from 's3://awsexamplebucket/crosscopy1.csv' iam_role 'arn:aws:iam::Amazon_Redshift_Account_ID:role/RoleB,arn:aws:iam::Amazon_S3_Account_ID:role/RoleA' delimiter ',' removequotes;

예제에서 다음 값을 대체합니다.

table_name: Amazon S3 데이터를 복사하려는 Amazon Redshift 테이블
s3://awsexamplebucket/crosscopy1.csv: 복사하려는 데이터가 있는 S3 버킷
Amazon_Redshift_Account_ID: Amazon Redshift 계정의 AWS 계정 ID
RoleB: 생성한 두 번째 역할
Amazon_S3_Account_ID: Amazon S3 계정의 AWS 계정 ID
RoleA: 생성한 첫 번째 역할

그런 다음 UNLOAD 명령을 실행하여 Amazon Redshift에서 S3 버킷으로 데이터를 언로드하는 방식으로 교차 계정 액세스를 확인합니다.

unload ('select * from table_name') to 's3://awsexamplebucket/folder/table_name_' iam_role 'arn:aws:iam::Amazon_Redshift_Account_ID:role/RoleB,arn:aws:iam::Amazon_S3_Account_ID:role/RoleA' KMS_KEY_ID 'ARN_KMS_KEY_ID' ENCRYPTED;

예제에서 다음 값을 대체합니다.

table_name: S3 버킷으로 업로드하려는 Amazon Redshift 테이블
s3://awsexamplebucket/folder/test.dat: Amazon Redshift 데이터를 언로드할 S3 경로
Amazon_Redshift_Account_ID: Amazon Redshift 계정의 AWS 계정 ID
RoleB: 생성한 두 번째 역할
Amazon_S3_Account_ID: Amazon S3 계정의 AWS 계정 ID
RoleA: 생성한 첫 번째 역할
ARN_KMS_KEY_ID: S3 버킷을 암호화하는 데 사용되는 KMS 키 ID의 ARN


관련 정보

Amazon S3 버킷에 있는 객체에 대한 교차 계정 액세스 권한을 제공하려면 어떻게 해야 합니까?

다른 AWS 계정의 S3 객체를 복사하려면 어떻게 해야 합니까?

COPY, UNLOAD 및 CREATE LIBRARY 작업을 위한 IAM 권한

AWS 공식
AWS 공식업데이트됨 일 년 전