Amazon Redshift와 동일한 계정에서 Amazon S3 버킷이 있는 Redshift Spectrum을 사용하여 액세스 거부 오류를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 11월 17일

Amazon Redshift 클러스터와 동일한 계정 내에서 Amazon Simple Storage Service(S3) 버킷에 저장된 데이터에 액세스하고 싶습니다. 또한 AWS Glue가 있는 Amazon Redshift Spectrum을 데이터 카탈로그로 사용하여 데이터에 액세스하려고 합니다. 하지만 권한 오류가 발생합니다.

간략한 설명

Redshift 클러스터에 연결된 AWS Identity and Access Management(IAM) 역할에는 AWS Glue 및 S3 서비스에 대한 권한이 있어야 합니다. IAM 역할에 올바른 권한이 없는 경우 다음과 같은 오류가 발생할 수 있습니다.

외부 스키마를 만들 때:

SQL Error [XX000]: ERROR: 
  User: arn:aws:sts::111111111111:assumed-role/KCARole/RedshiftIamRoleSession is not authorized to perform: glue:CreateDatabase on resource: arn:aws:glue:eu-west-1:111111111111:catalog because no identity-based policy allows the glue:CreateDatabase action

Redshift Spectrum 테이블을 쿼리하려고 할 때:

SQL Error [XX000]: ERROR: Spectrum Scan Error
  Detail: 
  -----------------------------------------------
  error:  Spectrum Scan Error
  code:      15007
  context:   Forbidden: HTTP response error code: 403 Message: AccessDenied Access Denied

S3 버킷에서 Key Management Services(AWS KMS) 암호화 키를 사용하는 Redshift Spectrum 테이블을 쿼리하려고 할 때:

SQL Error [XX000]: ERROR: Spectrum Scan Error
  Detail: 
  -----------------------------------------------
  error:  Spectrum Scan Error
  code:      15007
  context:   Forbidden: HTTP response error code: 403 Message: AccessDenied The ciphertext refers to a customer master key that does not exist, does not exist in this region, or you are not allowed to access

이러한 오류를 해결하려면 Amazon Redshift에서 사용하는 IAM 역할에 필요한 권한이 포함된 IAM 정책을 연결해야 합니다. KMS 키를 사용하여 S3 버킷을 암호화한 경우 키 사용 권한도 연결해야 합니다.

해결 방법

AWS 관리형 정책 AWSGlueConsoleFullAccess를 Redshift 클러스터에 연결된 IAM 역할에 연결합니다.

다음 예를 사용하여 IAM 정책을 생성하고 Redshift 클러스터에 연결된 IAM 역할에 정책을 연결합니다. 이렇게 하면 데이터가 저장된 S3 버킷에 대한 읽기 액세스가 허용됩니다.

참고: 버킷 이름을 S3 버킷의 이름으로 바꿉니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allows Redshift to Read S3 bucket specified",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::<bucket name>/*",
        "arn:aws:s3:::<bucket name>"
      ]
    }
  ]
}

Redshift Spectrum이 사용하는 S3 버킷이 AWS KMS 암호화 키를 사용하여 암호화된 경우 다음 IAM 정책을 생성하여 연결합니다. 정책을 Redshift 클러스터에 연결된 IAM 역할에 연결합니다. 이 정책은 Redshift Spectrum이 Amazon S3의 암호화된 데이터를 해독할 수 있도록 액세스를 제공합니다. 다음은 암호 해독을 허용하는 최소 권한의 예입니다.

참고: 리전을 S3 버킷이 위치한 AWS 리전으로 바꾸고, AWS 계정 ID를 계정 ID로 바꾸고, KMS 키 ID를 KMS 암호화 키로 바꿉니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Allow Redshift to use the KMS key",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey"
      ],
      "Resource": [
        "arn:aws:kms:<region>:<AWS account ID>:key/<KMS key ID>"
      ]
    }
  ]
}