У вас есть:
- Корзина Amazon S3 в
Account-A
- Amazon Athena в
Account-A
- AWS Функция лямбда в
Account-B
(Это отличается от вашего предыдущего вопроса , где у вас была Афина в Account-B
, доступ к S3 в Account-A
. В этом сценарии политики Bucket в Account-A
было достаточно предоставить доступ к S3 для Athena, работающей в Account-B
.)
Amazon Athena работает с разрешениями пользователя IAM или роли IAM, которая его вызывает. Поэтому пользователю или роли, которые используют Athena, требуется разрешение для доступа к данным в Amazon S3. В вашем предыдущем вопросе это было выполнено с помощью политики Bucket, которая предоставляла Lambda разрешение на доступ к корзине в другой учетной записи.
Однако в этом вопросе у вас есть Lambda в одной учетной записи, желающей использовать Amazon Athena, в другой учетной записи . Нет возможности предоставить Athena доступ пользователям в другой учетной записи. Следовательно, вашей лямбда-функции потребуется роль в учетной записи Athena .
Следовательно:
- Создание роли IAM в
Account-A
(с Athena ) который предоставляет доступ к использованию Athena и соответствующих корзин Amazon S3 - Функция Lambda в
Account-B
: - должна вызвать
AssumeRole()
, чтобы «стать» вышеупомянутым роль - Следует использовать предоставленные учетные данные для создания нового
Session
, который используется для создания клиента boto3 для Athena
Это приведет к Лямбда, имеющая доступ к Athena в Account-A
, включая любые уже созданные таблицы и представления.
Если вам не требуются существующие таблицы и представления, определенные в Athena, то вы можете использовать Athena в том же 1056 * учетная запись как Lambda, но исходная корзина S3 должна была бы предоставить доступ к роли IAM Lambda в соответствии с вашим предыдущим вопросом .