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

Scala编写的AWS Lambda部署后访问S3报403 AccessDenied如何解决?

问题背景

我使用Scala编写了一个Lambda函数,用于访问并读取同区域S3存储中的文件,对应代码如下:

val bucketName = "***myBucketName***"
val fileName = "input.log"
val s3 = AmazonS3ClientBuilder.defaultClient()
val myObject = s3.getObject(new GetObjectRequest(bucketName, fileName))
val inputStream = myObject.getObjectContent()
val reader = new BufferedReader(new InputStreamReader(inputStream))

我通过SAM-cli将该函数部署到AWS,本地运行时可正常访问目标文件,但在AWS上运行时抛出如下错误:

Access Denied (Service: ; Status Code: 403; Error Code: AccessDenied
解决方案

本地运行SAM时调用的是你本地配置的AWS账号凭证,该凭证默认持有对应S3资源的访问权限,而部署到AWS环境后,Lambda函数会使用自身绑定的*执行角色(Execution Role)*发起S3请求,403错误基本都和该角色的权限配置、S3桶的访问限制有关,可按以下顺序排查解决:

  • 步骤1:给Lambda执行角色添加S3访问权限
    这是最高发的问题,你可以直接在SAM项目的template.yaml配置文件中,给对应Lambda函数的执行角色添加s3:GetObject权限,参考配置如下:
Resources:
  YourLambdaFunction: # 替换为你的Lambda函数逻辑ID
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: your-code-path/ # 替换为你的代码包路径
      Handler: your-entry-class::handleRequest # 替换为你的函数入口
      Runtime: java11 # Scala运行在JVM上,对应你使用的JDK版本
      Policies:
        - S3ReadPolicy:
            BucketName: "***myBucketName***" # 替换为你的实际S3桶名

如果你是在IAM控制台手动配置角色权限,需要给Lambda执行角色添加如下权限策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::***myBucketName***/*"
        }
    ]
}
  • 步骤2:排查S3桶的访问限制配置
    如果配置完角色权限后仍报错,需要检查S3桶的如下配置:
    • 桶策略是否限制了允许访问的角色/ARN,需将Lambda执行角色的ARN添加到桶策略的允许列表中
    • 如果桶开启了服务端加密(SSE-KMS),需要额外给Lambda执行角色添加对应KMS密钥的kms:Decrypt权限
    • 如果桶配置了IP/VPC访问限制,而你的Lambda部署在VPC内,需要配置S3 VPC端点,且端点策略允许访问该桶
  • 步骤3:基础配置校验
    • 确认部署时的桶名参数、文件名和实际S3桶中的配置完全一致,大小写错误、拼写错误也可能触发403响应
    • 确认Lambda和S3桶确实在同一AWS区域,跨区域访问如果没有额外配置也可能触发权限拦截
    • 若使用旧版本AWS SDK,可显式指定S3客户端的所属区域,避免默认区域配置错误触发跨区域访问拦截,示例:AmazonS3ClientBuilder.standard().withRegion(Regions.US_EAST_1).build()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:15:03