调用DeleteObject遇AccessDenied:Lambda操作S3重命名文件权限问题
S3 DeleteObject 权限拒绝问题排查
你在用Lambda重命名S3桶里的图片时,执行DeleteObject操作触发了AccessDenied报错,虽然已经配置了指定的IAM策略但问题依旧,下面是几个可能的原因:
- 桶策略限制:S3桶本身可能配置了拒绝DeleteObject的策略,IAM策略允许但桶策略拒绝的话,操作会被直接拦截。去检查下桶的权限配置,确认有没有拒绝相关操作的语句。
- 版本控制影响:如果你的S3桶开启了版本控制,DeleteObject操作实际上只是添加一个删除标记,此时你当前策略里的
s3:DeleteObject权限是足够的,但要是需要彻底删除版本化对象,还得额外添加s3:DeleteObjectVersion权限。不过你的报错是DeleteObject本身被拒,先确认桶是否开启了版本控制。 - IAM角色关联错误:确认Lambda函数的执行角色确实是你配置了该策略的角色,别选错了角色,或者策略没正确附加到目标角色上。
- 资源ARN不匹配:检查策略里的资源ARN
arn:aws:s3:::mybucket/*,桶名mybucket要和实际桶名完全一致,ARN是严格匹配大小写的,别输错了字符。 - VPC网络限制:如果Lambda配置了VPC,得确保VPC里配置了S3的网关端点或接口端点,不然Lambda无法正常访问S3,也会弹出AccessDenied的报错(本质是网络不通导致权限验证失败)。
- 对象ACL限制:如果要删除的对象ACL设置为不允许当前IAM角色执行删除操作,就算IAM策略允许也没用。可以尝试修改对象ACL,或者在策略里添加
s3:GetObjectAcl和s3:PutObjectAcl权限来调整。
你提供的IAM策略:
{ "Action": [ "s3:PutObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::mybucket/*", "Sid": "PutAndDelS3", "Effect": "Allow" }
内容的提问来源于stack exchange,提问作者Orl13
相关产品推荐
相关产品推荐

