Не удается просмотреть результаты в корзине S3 после выполнения запроса Athena в другой учетной записи?

У меня две учетные записи: учетная запись A и учетная запись B.

Я выполняю запрос Athena в учетной записи A и хочу, чтобы результаты запроса помещались в корзину S3 в учетной записи B.

Я тестировал скрипт, который делает это бесчисленное количество раз в одной учетной записи, поэтому знайте, что с моим кодом нет проблем. История запросов в Athena также указывает на то, что мой код был успешно выполнен, поэтому это должна быть проблема с разрешениями.

Я могу видеть объект, содержащий файл CSV с результатами запроса в учетной записи B (как и ожидалось), но по какой-то причине не могу открыть или загрузить его для просмотра содержимого. Когда я пытаюсь это сделать, я вижу только XML-код, который говорит:

      <Code>AccessDenied</Code>
<Message>Access Denied</Message>

В свойствах файла я вижу под и с сообщением о недопустимости действие.

Я попытался предоставить как учетной записи A, так и учетной записи B полные разрешения S3, как показано ниже, с помощью политики корзины в учетной записи B:

      {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "This is for Account A",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::iam-number-account-a:root"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::my-bucket-name",
        "arn:aws:s3:::my-bucket-name/*"
      ]
    },
    {
      "Sid": "This is for Account B",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::iam-number-account-b:root"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::my-bucket-name",
        "arn:aws:s3:::my-bucket-name/*"
      ]
    }
  ]
}

Некоторые другие параметры конфигурации корзины (учетная запись B), которые могут способствовать моей проблеме:

  • Шифрование по умолчанию: отключено

  • Блокировать публичный доступ: отключено для всего

  • Право собственности на объект: предпочтение отдается владельцу сегмента

  • Список контроля доступа:

Владелец сегмента - Учетная запись B: объекты (список, запись), ACL сегмента (чтение, запись)

Внешняя учетная запись - учетная запись A: объекты (запись), ACL сегмента (запись)

Буду очень признателен, если кто-нибудь может помочь определить мою проблему и то, что мне нужно исправить. Я изо всех сил пытался найти решение для этого в течение нескольких часов.

2 ответа

Распространенная проблема при создании объектов в корзине Amazon S3, принадлежащей другой учетной записи AWS, заключается в том, что «владельцем» объекта остается исходная учетная запись. При копировании объектов в Amazon S3 эту проблему можно решить, указав.

Однако это, вероятно, невозможно при создании файла с помощью Amazon Athena.

См. Другие похожие вопросы по StackOverflow:

Вот несколько обходных путей:

  • Запишите в корзину S3 в учетной записи A и используйте политику сегмента, чтобы предоставить доступ на чтение учетной записи B, или
  • Запишите в корзину S3 в учетной записи A и пусть S3 запустит функцию AWS Lambda, которая копирует объект в корзину в учетной записи B, при этом указав ACL=bucket-owner-full-control, или
  • Предоставьте доступ к исходным данным пользователю или роли IAM в учетной записи B и запустите запрос Athena из учетной записи B, чтобы учетная запись B записывала в корзину `` выход ''

Запросы CTAS имеют bucket-owner-full-control ACL по умолчанию для записи между аккаунтами через Athena

Другие вопросы по тегам