【发布时间】:2021-09-06 15:29:32
【问题描述】:
所以我有一个私有 s3 存储桶并希望能够将文件上传到它。
我的用户有一个AmazonS3FullAccess,结果发现这还不够。
错误是
Error executing "PutObject" on "https://my-existing-bucket-name.s3.amazonaws.com/5037f466f9018271b16b1e77d3d7f386.pdf"; AWS HTTP error: Client error: `PUT https://my-existing-bucket-name.s3.amazonaws.com/5037f466f9018271b16b1e77d3d7f386.pdf` resulted in a `403 Forbidden`
我也尝试添加自定义策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::my-existing-bucket-name/*"
}
]
}
但它仍然不起作用,虽然可以使用相同的凭据删除或检索文件。
这是我将文件上传到 AWS 的方式(如果将存储桶访问从私有切换到公共,它工作正常)
$this->s3Client->putObject([
'Bucket' => $this->bucket,
'Key' => $keyName,
'ContentType' => $contentType,
'CacheControl' => 'max-age=86400',
'Body' => fopen($file, 'rb'),
'ACL' => 'authenticated-read',
]);
【问题讨论】:
-
$this->s3Client->putObject是否在您的 IAM 用户或某个 IAM 角色下执行? -
@Marcin 有一个具有指定策略的特殊 IAM 用户,我已将他的访问密钥添加到我的 SDK
-
有桶策略吗?
-
无,我刚刚将
Block all public access和下面的所有复选框都切换为开启
标签: amazon-web-services amazon-s3