首页 > 解决方案 > 无法将对象放入 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"
        ]
    }
]

}

此外,我解除了对存储桶的所有公共访问权限。

我不知道我还能做什么?

最好的问候汤姆

`

标签: amazon-s3zend-frameworkbucket

解决方案


推荐阅读