Как создать корзину с открытым доступом для чтения? - PullRequest
0 голосов
/ 18 января 2019

Я хотел бы включить общий доступ для чтения ко всем элементам в моем Bucket, которые находятся в папке "public" в файле serverless.yml.

В настоящее время это код определения, который я использую, чтобы объявить свое ведро. Его немного скопировать и вставить из одного из примеров безсерверного стека.

Resources:
  AttachmentsBucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      # Set the CORS policy
      BucketName: range-picker-bucket-${self:custom.stage}
      CorsConfiguration:
        CorsRules:
          -
            AllowedOrigins:
              - '*'
            AllowedHeaders:
              - '*'
            AllowedMethods:
              - GET
              - PUT
              - POST
              - DELETE
              - HEAD
            MaxAge: 3000

# Print out the name of the bucket that is created
Outputs:
  AttachmentsBucketName:
    Value:
      Ref: AttachmentsBucket

Теперь, когда я пытаюсь использовать URL для файла, он возвращает отказ в доступе. Мне нужно вручную установить публичное разрешение на чтение для каждого файла в веб-интерфейсе aws-s3.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Как уже говорили другие, вам необходимо реализовать Bucket Policy , такую ​​как эта:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadForGetBucketObjects", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::{NAME_OF_YOUR_BUCKET_HERE}/*" } ] }

Это можно сделать в консоли AWSвыбрав Bucket , затем Permissions , затем Bucket Policy .Похоже, @Milan C. указывает, как объявить это в файле serverless.yml .

0 голосов
/ 18 января 2019

Вместо использования CorsConfiguration в корзине вам нужно прикрепить политику корзины к ней.Попробуйте следующее:

Resources:
  AttachmentsBucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: range-picker-bucket-${self:custom.stage}

  AttachmentsBucketAllowPublicReadPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref AttachmentsBucket
      PolicyDocument:
        Version: "2012-10-17"
        Statement: 
          - Effect: Allow
            Action: 
              - "s3:GetObject"
            Resource: 
              - !Join ['/', [!Ref AttachmentsBucket, 'public']]
            Principal: "*"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...