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

调用HeadObject操作遇403禁止错误,AWS Lambda权限问题求助

排查Lambda调用S3 HeadObject时的403 Forbidden错误

问题背景

严格遵循AWS官方S3+Lambda教程操作后,Lambda执行时触发以下403错误,调用HeadObject操作被拒绝:

{
  "errorMessage": "An error occurred (403) when calling the HeadObject operation: Forbidden",
  "errorType": "ClientError",
  "requestId": "eb834711-562c-4d92-8607-f96d16aa56e6",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 23, in lambda_handler\n    s3_client.download_file(bucket, key, download_path)\n",
    "  File \"/var/lang/lib/python3.12/site-packages/boto3/s3/inject.py\", line 192, in download_file\n    return transfer.download_file(\n",
    "  File \"/var/lang/lib/python3.12/site-packages/boto3/s3/transfer.py\", line 406, in download_file\n    future.result()\n",
    "  File \"/var/lang/lib/python3.12/site-packages/s3transfer/futures.py\", line 103, in result\n    return self._coordinator.result()\n",
    "  File \"/var/lang/lib/python3.12/site-packages/s3transfer/futures.py\", line 266, in result\n    raise self._exception\n",
    "  File \"/var/lang/lib/python3.12/site-packages/s3transfer/tasks.py\", line 269, in _main\n    self._submit(transfer_future=transfer_future, **kwargs)\n",
    "  File \"/var/lang/lib/python3.12/site-packages/s3transfer/download.py\", line 354, in _submit\n    response = client.head_object(\n",
    "  File \"/var/lang/lib/python3.12/site-packages/botocore/client.py\", line 565, in _api_call\n    return self._make_api_call(operation_name, kwargs)\n",
    "  File \"/var/lang/lib/python3.12/site-packages/botocore/client.py\", line 1021, in _make_api_call\n    raise error_class(parsed_response, operation_name)\n"
  ]
}

当前Lambda执行角色的权限策略如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:PutLogEvents",
                "logs:CreateLogGroup",
                "logs:CreateLogStream"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::tiral-bucket0973",
                "arn:aws:s3:::tiral-bucket0973/*",
                "arn:aws:s3:::target-bucket-152",
                "arn:aws:s3:::target-bucket-152/*",
                "arn:aws:s3:::tiral-bucket0973/example-folder-48523/*"
            ]
        }
    ]
}

排查方向

1. 检查S3 Bucket策略是否拒绝访问

Lambda角色的IAM权限允许了GetObject,但Bucket自身的策略可能存在Deny语句,或未显式允许Lambda角色访问:

  • 进入S3控制台,找到目标Bucket(tiral-bucket0973),查看权限 > Bucket策略。
  • 确保策略中包含允许Lambda执行角色ARN访问GetObject的语句,示例:
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::你的账号ID:role/你的Lambda执行角色名"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::tiral-bucket0973/*"
    }
    
  • 检查是否存在优先级更高的Deny语句,比如限制IP访问、拒绝特定角色的规则。

2. 验证对象级ACL权限

如果目标对象的ACL未授予Lambda执行角色读取权限,也会触发403:

  • 进入S3控制台,找到报错对应的对象,查看权限 > 对象ACL。
  • 确认Lambda执行角色(或其所属账号)被授予读取权限。

3. 确认Lambda角色的信任关系

检查Lambda执行角色的信任策略,确保允许Lambda服务扮演该角色:

  • 进入IAM控制台,找到该角色,查看信任关系。
  • 确保存在以下信任实体:
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
    

4. 核对资源ARN的准确性

检查Lambda权限策略中的Bucket ARN是否与实际操作的Bucket完全匹配:

  • 确认Bucket名称拼写无误(比如"tiral-bucket0973"是否是实际Bucket名,是否存在拼写错误如trial)。
  • 确保操作的对象路径在arn:aws:s3:::tiral-bucket0973/*或指定的子路径范围内。

5. 检查S3存储桶所有权控制

若Bucket启用了对象所有权设置为Bucket owner enforced,需确保Lambda角色的权限能覆盖对象访问:

  • 进入S3控制台,目标Bucket的权限 > 对象所有权,确认设置是否影响ACL生效。

6. VPC配置检查(若Lambda部署在VPC内)

如果Lambda部署在VPC中,网络不通也可能表现为403:

  • 确认VPC配置了S3网关端点或接口端点,允许Lambda访问S3。
  • 检查Lambda所在子网的路由表,是否有指向S3端点或公网的路由。

7. KMS加密权限(若对象使用KMS加密)

如果目标对象通过KMS密钥加密,Lambda角色还需额外的kms:Decrypt权限:

  • 检查对象的加密配置,若使用KMS,需在Lambda权限策略中添加:
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:区域:账号ID:key/你的KMS密钥ID"
    }
    

内容的提问来源于stack exchange,提问作者james kam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 17:53:16