AWS Glue와 Amazon S3에 대한 Amazon Redshift Spectrum 크로스 계정 액세스를 생성하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Redshift Spectrum을 사용하여 동일한 AWS 리전 내에 있는 다른 AWS 계정의 AWS Glue와 Amazon Simple Storage Service(S3)에 액세스하려고 합니다. 어떻게 해야 하나요?

간략한 설명

Amazon Redshift Spectrum과 다른 계정에 있는 AWS 리소스에 액세스하려면 다음 단계를 수행합니다.

1.    계정 1에서 Amazon Redshift와 신뢰 관계가 있는 AWS Identity and Access Management(IAM) 역할을 생성합니다. 이 역할은 Amazon Redshift 클러스터에 연결되어야 합니다.

2.    계정 2에서 AWS Glue와 Amazon S3에 모두 액세스할 수 있는 다른 역할을 생성합니다. 이 역할은 신뢰 관계를 편집하고 Amazon Redshift 계정이 이 역할을 맡을 수 있도록 합니다.

3.    계정 1에서 기존 역할의 권한을 편집하여 AWS Glue 및 Amazon S3 계정에서 생성된 역할을 사용하도록 합니다.

해결 방법

계정 1: Amazon Redshift와 신뢰 관계가 있는 AWS Identity and Access Management(IAM) 역할 생성

1.    IAM 콘솔을 엽니다.

2.    역할을 탐색 창에서 선택한 다음 역할 생성을 선택합니다.

3.    신뢰할 수 있는 개체 유형 선택에서 AWS 서비스를 선택합니다.

4.    Redshift를 선택합니다.

5.    사용 사례 선택에서 Redshift - 사용자 지정을 선택합니다.

6.    다음: 권한, 다음: 태그다음: 검토를 선택합니다. 정책이나 태그를 추가할 필요가 없습니다.

7.    역할 이름을 입력한 다음 역할 생성을 선택합니다. 다음 예에서는 이 역할을 redshift_role1이라고 합니다.

8.    redshift_role1을 Amazon Redshift 클러스터와 연결합니다. 이 연결을 통해 클러스터는 새로 생성된 역할을 맡아 Amazon S3, Amazon Athena 및 AWS Glue에 액세스할 수 있습니다.

계정 2: AWS Glue 및 Amazon S3에 액세스할 수 있는 다른 역할 생성

1.    IAM 콘솔을 엽니다.

2.    정책을 선택한 다음 정책 생성을 선택합니다.

3.    JSON 탭을 선택한 후 다음과 비슷한 IAM 정책을 입력합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "glue:BatchCreatePartition",
        "glue:UpdateDatabase",
        "glue:CreateTable",
        "glue:DeleteDatabase",
        "glue:GetTables",
        "glue:GetPartitions",
        "glue:BatchDeletePartition",
        "glue:UpdateTable",
        "glue:BatchGetPartition",
        "glue:DeleteTable",
        "glue:GetDatabases",
        "glue:GetTable",
        "glue:GetDatabase",
        "glue:GetPartition",
        "glue:CreateDatabase",
        "glue:BatchDeleteTable",
        "glue:CreatePartition",
        "glue:DeletePartition",
        "glue:UpdatePartition"
      ],
      "Resource": "*"
    },
    {
      "Sid": "VisualEditor1",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucketMultipartUploads",
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListMultipartUploadParts"
      ],
      "Resource": [
        "arn:aws:s3:::your_bucket",
        "arn:aws:s3:::your_bucket/*"
      ]
    },
    {
      "Sid": "VisualEditor2",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "<KMS_KEY_ARN>"
      ]
    }
  ]
}

your_bucket을 Amazon Redshift Spectrum으로 액세스하려는 S3 버킷의 이름으로 바꿉니다. KMS_KEY_ARN을 S3 버킷을 암호화하는 KMS 키의 ARN으로 바꿉니다.

참고: S3 버킷의 파일이 암호화된 경우 Amazon Redshift에 적절한 권한을 부여해야 합니다.

4.    정책 검토를 선택합니다.

5.    정책 이름을 입력한 다음 정책 생성을 선택합니다.

6.    탐색 창에서 역할을 선택한 다음 역할 생성을 선택합니다.

7.    신뢰할 수 있는 엔터티 유형 선택에서 다른 AWS 계정을 선택합니다.

8.    계정 ID에는 Amazon Redshift를 사용하는 계정의 ID를 입력합니다. 자세한 내용을 보려면 AWS 계정 ID 찾기를 참조하세요.

9.    다음: 권한을 선택합니다.

10.    정책 목록에서 생성한 정책 이름 옆에 있는 확인란을 선택합니다.

11.    다음: 태그를 선택한 후 다음: 검토를 선택합니다. 태그를 추가할 필요가 없습니다.

12.    역할 이름을 입력한 다음 역할 생성을 선택합니다. 다음 예에서는 이것을 glue_s3_role2라고 합니다.

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

14.    생성한 역할의 이름을 선택한 다음 신뢰 관계 탭을 선택합니다.

15.    그런 다음, 신뢰 관계 편집을 선택합니다.

16.    기존 정책을 삭제한 후 다음과 유사한 정책으로 교체합니다. redshift\ _account1을 Amazon Redshift를 사용하는 계정의 ID로 바꾸세요. redshift\ _role1을 처음 생성한 역할의 이름으로 바꾸세요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::redshift_account1:role/redshift_role1"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

17.    신뢰 정책 업데이트를 선택합니다.

계정 1: Amazon Redshift에서 생성한 역할에 대한 권한 편집

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 역할을 선택한 다음 이전에 생성한 첫 번째 역할(redshift\ _role1)의 이름을 선택합니다.

3.    권한 섹션에서 인라인 정책 추가를 선택합니다.

4.    JSON 탭을 선택합니다. 기존 정책을 삭제한 후 다음과 비슷한 IAM 정책을 입력합니다. glue_s3_account2를 AWS Glue와 Amazon S3를 사용하는 계정의 ID로 바꾸세요. glue_s3_role2를 생성한 두 번째 역할의 이름으로 바꾸세요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1487639602000",
      "Effect": "Allow",
      "Action": [
        "sts:AssumeRole"
      ],
      "Resource": "arn:aws:iam::glue_s3_account2:role/glue_s3_role2"
    }
  ]
}<br>

5.    정책 검토를 선택합니다.

6.    정책 이름을 입력한 다음 정책 생성을 선택합니다.

7.    Amazon Redshift 클러스터에 연결합니다.

8.    다음 예와 같이 두 계정에서 생성한 역할을 사용하여 외부 스키마를 생성합니다.

create external schema spectrum_schema
from data catalog
database 'your_db'
iam_role 'arn:aws:iam::redshift_account1:role/redshift_role1,arn:aws:iam::glue_s3_account2:role/glue_s3_role2'

다음과 같이 값을 바꿉니다.
your_db: AWS Glue에 있는 데이터베이스의 이름.
redshift_account1: Amazon Redshift 계정의 ID.
redshift\ _role1: Amazon Redshift 계정에서 생성한 역할의 이름.
glue_s3_account2: AWS Glue와 Amazon S3 계정의 ID.
glue_s3_role2: AWS Glue와 Amazon S3 계정에서 생성한 역할의 이름.

이제 모든 리소스가 동일한 리전에 있는 한, redshift\ _account1의 Amazon Redshift 클러스터에서 Amazon Redshift Spectrum을 사용하여 glue_s3_account2에서 AWS Glue 테이블을 쿼리할 수 있습니다. Redshift Spectrum은 기존 AWS Glue 테이블에 액세스할 수 있으므로 외부 테이블을 다시 생성할 필요가 없습니다.

다음 예제의 쿼리는 외부 스키마에서 생성된 AWS Glue 테이블의 행 수를 반환합니다.

select count(*) from spectrum_schema.glue_table;

참고: spectrum_schemaglue_table을 스키마 및 AWS Glue 테이블의 이름으로 바꾸세요.

관련 정보

Amazon Redshift에서 IAM 역할 연결

Amazon Redshift Spectrum에 대한 IAM 정책

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