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

VPC外Lambda访问S3超时问题:存储桶策略配置排查求助

问题分析及解决办法

问题出在网络路径不匹配:你的Lambda部署在VPC外,默认走公网访问S3,但你关闭了S3的公网访问权限,导致Lambda的请求根本到不了S3,直接超时。你的存储桶权限配置本身是对的,但忽略了网络访问的限制。

为啥会超时?

  • Lambda在VPC外时,访问S3只能走公网通道。当你关闭S3公网访问后(比如开启了Block Public Access、或者配置了仅允许VPC端点访问),这条通道被彻底阻断了——不是权限不够,是请求连S3的权限校验环节都没到,直接被拦截,所以表现为超时(不是权限拒绝错误)。
  • 你的存储桶策略只给Lambda角色开了权限,但没考虑到S3已经关闭了公网访问的入口,相当于门给特定人开了,但门锁死了,那人根本进不来。

两种解决思路

思路1:让Lambda继续走公网访问S3

如果不想动Lambda的部署位置,需要调整S3的访问控制,给这个Lambda角色开公网访问的口子:

  1. 检查S3的Block Public Access设置:如果开了“Block all public access”,得关掉,或者确认你的存储桶策略属于“授权的私有访问”(不是公开给所有人,只是给特定角色),这种情况下Block Public Access不会拦截。
  2. 可以给存储桶策略加个安全条件,确保只有该角色通过HTTPS访问:
{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "LambdaAllow",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxx:role/service-role/Lambda_accessingS3-role"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::uploads-from-lambda567",
                "arn:aws:s3:::uploads-from-lambda567/*"
            ],
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "true"
                }
            }
        }
    ]
}

思路2:把Lambda移到VPC内,用内网访问S3

如果要保持S3公网访问关闭,这是更安全的方案:

  1. 把Lambda函数部署到你的VPC子网里,配置好安全组(允许出站访问S3)。
  2. 在VPC里创建S3网关型VPC端点,关联到Lambda所在的子网。这样Lambda就能通过VPC内网直接访问S3,不用走公网。
  3. 可选:给存储桶策略加条件,只允许来自这个VPC的访问,进一步锁死权限:
{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "LambdaAllow",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxx:role/service-role/Lambda_accessingS3-role"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::uploads-from-lambda567",
                "arn:aws:s3:::uploads-from-lambda567/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceVpc": "你的VPC ID"
                }
            }
        }
    ]
}

额外要检查的点

  • 确认Lambda的执行角色本身有S3访问权限:虽然公网访问时正常,但还是要检查角色的IAM策略里有没有允许s3:*或者对应存储桶的权限(存储桶策略是资源端授权,角色策略是身份端授权,两者都得允许)。
  • 排查超时原因:在Lambda里加日志,看是收不到响应(网络问题)还是收到权限拒绝(权限问题)——无响应基本就是网络被拦了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:20:23