1
  1. 我正在使用由 'evanchiu' 命名为 'compress' 的 AWS Lambda 函数

  2. 我已经设置了源文件夹和目标文件夹。这两个文件夹都具有“对象可以公开”权限。

  3. 我正在将图像上传到源文件夹,这是一个具有公共读取权限的 S3 存储桶 "ACL": 'public-read',

  4. 我注意到 Lambda 函数已压缩传入的图像并将其存储在目标文件夹中,该文件夹也是一个 S3 存储桶

  5. 但是,目标文件夹中的对象没有公共读取权限

  6. 如何引导“压缩”功能使其已压缩并保存到目标文件夹的对象具有公共读取权限?

  7. 这就是功能。如何使用“公共读取”ACL 进行保存?

    AWSTemplateFormatVersion: '2010-09-09'
    Transform: 'AWS::Serverless-2016-10-31'
    Description: Transforms images by compression to a configured quality level
    Resources:
      serverlessrepocompresstransform1KO4BLJ7HSRDZ:
        Type: 'AWS::Serverless::Function'
        Properties:
          Handler: src/index.handler
          Runtime: nodejs12.x
          CodeUri: .
          Description: Transforms images by compression to a configured quality level
          MemorySize: 1536
          Timeout: 300
          Role: >-
            arn:aws:iam::841291176818:role/serverlessrepo-compress-transformRole-2ZS0W0CC7F4M
          Environment:
            Variables:
              DEST_BUCKET: bucket-name
              QUALITY: '25'
          Tags:
            'serverlessrepo:semanticVersion': 1.1.0
            'lambda:createdBy': SAM
            'serverlessrepo:applicationId': 'arn:aws:serverlessrepo:us-east-1:233054207705:applications/compress'
    
4

1 回答 1

1

具有公共读取权限“ACL”的 S3 存储桶:'public-read'

存储桶级public-read权限适用于列出存储桶中的对象,不适用于下载对象。要实际读取一个对象,还public-read应该在每个对象上单独设置 ACL 。

确保还禁用Block Public Access帐户和存储桶级别的设置。

简单来说,您还可以使用存储桶策略,而不是 ACL。可用于授予匿名只读访问权限的存储桶策略示例如下

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicRead",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject","s3:GetObjectVersion"],
      "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"]
    }
  ]
}
于 2020-12-14T06:45:38.847 回答