【问题标题】:S3 to Redshift - Cross Account encrypted data issueS3 到 Redshift - 跨账户加密数据问题
【发布时间】:2019-05-22 14:03:45
【问题描述】:

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

任务 1:

  • 我在 S3 下的开发帐户中有一些数据
  • 此数据使用 KMS 加密
  • 我想将相同的数据移动到 Prod 帐户
  • 我启动了一个 EC2 服务器并执行了同步命令以将数据从 Dev 移动到 Prod(我的错误是我在同步时没有专注于解密)
  • 我的数据在 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 文档并遵循了程序。这是相同的步骤和我创建的策略。

  • 我在生产帐户中创建了一个 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 的开发帐户中使用客户管理的密钥。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    欲了解更多信息,请参阅此链接:https://docs.aws.amazon.com/redshift/latest/dg/s3serviceexception-error.html

    【讨论】:

    • MyRole 拥有对 S3 的完全访问权限,并且在同一个存储桶中,我有未加密的数据。这个未加密的数据也是从开发帐户复制的,我可以访问它。
    • @ShivkumarMallesappa 不是你的角色。您必须添加存储桶策略以允许 Redshift 访问该存储桶。
    猜你喜欢
    • 1970-01-01
    • 2021-06-21
    • 2021-03-14
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    相关资源
    最近更新 更多