AWS Lambda调用S3 CopyObject操作时遭遇AccessDenied权限错误求助
AWS Lambda调用S3 CopyObject操作时遭遇AccessDenied权限错误求助
看起来你在实现Lambda处理用户上传文件的复制流程时,卡在了CopyObject的权限问题上,我帮你梳理几个最可能的排查方向,应该能解决这个AccessDenied的问题:
1. 先确认Lambda执行角色的IAM权限(最容易遗漏的核心点)
你可能只配置了S3桶的策略,但Lambda本身的执行IAM角色必须拥有对应的S3操作权限——桶策略是桶层面的允许规则,而Lambda角色是IAM层面的身份授权,两者缺一不可。
你需要给Lambda的执行角色添加包含以下动作的权限策略:
- 对
input-bucket:s3:ListBucket(遍历文件)、s3:GetObject(读取要复制的文件)、s3:DeleteObject(删除源文件) - 对
output-bucket:s3:ListBucket(验证文件夹)、s3:PutObject(写入复制的文件,CopyObject本质是在目标桶写入)、s3:CopyObject(复制操作本身)
示例权限策略片段:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::input-bucket", "arn:aws:s3:::input-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:CopyObject" ], "Resource": [ "arn:aws:s3:::output-bucket", "arn:aws:s3:::output-bucket/*" ] } ] }
2. 检查S3桶策略的配置细节
看你提供的Terraform配置,有两个小问题可能影响权限:
- 桶策略的
Resource里写了"arn:aws:s3:::output-bucket/*","arn:aws:s3:::output-bucket/*/*",其实output-bucket/*已经包含了所有子路径(包括文件夹下的文件),不需要重复添加/*/*,可以简化成"arn:aws:s3:::output-bucket/*" - 确认桶策略里的
Principal对应的ARN是Lambda执行角色的ARN,而不是其他IAM实体(比如用户ARN)——如果填错了,桶策略的允许规则就不会作用在Lambda上
另外,源桶input-bucket的策略也要确保允许Lambda角色执行s3:GetObject和s3:ListBucket,你说有相同策略,记得核对Principal的正确性。
3. 解决对象所有权导致的权限问题
你给output-bucket设置了BucketOwnerPreferred的所有权控制,但如果用户上传到input-bucket的文件所有者是上传用户(而非桶所有者),Lambda复制时可能因为对象所有权的限制导致权限不足。
可以在CopyObject调用时添加ACL='bucket-owner-full-control'参数,强制让目标桶的所有者拥有复制后文件的完整权限,修改Lambda代码里的copy_object部分:
client.copy_object( Bucket='output-bucket', Key=location + '/' + obj.key, CopySource=copy_source, ACL='bucket-owner-full-control' )
4. 验证Lambda角色的信任关系
确保Lambda执行角色的信任策略允许AWS Lambda服务扮演这个角色,不然角色无法被Lambda正常使用,也会间接导致权限错误。示例信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
调试小技巧
- 在Lambda代码里添加日志打印当前执行角色的ARN:
LOGGER.info('Lambda执行角色ARN: {}'.format(context.invoked_function_arn)),然后核对这个ARN和桶策略里的Principal是否完全一致 - 用AWS IAM Access Analyzer工具检查权限配置,它能帮你找出策略冲突或者未授权的操作
备注:内容来源于stack exchange,提问作者clattenburg cake
相关产品推荐
相关产品推荐

