amazon-s3 - 无法将对象放入 Amazon S3 存储桶
问题描述
在过去的几天里,我一直在与它作斗争,我很绝望。
我使用 Zend S3 lib 通过 IAM 帐户访问我的 S3。我可以列出和创建我的存储桶,但我不能放置任何对象,也不能读取通过控制台上传的示例文件的信息 ($s3->getInfo())。我将我的 IAM 帐户设置为完全访问:AmazonS3FullAccess,还添加了我自己的:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:GetAccessPoint",
"s3:PutAccountPublicAccessBlock",
"s3:GetAccountPublicAccessBlock",
"s3:ListAllMyBuckets",
"s3:ListAccessPoints",
"s3:ListJobs",
"s3:CreateJob",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::*",
"arn:aws:s3:*:*:accesspoint/*",
"arn:aws:s3:*:*:job/*"
]
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": "s3:*",
"Resource": "arn:aws:s3:::*/*"
}
]
}
这是我的 PHP 代码:
$amazonKey = AWS_ACCESS_KEY;
$amazonSecret = AWS_SECRET_ACCESS_KEY;
$s3 = new Zend_Service_Amazon_S3($amazonKey, $amazonSecret);
//Avaliable buckets this code works:
$this->view->content.="-----------Avaliable buckets:-------------<br>";
foreach($s3->getBuckets() as $bucket)
$this->view->content.=$bucket."<br>";
//this doesn't work
$amazonBucket='map-markers';
$object=$amazonBucket."/myobject";
$result=$s3->putObject($object, "somedata");
if ($result===false) $this->view->content.="putObject: '.$object.' FAIL!";
else
$this->view->content.="putObject: ".print_r($result)."<br>";
我还尝试了 AWS TAmazonStorageService 的 C++ 构建器库:`
if (s3->UploadObject(BUCKET_NAME,OBJ_NAME,AnsiString("test").BytesOf()),true,0, amzbaPrivate, amzrNotSpecified, ResponseInfo) {
TVarRec args[1] = {ResponseInfo->StatusMessage};
Console("UploadObject:Upload to "+AnsiString(BUCKET_NAME)+" "+OBJ_NAME+" OK!");
}
else
{
TVarRec args[1] = {ResponseInfo->StatusMessage};
Console(Format(AnsiString("UploadObject Failure! %s"), args, 0));
}
S3->UploadObject 在 ResponseInfo 中返回 true 以及“HTTP 200”,但未创建对象。桶权限是这样的:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3Permissions",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::map-markers/*",
"arn:aws:s3:::map-markers"
]
}
]
}
此外,我解除了对存储桶的所有公共访问权限。
我不知道我还能做什么?
最好的问候汤姆
`
解决方案
推荐阅读
- android - 由于 Google Play 控制台的 APK 签名过程,无法更新 Unity 游戏
- flutter - 仅通过应用静默处理 Firebase 数据通知
- java - `Sub` 和 `Super` 中定义的私有方法,这两个方法都可以在 Sub 的 Object 上调用,那为什么私有方法说不被继承呢?
- swift - 如何在 Swift 4 中的标签栏图标上应用渐变?
- python - 在类内递归计算阶乘
- wordpress - 固定链接标题链接在具有多个查询循环的自定义页面上随机重复
- python - 无法将数组分配给另一个数组
- python-3.x - 容器内的 Pytest 错误 - 导入测试模块时出现 ImportError
- python - 如何将唯一 ID 添加到我的(python)Splinter 屏幕截图文件名中?
- javascript - 循环迭代。JavaScript 控制台图像