跨AWS账号用Athena访问S3桶遇权限错误,求策略配置建议
解决跨账号Athena访问S3桶权限问题
当对方账号已配置S3桶策略允许访问,但我方仍无法执行爬取操作时,需检查以下几方面的配置:
1. 我方Athena执行角色的IAM权限策略
确保用于运行Athena查询或爬取操作的IAM角色(或用户)拥有访问目标S3桶的明确权限,添加类似如下的策略语句:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::对方账号的桶名", "arn:aws:s3:::对方账号的桶名/*" ] } ] }
s3:GetObject用于读取桶内数据对象s3:ListBucket用于枚举桶内文件/前缀,这对爬取(如Glue爬虫或Athena的表分区同步)至关重要s3:GetBucketLocation用于确认桶的区域信息
2. Glue爬虫角色的权限(若使用Glue进行爬取)
如果是通过Glue爬虫来发现跨账号S3桶的Schema,需确保Glue爬虫所关联的IAM角色:
- 拥有上述S3访问权限
- 同时拥有Glue相关操作权限,例如:
{ "Effect": "Allow", "Action": [ "glue:StartCrawler", "glue:CreateTable", "glue:UpdateTable", "glue:GetDatabase" ], "Resource": "arn:aws:glue:你的区域:你的账号ID:*" }
3. KMS加密权限(若目标S3桶启用了加密)
如果对方S3桶的对象使用了AWS KMS加密,我方执行角色还需获得对应KMS密钥的解密权限:
{ "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:对方桶区域:对方账号ID:key/密钥ID" }
同时需确保对方的KMS密钥策略已允许我方角色/账号进行解密操作。
4. 检查Athena工作组配置
若使用了自定义Athena工作组,需确认工作组关联的执行角色拥有上述所有必要权限,避免因工作组角色权限不足导致访问失败。
5. 确认权限传递的信任关系
确保我方的IAM角色(Athena/Glue使用的角色)的信任策略允许对应服务扮演该角色,例如Athena角色的信任策略需包含:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "athena.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
内容的提问来源于stack exchange,提问作者OAB
相关产品推荐
相关产品推荐

