通过 PHP 上传到 s3 失败,访问被拒绝


我觉得

问这个问题有点愚蠢,但是通过当前的 PHP SDK 将某些内容上传到 S3 有什么特别的要求吗?我可以使用相同的凭据通过 cli 上传,但是当我尝试使用 SDK 时,它失败了。

这里的代码:

<?php
require "awssdk_v3/aws-autoloader.php";
use AwsS3S3Client;
function s3_upload($file, $name) {
    $s3 = S3Client::factory(
        array(
            'key' => getenv('AWS_ACCESS_KEY_ID'),
            'secret' => getenv('AWS_SECRET_ACCESS_KEY'),
            'version' => "2006-03-01",
            'region' => getenv('AWS_REGION')
        )
    );
    $result = $s3->putObject(
        array(
            'Bucket' => getenv('AWS_BUCKET'),
            'Key' => $name,
            'SourceFile' => $file,
            'ContentType' => mime_content_type($file),
            'ACL' => 'public-read'
        )
    );
    return true;
}

我这样称呼它

s3_upload($_FILES['avatarfile']['tmp_name'], "avatar_2.jpg");

我使用的用户附加了此策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1480066717000",
            "Effect": "Allow",
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket/*"
            ]
        },
        {
            "Sid": "Stmt1480066765000",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket"
            ]
        }
    ]
}

如前所述,我能够使用该用户凭据从 CLI 上传文件。该地区是法兰克福,所以我指定了eu-central-1,对吗?

我得到的错误是这样开始的:

Fatal error: Uncaught exception 'AwsS3ExceptionS3Exception' with message 'Error executing "PutObject" on "https://my-bucket.s3.eu-central-1.amazonaws.com/avatar_2.jpg"; AWS HTTP error: Client error: `PUT https://my-bucket.s3.eu-central-1.amazonaws.com/avatar_2.jpg` resulted in a `403 Forbidden` response

多亏了这个答案,我才找到了问题。我正在尝试设置ACL 'public-read',但尚未授予自己s3:PutObjectAcl,只是s3:PutObject。更改任一都可以解决问题。

无论如何,感谢您的帮助。

在 IAM 策略下,如果您将 S3:PutObject 设置为操作,请在权限中添加 S3:PutObjectAcl。

我遇到了同样的错误消息,事实证明我的 S3 存储桶是在错误的区域中创建的。

最新更新