내용으로 건너뛰기

AWS Glue와 Amazon S3에 대한 Amazon Redshift Spectrum 교차 계정 액세스를 생성하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Redshift Spectrum을 사용하여 다른 AWS 계정의 AWS Glue와 Amazon Simple Storage Service(S3)에 액세스하려고 합니다.

해결 방법

Amazon Redshift를 신뢰하는 IAM 역할 만들기

Amazon Redshift Spectrum을 사용하여 교차 계정 AWS 리소스에 액세스하려면 Amazon Redshift를 신뢰하는 AWS Identity and Access Management(IAM) 역할을 만들어야 합니다. 그런 다음 Amazon Redshift 클러스터에 역할을 연결합니다.

다음 단계를 완료합니다.

  1. IAM 콘솔을 엽니다.
  2. 탐색 창에서 역할을 선택합니다.
  3. 역할 생성을 선택합니다.
  4. 신뢰할 수 있는 개체 유형 선택에서 AWS 서비스를 선택합니다.
  5. Redshift를 선택합니다.
  6. 사용 사례 선택에서 Redshift - 사용자 지정을 선택합니다.
  7. 다음: 권한, 다음: 태그다음: 검토를 선택합니다.
    참고: 정책이나 태그를 추가할 필요가 없습니다.
  8. 역할 이름을 입력하고, 역할 생성을 선택합니다. 다음 예시에서 역할은 redshift_role1입니다.
  9. redshift_role1을 Amazon Redshift 클러스터와 연결합니다. 이 연결을 통해 클러스터는 새로 생성된 역할을 맡아 Amazon S3, Amazon Athena 및 AWS Glue에 액세스할 수 있습니다.

AWS Glue 및 Amazon S3에 액세스할 수 있는 새 IAM 역할 만들기

다른 계정에서 AWS Glue와 Amazon S3에 모두 액세스할 수 있는 새 IAM 역할을 만듭니다. Amazon Redshift는 신뢰 관계를 통해 AWS Glue와 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. 기존 정책을 삭제한 후 다음 예시와 유사한 정책으로 교체합니다.

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

참고: redshift\ _account1을 Amazon Redshift를 사용하는 계정의 ID로 바꿉니다. redshift\ _role1을 처음 생성한 역할의 이름으로 바꿉니다.

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

Amazon Redshift IAM 역할의 권한 업데이트

만들었던 첫 번째 IAM 역할의 권한을 업데이트합니다. 다음 단계를 완료합니다.

  1. IAM 콘솔을 엽니다.

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

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

  4. JSON 탭을 선택합니다. 기존 정책을 삭제한 후 다음 예시와 비슷한 IAM 정책을 입력합니다.

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

    참고: glue_s3_account2를 AWS Glue와 Amazon S3를 사용하는 계정의 ID로 바꿉니다. glue_s3_role2를 생성한 두 번째 역할의 이름으로 바꿉니다.

  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 계정에서 생성한 역할의 이름.

    Create External Schema DDL 문에서 IAM 역할 ARN을 redshift_cluster_role, destination_account_role 순서로 나열합니다. 역할 사이에 공백을 포함하지 마십시오.

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

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

select count(*) from spectrum_schema.glue_table;

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

관련 정보

Amazon Redshift가 사용자를 대신하여 AWS 서비스에 액세스할 수 있도록 승인

Amazon Redshift Spectrum에 대한 IAM 정책

AWS 공식업데이트됨 10달 전