我在两个帐户(Dev和Prod)之间执行了以下任务,但无法将数据从S3复制到Prod帐户中的Redshift。
任务1:
我的数据在Prod帐户(大约500 GB)中可用
任务2:
现在我想将此S3数据(从Dev复制过来)移动到 Redshift,我使用Redshift Query执行了以下命令 编辑器。
命令:
COPY table1(wre,sdf,sfd,sd,fs,df,sdfs,dfsdf,sd,fs,dfsdf,sdf,qwer,wer,wer)
FROM 's3://mydata/csv'
IAM_ROLE 'arn:aws:iam::myrole'
DELIMITER '|' IGNOREHEADER 1 TIMEFORMAT 'auto' REMOVEQUOTES NULL AS 'NULL'
EMPTYASNULL TRIMBLANKS ROUNDEC;
但是我遇到了以下错误:
[Amazon](500310) Invalid operation: S3ServiceException:Access Denied,Status 403,
Error AccessDenied,Rid 70FE39F0982E9706,ExtRid Pxs9xdm+Plb2fvgySsuVq0UWLV2UCwMJ+qrGe0jazom346t4szXILbHma5SX1ZrIq4kPJA8q5Ws=,
CanRetry 1 Details: -----------------------------------------------
error: S3ServiceException:Access Denied,Status 403,Error AccessDenied,
Rid 70FE39F0982E9706,ExtRid Pxs9xdm+Plb2fvgySsuVq0UWLV2UCwMJ+qrGe0jazom346t4szXILbHma5SX1ZrIq4kPJA8q5Ws=,
CanRetry 1 code: 8001 context: S3 key being read :
我认为,由于数据已加密,因此我面临此问题。因此,为了克服这一点,我尝试允许跨帐户访问KMS。
任务3:
我浏览了this文档,并遵循了该过程。这是相同的步骤以及我创建的策略。
政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUseOfCMKInAccount444455556666",
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:us-east-2:XXXXXXXXXX:key/9821114k-mfdfki-7e8e"
},
{
"Sid": "AllowUseofCMKToCreateEncryptedResourcesInAccount444455556666",
"Effect": "Allow",
"Action": "kms:CreateGrant",
"Resource": "arn:aws:kms:us-east-2:XXXXXXXXXX:key/9821114k-mfdfki-7e8e",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
]
}
XXXXXXXXXX
是开发人员帐号,而arn是开发人员帐户密钥arn。
要使其运行并将数据导入Redshift,我还需要进行哪些其他更改。
如果有人也能帮助我理解背景行为,那将是很好的。
注意:我正在KMS的开发人员帐户中使用客户管理密钥。
答案 0 :(得分:0)
这似乎不是KMS错误。 您需要授予Redshift权限才能访问S3存储桶中的数据。
由凭据标识的用户帐户必须具有LIST和GET 访问Amazon S3存储桶。如果用户不够用 特权,您将收到以下错误消息:
错误:S3ServiceException:访问被拒绝,状态403,错误访问被拒绝
有关更多信息,请参见以下链接:https://docs.aws.amazon.com/redshift/latest/dg/s3serviceexception-error.html