使用根账号通过AWS Athena查询S3日志桶遇403权限拒绝
解决Athena查询S3日志桶的403权限拒绝问题
排查步骤与修复方案
1. 修复桶策略中的ARN格式错误
你提供的第二个桶策略里,arn:aws:s3:::mybucketlogs 末尾存在多余空格,这会导致ARN匹配失败,权限规则无法生效。修改后的正确桶策略如下:
{ "Version": "2012-10-17", "Id": "S3-Console-Auto-Gen-Policy-XXXXXXXXXXXXXX", "Statement": [ { "Sid": "S3PolicyStmt-DO-NOT-MODIFY-XXXXXXXXXXXXXXX", "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::mybucketlogs/*" }, { "Effect": "Allow", "Principal": { "Service": "athena.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::mybucketlogs/*", "arn:aws:s3:::mybucketlogs" ] }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::XXXXXXXXXXX:root" }, "Action": "*", "Resource": [ "arn:aws:s3:::mybucketlogs/*", "arn:aws:s3:::mybucketlogs" ] } ] }
注:给Athena的权限无需开放*,仅需s3:GetObject(读取日志对象)和s3:ListBucket(遍历桶内路径)即可,符合最小权限原则。
2. 检查Athena查询结果存储位置的权限
Athena执行查询时需要将结果写入指定的S3存储桶(在Athena控制台Settings中配置),即使你有权限访问日志桶,若结果桶无写入权限也可能触发权限错误:
- 确认结果桶的权限设置,确保当前根账号或Athena服务角色有权限执行
s3:PutObject操作。 - 若未配置结果存储位置,先完成配置(建议使用独立的S3桶存放查询结果)。
3. 验证AWS组织SCP(服务控制策略)限制
如果你的账号属于AWS组织,检查是否有SCP限制了根账号或Athena服务对S3的访问权限:
- 登录AWS Organizations控制台,查看应用于该账号的SCP,确保存在允许
s3:GetObject、s3:ListBucket操作的规则。
4. 刷新Athena表分区(可选)
虽然报错是权限问题,但分区投影可能未正确识别现有分区,执行以下语句刷新分区:
MSCK REPAIR TABLE s3_access_logs_db.mybucket_logs;
5. 检查S3存储桶的块公共访问设置
确认日志桶的Block public access设置中,未开启会影响内部服务访问的规则:
- 登录S3控制台,进入
mybucketlogs桶的Permissions页面,查看Block public access (bucket settings),确保未勾选Block all public access(若勾选,需确认是否允许内部服务通过桶策略访问)。
内容的提问来源于stack exchange,提问作者pyCthon
相关产品推荐
相关产品推荐

