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

使用AWS Amplify上传图片至S3遇Forbidden错误,求排查

问题:通过AWS Amplify上传图片至S3时CloudFront返回Forbidden错误

我尝试通过AWS Amplify从线上网站将图片上传至S3存储桶,但在CloudFront中持续收到错误提示:

ERROR Error in headObject: Forbidden: null

我确定这是权限问题,已参考网上方案进行配置,但问题仍未解决。

已配置的权限内容

Lambda函数执行角色的内联策略(S3Access)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::aws-bucket",
                "arn:aws:s3:::aws-bucket/*"
            ]
        }
    ]
}

Lambda角色的信任关系

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

S3存储桶策略

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::aws-bucket/*",
            "Condition": {
                "StringEquals": {
                    "AWS:SourceArn": "arn:aws:cloudfront::32132131241:distribution/EKTT2sAWYDZ"
                }
            }
        },
        {
            "Sid": "AllowLambdaFunctionAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::12345678910:role/awsLambdaRole312d22e0a-auth"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::aws-bucket",
                "arn:aws:s3:::aws-bucket/*"
            ]
        }
    ]
}

排查方向与可能遗漏的配置

  • CloudFront Origin Access Control (OAC) 配置
    如果你使用的是新版CloudFront访问私有S3桶,必须配置OAC而非旧版OAI。确认CloudFront分发已关联正确的OAC,且S3桶策略中允许该OAC的访问(当前策略仅允许CloudFront服务主体,若用OAC则Principal应为OAC的ARN)。

  • Lambda执行角色的有效性
    确认Lambda函数实际使用的执行角色就是你配置的awsLambdaRole312d22e0a-auth;检查该角色是否存在权限边界限制,若有需确保边界允许S3相关操作。

  • S3桶的访问控制列表(ACL)与所有者一致性
    确认S3桶的ACL未设置冲突权限;若资源跨账号,需确保桶所有者与IAM角色、CloudFront资源的所有者一致,避免跨账号权限拦截。

  • CloudFront行为配置
    检查CloudFront行为设置中是否允许HEAD请求(错误源于headObject操作),确保允许的HTTP方法包含HEAD;若前端直接上传,确认Amplify Storage的storage/upload权限配置正确,生成的签名URL有效。

  • ARN正确性校验
    逐一核对所有ARN中的账号ID、桶名、CloudFront分发ID是否完全匹配实际资源:

    • S3桶ARN中的aws-bucket是否为真实桶名
    • CloudFront SourceArn中的账号ID32132131241和分发IDEKTT2sAWYDZ是否正确
    • Lambda角色ARN中的账号ID12345678910是否正确

内容的提问来源于stack exchange,提问作者Randy Chu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:02:33