S3 в Redshift - кросс-учетная запись зашифрованных данных - PullRequest
1 голос
/ 22 мая 2019

Я выполнил следующие задачи между двумя своими учетными записями (Dev и Prod) и не могу скопировать данные из S3 в Redshift в моей учетной записи Prod.

Задание 1:

  • У меня есть некоторые данные в моей учетной записи Dev под S3
  • Эти данные зашифрованы с использованием KMS
  • Я хотел перенести те же данные в аккаунт Prod
  • Я запустил сервер EC2 и выполнил команду синхронизации для перемещения данных из Dev в Prod («Мой плохой», я не фокусировался на расшифровке при синхронизации)
  • Мои данные доступны в учетной записи Prod (около 500 ГБ)

    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:

Я просмотрел этот документ и следовал процедуре. Вот шаги для того же самого и политики, которую я создал.

  • Я создал политику 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 - ключ учетной записи разработчика.

Какие еще изменения мне нужно будет сделать, чтобы запустить и перенести мои данные в Redshift.

Было бы здорово, если бы кто-то помог мне понять и фоновое поведение.

ПРИМЕЧАНИЕ. Я использую управляемый ключ клиента в учетной записи разработчика в KMS.

1 Ответ

0 голосов
/ 22 мая 2019

Это не похоже на ошибку KMS.Вам необходимо дать Redshift разрешение на доступ к данным в S3 Bucket.

Учетная запись пользователя, идентифицируемая с помощью учетных данных, должна иметь LIST и GET доступ к корзине Amazon S3.Если у пользователя недостаточно прав, вы получите следующее сообщение об ошибке:

ОШИБКА: S3ServiceException: доступ запрещен, статус 403, ошибка AccessDenied

Для получения дополнительной информации см. Эту ссылку: https://docs.aws.amazon.com/redshift/latest/dg/s3serviceexception-error.html

...