Бессерверная система с корзиной 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
- Проверить политику корзины
- Если задействована политика корзины, добавьте пользователя, которого вы создали для бессерверной
- На изображении ниже показан образец политики
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".
Вы также можете щелкнуть по нему и подробно проверить, какие разрешения у этой роли.