Не удается просмотреть результаты в корзине 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:
- Как убедиться, что Athena приводит к объекту S3 с полным контролем владельца ведра - qaru
- AWS Athena: запись результата запроса CTAS между аккаунтами - qaru
Вот несколько обходных путей:
- Запишите в корзину 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