从S3到Redshift-跨帐户加密数据问题

时间:2019-05-22 14:03:46

标签: amazon-web-services amazon-s3 aws-kms

我在两个帐户(Dev和Prod)之间执行了以下任务,但无法将数据从S3复制到Prod帐户中的Redshift。

任务1:

  • 我的开发人员帐户中S3下有一些​​数据
  • 此数据已使用KMS加密
  • 我想将相同的数据移至产品帐户
  • 我启动了EC2服务器并执行了同步命令,以将数据从Dev移至Prod(我的糟糕,我在同步时并没有专注于解密)
  • 我的数据在Prod帐户(大约500 GB)中可用

    enter image description here

任务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 : 

enter image description here

我认为,由于数据已加密,因此我面临此问题。因此,为了克服这一点,我尝试允许跨帐户访问KMS。

任务3:

我浏览了this文档,并遵循了该过程。这是相同的步骤以及我创建的策略。

  • 我在生产帐户中创建了一个IAM策略(如下所述)
  • 将此政策附加到我的角色(在上面的复制对帐单中使用过)以用于生产帐户中的Redshift复制

政策:

{
  "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的开发人员帐户中使用客户管理密钥。

1 个答案:

答案 0 :(得分:0)

这似乎不是KMS错误。 您需要授予Redshift权限才能访问S3存储桶中的数据。

  

由凭据标识的用户帐户必须具有LIST和GET   访问Amazon S3存储桶。如果用户不够用   特权,您将收到以下错误消息:

     

错误:S3ServiceException:访问被拒绝,状态403,错误访问被拒绝

有关更多信息,请参见以下链接:https://docs.aws.amazon.com/redshift/latest/dg/s3serviceexception-error.html