Amazon Redshift에서 UNLOAD 관련 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 25일

Amazon Redshift 클러스터에서 Amazon Simple Storage Service(Amazon S3) 로 데이터를 언로드하려고 합니다. 그런데 오류가 발생합니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Amazon Redshift 클러스터에서 Amazon S3 버킷으로 데이터를 언로드할 때 다음 오류가 발생할 수 있습니다.

DB 사용자에게 AWS Identity and Access Management(IAM) 역할을 수임할 권한 없음 오류

error:  User arn:aws:redshift:us-west-2:<account-id>:dbuser:<cluster-identifier>/<dbuser username> is not authorized to assume IAM Role arn:aws:iam::<account-id>:role/<Role name> 4

403 액세스 거부 오류

[Amazon](500310) Invalid operation: S3ServiceException:Access Denied,Status 403,Error AccessDenied,

참고: 데이터를 S3 버킷으로 언로드할 때 SELECT 문과 함께 UNLOAD 명령을 사용하십시오. 로드되는 동안 사용된 데이터 형식에 관계없이, 텍스트 데이터를 구분된 형식 또는 고정 폭 형식으로 언로드합니다. 압축된 Gzip 파일을 제출할지 여부를 지정할 수도 있습니다.

해결 방법

DB 사용자에게 AWS IAM 역할을 수임할 권한 없음 오류

데이터베이스 사용자에게 IAM 역할을 수임할 권한이 없는 경우 다음을 확인합니다.

403 액세스 거부 오류

S3 버킷에서 403 액세스 거부 오류가 발생하는 경우 S3 API 작업에 대해 적절한 권한이 부여되었는지 확인합니다.

  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:Get*",       
        "s3:List*",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::your_bucket",
        "arn:aws:s3:::your_bucket/*"
      ]
    }
  ]
}

S3 관리형 암호화 키를 사용한 서버 측 암호화를 사용하는 경우 S3 버킷은 고유한 키로 각 객체를 암호화합니다. 추가적인 보호 조치로서 키 자체는 정기적으로 교체되는 마스터 키로 암호화됩니다. 

저장된 데이터를 암호화하려면 S3 버킷 정책의 s3:x-amz-server-side-encryption 파라미터가 “true”로 설정되어 있는지 확인합니다.

 "Condition": {
   "Null": {
           "s3:x-amz-server-side-encryption": "true"
           }

암호화된 데이터를 S3 버킷에 UNLOAD할 수 있도록 KMS_KEY_ID가 암호화되었는지 확인합니다.

unload ('select * from a') to 's3://mybucket/test/varchar/' iam_role 'arn:aws:iam::xxxxxx:role/RedshiftS3Access' ALLOWOVERWRITE CSV
KMS_KEY_ID '11111111111111111111111111'
encrypted;

S3 버킷이 AWS Key Management Service(AWS KMS)의 마스터 키로 암호화된 경우 IAM 정책에 다음 권한을 추가합니다.

"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
]