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

3분 분량
0

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

간략한 설명

Redshift 클러스터에 연결된 AWS Identity and Access Management(IAM) 역할에는 AWS Glue 및 Amazon 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"

Redshift Spectrum 테이블을 쿼리하고 S3 버킷이 AWS Key Management Service(AWS KMS) 암호화 키를 사용하는 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.

"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 정책을 연결해야 합니다. AWS KMS 키를 사용하여 S3 버킷을 암호화한 경우에는 해당 키를 사용하기 위한 권한도 추가해야 합니다.

해결 방법

IAM 정책을 생성합니다. 그런 다음, Redshift 클러스터에 연결된 IAM 역할에 다음 정책을 연결합니다.

AWSGlueConsoleFullAccess AWS 관리형 정책을 연결합니다.

데이터를 저장하는 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"
      ]
    }
  ]
}

참고: bucket name을 S3 버킷의 이름으로 바꾸십시오.

AWS KMS 키로 암호화된 버킷의 경우 Redshift Spectrum이 Amazon S3의 암호화된 데이터를 해독할 수 있도록 최소 권한을 제공하는 다음 IAM 정책을 연결하십시오.

{
  "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"
      ]
    }
  ]
}

참고: region을 S3 버킷이 위치한 AWS 리전으로 바꾸십시오. 또한 AWS account ID를 계정 ID로 바꾸고 KMS key ID를 KMS 암호화 키로 바꾸십시오.

관련 정보

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

Amazon Redshift Spectrum에 대한 IAM 정책

AWS 공식
AWS 공식업데이트됨 2달 전
댓글 없음