删除时拒绝 AWS S3 访问

Jos*_*rth 7 amazon-s3 amazon-web-services aws-php-sdk

我有一个可以毫无问题地写入的存储桶。但是,当我尝试删除对象时,出现错误...

AccessDeniedException in NamespaceExceptionFactory.php line 91
Run Code Online (Sandbox Code Playgroud)

按照这里非常基本的例子,我想出了这个命令......

$result = $s3->deleteObject(array(
                'Bucket' => $bucket,
                'Key'    => $keyname
            ));  
Run Code Online (Sandbox Code Playgroud)

我已经根据我发现的其他教程和问题尝试了这种变化。

$result = $s3->deleteObject(array(
                'Bucket' => $bucket,
                'Key'    => $keyname,
                'Content-Type'  => $contentType,
                'Content-Length' => 0
            ));  
Run Code Online (Sandbox Code Playgroud)

但一切都会产生同样的错误。有什么建议?

小智 5

拥有写权限(一个只将数据写入 S3 的用户)和另一个用户的单独删除权限(以避免意外删除)是很常见的。

您可以检查您是否真的有权访问特定的存储桶操作,使用 iam get-role-policy API 查看您对尝试删除的角色拥有的权限。下面是一个例子:

$ aws iam get-role-policy --role-name <<your-role-name>> --policy-name <<your-policy-name>>

{
    "RoleName": "myrolename,
    "PolicyDocument": {
        "Version": "yyyy-mm-dd",
        "Statement": [
            {
                "Action": [
                    "s3:AbortMultipartUpload",
                    "s3:DeleteObject",
                    "s3:Get*",
                    "s3:List*",
                    "s3:ListBucket",
                    "s3:PutObject*"
                ],
                "Resource": [
                    "arn:aws:s3:::bucket1/*",
                    "arn:aws:s3:::bucket2/*"                ],
                "Effect": "Allow",
                "Sid": "yyyy"
            }
        ]
    },
    "PolicyName": "mypolicyname"
}
Run Code Online (Sandbox Code Playgroud)

最有可能在您的情况下,您可能没有该资源(存储桶/前缀)的“s3:DeleteObject”操作


小智 4

用户可能能够在存储桶中创建对象并不一定意味着同一用户可以删除他/她可能创建的对象。

S3 权限可以在资源级别(存储桶/前缀)进行细化,其中您的角色可以执行的操作可以是一项或多项权限(请参阅:http ://docs.aws.amazon.com/AmazonS3/latest/dev /using-with-s3-actions.html

您似乎拥有 s3:PutObject 权限,但没有 s3:DeleteObject 权限。