【问题标题】:Serverless Framework: AWS Lambda Role for Signed URLs on S3无服务器框架:S3 上签名 URL 的 AWS Lambda 角色
【发布时间】:2022-02-18 18:07:03
【问题描述】:

我正在使用无服务器框架,当我尝试访问私有存储桶上的签名 URL 以获取以下配置的 GET 和 PUT 时,出现访问被拒绝错误。但是,当我为 iam.role.statements[0].Resource 下的 Resource 授予 * 时(而不是显式引用 private-bucket),它工作得很好。我做错了什么以及无需授予“*”权限而只需授予私有存储桶权限的最佳方法是什么?

provider:
  name: aws
  runtime: nodejs12.x
  lambdaHashingVersion: '20201221'
  iam:
    role:
      statements:
        - Effect: 'Allow'
          Action:
            - 's3:GetObject'
            - 's3:PutObject'
          Resource:
            - Fn::GetAtt:
                - PrivateBucket
                - Arn

resources:
  Resources:
    PrivateBucket:
      Type: AWS::S3::Bucket
      DeletionPolicy: Retain
      Properties:
        BucketName: private-bucket
        OwnershipControls:
          Rules:
            - ObjectOwnership: BucketOwnerEnforced
        PublicAccessBlockConfiguration:
          BlockPublicAcls: true
          BlockPublicPolicy: true
          IgnorePublicAcls: true
          RestrictPublicBuckets: true
        CorsConfiguration:
          CorsRules:
            - AllowedHeaders:
                - '*'
              AllowedMethods:
                - GET
                - PUT
              AllowedOrigins:
                - '*'

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda serverless-framework


    【解决方案1】:

    您需要允许存储桶和资源。

    尝试通过以下方式添加资源权限:

    Resource:
      - !Sub arn:aws:s3:::${MyS3Bucket}
      - !Sub arn:aws:s3:::${MyS3Bucket}/*
    

    【讨论】:

    • 有效 :-) 虽然您不需要存储桶级别的权限,但只要签名 url 去,只需要对象级别的权限。
    猜你喜欢
    • 1970-01-01
    • 2020-03-07
    • 2017-11-20
    • 1970-01-01
    • 2014-07-28
    • 2019-07-23
    • 1970-01-01
    • 2018-05-07
    • 2021-03-10
    相关资源
    最近更新 更多