如何解决AWS ALB无法向S3存储桶写入访问日志的权限问题
解决ALB访问日志写入S3权限拒绝问题 & 502错误排查建议
先解决S3权限问题:
你的核心问题是桶策略缺少必要的条件限制,权限也可以精简,按以下步骤调整:
- 修正S3桶策略
ALB写入日志不需要s3:GetObject权限,直接删掉;同时必须添加SourceAccount和SourceArn条件,限制只有你的ALB才能写入——这是AWS要求的安全配置,不加容易触发权限校验失败。修正后的策略如下(替换占位符为你的实际信息):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "elasticloadbalancing.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::buzzauths3bucket", "arn:aws:s3:::buzzauths3bucket/*" ], "Condition": { "StringEquals": { "aws:SourceAccount": "你的12位AWS账号ID" }, "ArnLike": { "aws:SourceArn": "arn:aws:elasticloadbalancing:你的区域ID:你的账号ID:loadbalancer/app/你的ALB名称/*" } } } ] }
确认ALB和S3桶同区域
ALB只能将日志写入同一AWS区域的S3桶,跨区域绝对无法写入,先检查两者区域是否一致。检查桶所有权设置
如果你的S3桶开启了「Bucket Owner Enforced」(默认开启),不需要额外调整ACL,只要桶策略正确即可;如果之前手动设置过对象ACL,确保没有限制桶所有者的权限。关于服务关联角色
不用纠结ALB的默认服务关联角色,ALB写入S3日志是通过桶策略直接授权给ELB服务主体的,和角色无关,角色不需要配置S3权限。
502错误排查补充(不用等日志也能先查)
既然你急着排查502,先做这些:
- 检查目标组的健康状态:如果实例显示不健康,ALB会直接返回502,先修复实例健康问题(比如服务没启动、端口不匹配)
- 核对目标组的端口/协议:确保目标组配置的端口和实例上运行服务的端口一致,协议(HTTP/HTTPS)也匹配
- 检查安全组:ALB的安全组要允许外部流量,实例的安全组要允许ALB安全组访问服务端口
- 直接访问实例的服务:用EC2实例的私网IP访问服务,看是否能正常响应,排除后端服务本身的问题
- 查看实例上的服务日志:比如Nginx/Apache的
error.log,看是否有后端报错信息
内容的提问来源于stack exchange,提问作者mattylantz
相关产品推荐
相关产品推荐

