相同的查询适用于 Athena 而不适用于 Lambda - S3 权限

The same query working on Athena and not working on Lambda - S3 permissions

我正在尝试从 Lambda
查询基于 S3 存储桶的分区 table 并得到以下错误:

但是,当我通过 Athena 使用相同的查询时,它运行良好。

顺便说一句,我获得了对其他 S3 存储桶(另一个帐户)的访问权限,这不是我的存储桶,但我已经阅读并列出了权限。并使用 Lambda 我能够在他们的存储桶上创建分区 table。

使用 Lambda,此查询有效

ALTER TABLE access_Partition ADD PARTITION
(year = '2022', month = '03',day= '15' ,hour = '01') LOCATION 's3://sddds/2022/03/15/01/';

但是select上面的查询table(创建后)得到权限错误 (当我在 Athena 上打开执行的查询时,它被标记为失败,但我可以 运行 它成功)

select * from access_Partition

请指教!!!

A​​mazon Athena 使用调用实体的权限来访问 Amazon S3。因此,当您 运行 在控制台中进行 Athena 查询时,它会使用来自您的 IAM 用户的权限。当它是来自 Lambda 的 运行 时,它使用来自与 Lambda 函数关联的 IAM 角色的权限。

当此命令为运行时:

ALTER TABLE access_Partition ADD PARTITION
(year = '2022', month = '03',day= '15' ,hour = '01') LOCATION 's3://sddds/2022/03/15/01/';

它正在更新 Athena 使用的数据目录中的信息(元数据)在您自己的帐户中。在查询 运行.

之前,它实际上并没有访问存储桶

在 运行 时查询失败的事实表明 IAM 角色没有权限访问其他 AWS 账户中的存储桶

您应该在另一个账户的 S3 存储桶上添加一个存储桶策略,为 Lambda 函数使用的 IAM 角色授予访问权限.