如何通过Lambda为S3存储桶开启服务器日志,有没有可行绕过方案?
解决方案
核心前提
S3的PutBucketLogging接口强制要求调用方为存储桶所有者,不存在未获得所有者授权即可越权修改配置的方案,所有可落地的方案均需要所有者侧完成一次前置授权配置:
方案1 跨账户场景授权配置
如果Lambda所属账户和目标S3桶不属于同一AWS账户,按以下步骤配置:
- 由目标桶所有者在桶资源策略中添加授权条目,允许Lambda的执行角色调用
s3:PutBucketLogging接口 - 在Lambda的执行角色IAM策略中,添加对应目标桶的
s3:PutBucketLogging操作权限 - 日志接收桶的资源策略中需要添加S3日志服务的写入权限,配置示例如下:
{ "Effect": "Allow", "Principal": { "Service": "logging.s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<日志接收桶名称>/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } }
方案2 同账户场景配置
如果Lambda和目标桶属于同一AWS账户,无需额外配置桶策略,直接给Lambda执行角色添加对应目标桶的s3:PutBucketLogging权限即可调用接口,同账户下的IAM角色默认继承账户所有者的对应操作权限。
方案3 无桶策略修改权限场景配置
如果无法申请到修改目标桶资源策略的权限,可以申请桶所有者提前配置EventBridge触发规则,当指定事件发生时触发你的Lambda执行日志配置操作,触发规则的权限由桶所有者侧配置,Lambda仅需完成日志配置的逻辑开发即可。
注意:所有方案都需要先确认日志接收桶的区域和目标桶区域一致,S3服务器日志不支持跨区域投递
内容的提问来源于stack exchange,提问作者Dean
相关产品推荐
相关产品推荐

