Lake Formation跨账户共享:目标账户Athena查询报S3权限错误
跨账户Lake Formation共享后Athena查询S3 Access Denied问题排查方案
1. 检查源账户A的S3桶跨账户权限
即使Lake Formation管理了数据权限,底层S3桶仍需配置桶策略允许目标账户B的相关角色访问。添加以下桶策略到账户A的目标S3桶中(替换占位符为实际值):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::[账户B ID]:root" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::[桶名]", "arn:aws:s3:::[桶名]/[表数据路径]/*" ] } ] }
如果仅允许特定角色访问,可将Principal替换为目标账户B的Athena执行角色ARN,而非账户root。
2. 源账户A中授予数据位置权限
Lake Formation需要明确授权跨账户访问底层S3数据路径,操作步骤:
- 在账户A的Lake Formation控制台进入数据位置页面
- 添加共享表所在的S3路径,点击授予
- 选择外部账户,输入账户B的ID,授予
SELECT(或业务所需的)权限
3. 验证目标账户B的Athena执行角色权限
- 确保Athena执行角色拥有
lakeformation:GetDataAccess的IAM权限(可通过IAM策略添加) - 检查该角色在Lake Formation中是否被授予资源链接数据库/表的
SELECT权限(SUPER为管理权限,查询仍需明确的SELECT权限)
4. 确认源表的Lake Formation注册状态
如果源账户A中的表是通过IAM(而非Lake Formation)创建的,需先将表注册到Lake Formation:
- 在账户A的Lake Formation控制台找到目标表,点击注册到Lake Formation
- 完成注册后重新向账户B共享权限
5. 资源链接权限验证
在账户B的Lake Formation控制台检查资源链接数据库的权限:
- 确认授予用户/角色的权限包含具体表的
SELECT权限,而非仅数据库级权限 - 若有新增表,需重新同步共享权限或手动添加表权限
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

