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

生成S3预签名URL的Lambda函数最小权限配置问题

问题分析与解决方案

你的问题出在IAM策略的资源(Resource)配置上:当前策略仅授权了S3桶本身的权限,但s3:GetObject操作需要的是桶内对象的权限,而非桶的权限。此外,你的策略中多余的s3:PutObject权限可以移除,因为生成get_object类型的预签名URL只需要s3:GetObject权限。

修正后的SAM部署模板

GetReportFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: !Sub 'getreport-${AWS::StackName}'
      Environment:
        Variables:
          BUCKET_NAME: !Ref LunchOrderBucket
      Runtime: python3.9
      PackageType: Zip
      CodeUri: src/get_report
      Handler: get_report.lambda_handler
      Role: !GetAtt GetReportFunctionRole.Arn
  
GetReportFunctionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Action: sts:AssumeRole
            Principal:
              Service: lambda.amazonaws.com
      Policies:
        - PolicyName: GetReportFunctionPolicy
          PolicyDocument: 
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action: s3:GetObject
                Resource: !Sub '${LunchOrderBucket.Arn}/*'

修改说明

  1. 资源范围调整:将Resource从桶的ARN改为${LunchOrderBucket.Arn}/*,表示授权该桶下所有对象的s3:GetObject权限,这是生成GetObject预签名URL的必要条件。
  2. 移除冗余权限:删除了不必要的s3:PutObject权限,遵循最小权限原则。
  3. Lambda函数代码无需修改:你的Python代码逻辑是正确的,生成预签名URL的调用没有问题。

当使用修正后的策略时,Lambda函数就能以最小权限生成有效的S3对象预签名URL,不会再出现访问拒绝的问题。

内容的提问来源于stack exchange,提问作者Revanth Kumar Perla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:25:42