2017-11-16 9 views
0

s3의 많은 파일에서 Redshift로 데이터를 복사하려고합니다. 이 파일이 들어있는 s3 버킷에 대한 읽기 전용 액세스 권한이 있습니다. 효율적으로 복사하기 위해 필자는 복사해야하는 각 파일에 대한 링크가 포함 된 매니페스트 파일을 만들었습니다. 이 명령을 실행할 때s3에서 Redshift로 데이터 복사 : 매니페스트가 다운로드해야하는 파일과 다른 버킷에 있음

-- Load data from s3 
copy data_feed_eval from 's3://bucket-2/data_files._manifest' 
CREDENTIALS 'aws_access_key_id=bucket_1_key;aws_secret_access_key=bucket_1_secret' 
manifest 
csv gzip delimiter ',' dateformat 'YYYY-MM-DD' timeformat 'YYYY-MM-DD HH:MI:SS' 
maxerror 1000 TRUNCATECOLUMNS; 

그러나, 나는 다음과 같은 오류가 발생합니다 : :

여기
Bucket 1: 
- file1.gz 
- file2.gz 
- ... 

Bucket 2: 
- manifest 

내가 버킷 2 매니페스트를 사용하여 버킷 1에서 데이터를 복사하려고 한 명령입니다
09:45:32 [COPY - 0 rows, 7.576 secs] [Code: 500310, SQL State: XX000] [Amazon](500310) Invalid operation: Problem reading manifest file - S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid 901E02533CC5010D,ExtRid tEvf/TVfZzPfSNAFa8iTYjTBjvaHnMMPmuwss58SwopY/sZSkhUBe3yMGHTDyA0yDhDCD7ybX9gl45pV/eQ=,CanRetry 1 
Details: 
----------------------------------------------- 
    error: Problem reading manifest file - S3ServiceException:Access Denied,Status 403,Error AccessDenied,Rid 901E02533CC5010D,ExtRid tEvf/TVfZzPfSNAFa8iTYjTBjvaHnMMPmuwss58SwopY/sZSkhUBe3yMGHTDyA0yDhDCD7ybX9gl45pV/eQ=,CanRetry 1 
    code:  8001 
    context: s3://bucket-2/data_files._manifest 
    query:  2611231 
    location: s3_utility.cpp:284 
    process: padbmaster [pid=10330] 
    -----------------------------------------------; 

여기 내 문제는 내가 COPY 명령에 bucket_1 자격 증명을 전달한다는 것입니다. COPY 명령에 여러 버킷 (실제 파일이있는 bucket_1 및 매니페스트가있는 bucket_2)에 대한 자격 증명을 전달할 수 있습니까? bucket_1에 대한 쓰기 권한이 없다고 가정하면 어떻게해야합니까?

답변

0

bucket_1_key 키 (IAM 사용자)는 bucket_1에서 "읽기 전용"으로 제한된 권한이 있음을 나타 냈습니다. 이 경우 bucket_2에서 읽기 권한이 없기 때문에 오류가 발생합니다. 가능한 원인을 이미 언급 했으므로 정확하게 그 것입니다.

COPY 명령에 두 세트의 키를 제공하는 옵션이 없습니다. 그러나 다음과 같은 옵션을 고려해야합니다

옵션 1

this에 따르면 "당신은 파일을 아마존 S3 객체 접두어를 사용하거나 매니페스트 파일을 사용하여로드 할 지정할 수 있습니다." 로드하려는 파일 세트에 대한 공통 접두어가있는 경우 COPY 명령에서 bucket_1의 해당 접두어를 사용할 수 있습니다. 당신은 읽기 전용 액세스 1.이 http://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-access-permissions.html#copy-usage_notes-iam-permissions

다른 모든 옵션은 키/IAM 사용자 권한 또는 Redshift에 대한 변경을 요구에 정의 된대로 충분한 액세스 있는지 확인 버킷 언급 한 http://docs.aws.amazon.com/redshift/latest/dg/t_loading-tables-from-s3.html

보기 그 자체.

옵션 2

뿐만 아니라 bucket_2에서 읽을 수 있도록 bucket_1_key 키의 권한을 확장합니다. bucket_1_key 키에 bucket_2에 대한 LIST 액세스 권한이 있고 bucket_2 오브젝트 (as documented here)에 대한 GET 액세스 권한이 있는지 확인해야합니다. 이렇게하면 COPY 명령에서 bucket_1_key 키를 계속 사용할 수 있습니다. 이 방법을 키 기반 액세스 제어라고하며 일반 텍스트 액세스 키 ID와 비밀 액세스 키를 사용합니다. AWS는 대신 역할 기반 액세스 제어 (옵션 3)를 사용할 것을 권장합니다. COPY 명령 대신 키 (옵션 2)에서

옵션 3

사용 IAM 역할. 이를 역할 기반 액세스 제어라고합니다. COPY 명령에서 사용할 인증 옵션이기도합니다. 이 IAM 역할은 버킷 1 및 2에 대한 LIST 액세스 권한과 해당 버킷에있는 개체에 대한 GET 액세스 권한이 있어야합니다.

키 기반 및 역할 기반 액세스 제어에 대한 자세한 내용은 here입니다.