Я использую функцию AWS Lambda под названием «compress» от «evanchiu».
Я установил исходную папку и папку назначения. Обе папки имеют разрешение «Объекты могут быть общедоступными».
Я загружаю изображения в исходную папку, которая представляет собой корзину S3 с общедоступным разрешением на чтение "ACL": 'public-read',
Я заметил, что функция Lambda сжала входящее изображение и сохранила его в папке назначения, которая также является корзиной S3.
Однако объект в папке назначения НЕ имеет общедоступного разрешения на чтение.
Как мне указать функцию «сжать», чтобы объект, который он сжал и сохранил в папке назначения, имел общедоступный доступ для чтения?
Это функция. Как мне сделать так, чтобы он сохранялся с помощью 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 с общедоступным разрешением на чтение «ACL»: «общедоступное чтение»
Разрешения уровня корзины public-read
применяются к перечислению объектов в корзине, а не к загрузке объектов. Чтобы на самом деле прочитать объект, public-read
ACL должен быть установлен для каждого объекта отдельно.
Не забудьте также отключить настройки Block Public Access
на уровнях учетной записи и корзины.
Для простоты вы также можете использовать политики корзин, а не списки управления доступом. Пример политики корзины, которую вы можете использовать для предоставления анонимного доступа только для чтения, здесь:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"PublicRead",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject","s3:GetObjectVersion"],
"Resource":["arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"]
}
]
}
@Chakra Итак, вам нужно изменить свою функцию, чтобы установить этот ACL при загрузке объекта в корзину.
Я добавил конфигурацию функции к вопросу. Где я могу изменить функцию для установки ACL?
@Chakra Для вашей функции не предоставлен исходный код. Но в любом случае, как я предположил, вероятно, проще было бы использовать политику ведра. Я обновил ответ с примером.
Да, функция «Блокировать публичный доступ» отключена. Однако сжатый объект сохраняется лямбда-функцией «compress» и НЕ устанавливает разрешение объекта на «общедоступное чтение».