Бессерверная система с корзиной S3 для обслуживания активов

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

Произошла ошибка: AssetsBucketPolicy - API: s3:PutBucketPolicy Access Denied.

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

Стратегия АдминистраторДоступ

{
    "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 ответа

Попробуй добавить 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

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

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

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

У вашего IAM-идентификатора есть разрешение на оба s3:GetBucketPolicy а также s3:PutBucketPolicy.

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

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

Вы можете увидеть это в разделе "Execution role": Здесь вы можете увидеть, что моя функция Lambda имеет роль "claudia-express-executor".

Вы также можете щелкнуть по нему и подробно проверить, какие разрешения у этой роли.

Другие вопросы по тегам