Без сервера с S3 Bucket для обслуживания активов - PullRequest
0 голосов
/ 05 ноября 2019

Я использую Bref (https://bref.sh/). Я пытаюсь настроить файл serverless.yml с AWS S3 для хранения ресурсов, таких как img, css, js. При развертывании с помощью команды «serverless deploy» у меня появляется эта ошибка:

Произошла ошибка: AssetsBucketPolicy - API: s3: PutBucketPolicy Доступ запрещен.

В моей учетной записи AWS у меня есть разрешения «AdministratorAccess» (https://www.youtube.com/watch?v=KngM5bfpttA&list=PL0_-jlAhLRgEcU0P0Ivi4OO844pgrzJOU&index=2&t=0s)

стратегия AdministratorAccess

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

Мой файл serverless.yml:

service: bref-demo-symfony

provider:
    name: aws
    region: us-east-1
    runtime: provided
    environment:
        # Symfony environment variables
        APP_ENV: prod

plugins:
    - ./vendor/bref/bref

functions:
    website:
        handler: public/index.php
        timeout: 28 # in seconds (API Gateway has a timeout of 29 seconds)
        layers:
            - ${bref:layer.php-73-fpm}
        events:
            -   http: 'ANY /'
            -   http: 'ANY /{proxy+}'
    console:
        handler: bin/console
        timeout: 120 # in seconds
        layers:
            - ${bref:layer.php-73} # PHP
            - ${bref:layer.console} # The "console" layer

resources:
    Resources:
        # The S3 bucket that stores the assets
        Assets:
            Type: AWS::S3::Bucket
            Properties:
                BucketName: my-unique-serverless-assets-bucket
        # The policy that makes the bucket publicly readable
        AssetsBucketPolicy:
            Type: AWS::S3::BucketPolicy
            Properties:
                Bucket: !Ref Assets # References the bucket we defined above
                PolicyDocument:
                    Statement:
                        -   Effect: Allow
                            Principal: '*' # everyone
                            Action: 's3:GetObject' # to read
                            Resource: 'arn:aws:s3:::my-unique-serverless-assets-bucket/*' # things in the bucket

В AWS S3 я пытаюсь добавить стратегию в корзину с

 {
  "Id": "Policy1573043469280",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1573043465451",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::bref-demo-symfony-dev-serverless-assets/assets",
      "Principal": "*"
    }
  ]
}

У меня есть сообщение типа «Отказано в доступе»: «Вы не можете предоставить публичный доступ, потому что заблокировать публичный доступдля этой учетной записи включены параметры. Чтобы определить, какие параметры включены, проверьте параметры блокировки общего доступа. "Почему?

Я не понимаю, как его настроить? Этого разрешения (AdministratorAccess) недостаточно?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019
  1. Проверьте политику сегментов
  2. Если задействована политика сегментов, добавьте пользователя, которого вы создали для бессерверного
  3. Проверьте изображение ниже для примера политики сегментов https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-bucket-policy.html enter image description here
0 голосов
/ 06 ноября 2019

Попробуйте добавить iamRoleStatements, например, если вам нужно получить и поместить объект, добавьте этот код в iamRoleStatements, например:

provider:
  name: aws
  runtime: nodejs10.x
  region: us-west-2
  profile: ${self:custom.profiles.${self:custom.myStage}}
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "s3:PutObject"
        - "s3:GetObject"
      Resource:
        - "*"

Это еще один пример:

provider:
  name: aws
  iamRoleStatements:
    - Effect: 'Allow'
      Action:
        - 's3:ListBucket'
      Resource:
        Fn::Join:
          - ''
          - - 'arn:aws:s3:::'
            - Ref: ServerlessDeploymentBucket
    - Effect: 'Allow'
      Action:
        - 's3:PutObject'
      Resource:
        Fn::Join:
          - ''
          - - 'arn:aws:s3:::'
            - Ref: ServerlessDeploymentBucket
            - '/*'

Если вам нужна дополнительная информация, ознакомьтесь с документацией без сервера: Роли IAM без сервера

0 голосов
/ 06 ноября 2019

Из документов вы можете увидеть это:

Чтобы устранить ошибку «Отказано в доступе», проверьте следующее:

У вашего удостоверения IAM есть права на оба s3:GetBucketPolicyи s3:PutBucketPolicy.

https://aws.amazon.com/premiumsupport/knowledge-center/s3-access-denied-bucket-policy/

Убедитесь, что у роли, настроенной для функции Lambda, есть эти разрешения.

Это можно увидеть вРаздел «Роль исполнения»: enter image description here Здесь вы можете видеть, что моя лямбда-функция имеет роль «claudia-express-executor».

Вы также можете нажать на нее и проверить деталичто это за разрешения на роль.

...