如何允许匿名访问 Lambda 压缩的图像

How to allow anonymous access to images compressed by Lambda

  1. 我正在使用 'evanchiu'

    命名为 'compress' 的 AWS Lambda 函数
  2. 我已经设置了源文件夹和目标文件夹。这两个文件夹都有 'Objects can be public' 权限。

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

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

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

  6. 我如何指示 'compress' 函数使其压缩并保存到目标文件夹的对象具有 public 读取权限?

  7. 这是函数。我如何使用 'Public Read' 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'
    

S3 bucket with public read permission "ACL": 'public-read'

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

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

为了简单起见,您还可以使用存储桶策略,而不是 ACL。可用于授予匿名只读访问权限的存储桶策略示例是 here:

{
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"PublicRead",
      "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject","s3:GetObjectVersion"],
      "Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"]
    }
  ]
}