You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:18:10