SonataMediaBundle - S3 AWS:'配置的存储桶 "my-bucket" 不存在
SonataMediaBundle - S3 AWS: 'The configured bucket "my-bucket" does not exist
我正在尝试在我的 Sonata-Project 上配置 AWS s3 文件系统,但我总是收到以下错误:
The configured bucket "my-bucket" does not exist.
我的sonata_media.yml
:
cdn:
server:
path: http://%s3_bucket_name%.s3-website-%s3_region%.amazonaws.com
providers:
image:
filesystem: sonata.media.filesystem.s3
file:
resizer: false
allowed_extensions: ['pdf']
allowed_mime_types: ['application/pdf', 'application/x-pdf']
filesystem:
s3:
bucket: %s3_bucket_name%
accessKey: %s3_access_key%
secretKey: %s3_secret_key%
region: %s3_region%
我在 parameters.yml 中添加了以下参数:
s3_bucket_name: my-bucket
s3_region: eu-central-1
s3_access_key: MY_ACCESS_KEY
s3_secret_key: MY_SECRET_KEY
目前我正在使用这个库:
"aws/aws-sdk-php": "2.8.10"
(With the latest versions I got an error with the s3_region parameter.)
存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
我想我不必说水桶就在那里。
有没有人知道,问题是什么?
所以,我 运行 也遇到了这个问题,花了大约 3 个小时来解决它。
TL;博士
我很确定你用过 aws-sdk-php 3
所以你必须切换你的配置才能使用这个:
services:
acme.aws_s3.client:
class: Aws\S3\S3Client
factory: [Aws\S3\S3Client, 'factory']
arguments:
-
version: latest
region: %amazon_s3.region%
credentials:
key: %amazon_s3.key%
secret: %amazon_s3.secret%
而不是这个:
services:
acme.aws_s3.client:
class: Aws\S3\S3Client
factory: [Aws\S3\S3Client, 'factory']
arguments:
-
key: %amazon_s3.key%
secret: %amazon_s3.secret%
region: %amazon_s3.region%
如所述here。因此,您始终可以在没有任何凭据的情况下连接到 AWS。
以正确的方式配置knp_gaufrette
1) 创建 IAM 用户
不要使用您的根访问密钥和访问密钥与 Amazon S3 交互。创建一个访问类型为 "Programmatic access" 的新帐户,以明确允许与单个存储桶进行交互。我打电话给我的用户 s3-bucket-staging
,Amazon 给它的 ID arn:aws:iam::REMOVED:user/s3-bucket-staging
.
您不必添加组或附加任何策略。 确保保存生成的访问密钥 ID 和秘密访问密钥,因为这是您必须这样做的唯一机会。
2) 编辑您的存储桶策略
因此,对于具有全局读取但没有列表权限的非常基本的存储桶(因此人们可以访问单个文件但不能访问所有文件的列表),您可以添加以下策略:
{
"Version": "2012-10-17",
"Id": "Policy1489062408719",
"Statement": [
{
"Sid": "AllowGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BUCKET-NAME/*"
},
{
"Sid": "AllowListBucket",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::REMOVED:user/s3-bucket-staging"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::BUCKET-NAME"
},
{
"Sid": "AllowPutObject",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::REMOVED:user/s3-bucket-staging"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::BUCKET-NAME/*"
}
]
}
另请参阅:
我正在尝试在我的 Sonata-Project 上配置 AWS s3 文件系统,但我总是收到以下错误:
The configured bucket "my-bucket" does not exist.
我的sonata_media.yml
:
cdn:
server:
path: http://%s3_bucket_name%.s3-website-%s3_region%.amazonaws.com
providers:
image:
filesystem: sonata.media.filesystem.s3
file:
resizer: false
allowed_extensions: ['pdf']
allowed_mime_types: ['application/pdf', 'application/x-pdf']
filesystem:
s3:
bucket: %s3_bucket_name%
accessKey: %s3_access_key%
secretKey: %s3_secret_key%
region: %s3_region%
我在 parameters.yml 中添加了以下参数:
s3_bucket_name: my-bucket
s3_region: eu-central-1
s3_access_key: MY_ACCESS_KEY
s3_secret_key: MY_SECRET_KEY
目前我正在使用这个库:
"aws/aws-sdk-php": "2.8.10"
(With the latest versions I got an error with the s3_region parameter.)
存储桶策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
我想我不必说水桶就在那里。
有没有人知道,问题是什么?
所以,我 运行 也遇到了这个问题,花了大约 3 个小时来解决它。
TL;博士
我很确定你用过 aws-sdk-php 3
所以你必须切换你的配置才能使用这个:
services:
acme.aws_s3.client:
class: Aws\S3\S3Client
factory: [Aws\S3\S3Client, 'factory']
arguments:
-
version: latest
region: %amazon_s3.region%
credentials:
key: %amazon_s3.key%
secret: %amazon_s3.secret%
而不是这个:
services:
acme.aws_s3.client:
class: Aws\S3\S3Client
factory: [Aws\S3\S3Client, 'factory']
arguments:
-
key: %amazon_s3.key%
secret: %amazon_s3.secret%
region: %amazon_s3.region%
如所述here。因此,您始终可以在没有任何凭据的情况下连接到 AWS。
以正确的方式配置knp_gaufrette
1) 创建 IAM 用户
不要使用您的根访问密钥和访问密钥与 Amazon S3 交互。创建一个访问类型为 "Programmatic access" 的新帐户,以明确允许与单个存储桶进行交互。我打电话给我的用户 s3-bucket-staging
,Amazon 给它的 ID arn:aws:iam::REMOVED:user/s3-bucket-staging
.
您不必添加组或附加任何策略。 确保保存生成的访问密钥 ID 和秘密访问密钥,因为这是您必须这样做的唯一机会。
2) 编辑您的存储桶策略
因此,对于具有全局读取但没有列表权限的非常基本的存储桶(因此人们可以访问单个文件但不能访问所有文件的列表),您可以添加以下策略:
{
"Version": "2012-10-17",
"Id": "Policy1489062408719",
"Statement": [
{
"Sid": "AllowGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BUCKET-NAME/*"
},
{
"Sid": "AllowListBucket",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::REMOVED:user/s3-bucket-staging"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::BUCKET-NAME"
},
{
"Sid": "AllowPutObject",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::REMOVED:user/s3-bucket-staging"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::BUCKET-NAME/*"
}
]
}
另请参阅: