【问题标题】:AWS S3 Access Denied on delete删除时 AWS S3 访问被拒绝
【发布时间】:2017-07-28 05:48:47
【问题描述】:

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

AccessDeniedException in NamespaceExceptionFactory.php line 91

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

$result = $s3->deleteObject(array(
                'Bucket' => $bucket,
                'Key'    => $keyname
            ));  

我已经根据我发现的其他教程和问题尝试了此方法的变体。

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

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

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-php-sdk


    【解决方案1】:

    拥有写入权限(仅将数据写入 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"
    }
    

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

    【讨论】:

    • 这解决了我遇到的一个问题。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

    • 用户如何拥有读/写权限而不删除?鼠标悬停在此权限上的描述说它包括删除。
    • 拥有写入权限(仅将数据写入 S3 的用户)和另一个用户的单独删除权限(以避免意外删除)是很常见的。
    • 对于无服务器项目,您可以在 serverless.yml 文件中的“provider: iamRoleStatements: Action”参数中添加“s3:DeleteObject”
    • 完全忘记了我没有在我的配置中添加这个。谢谢
    猜你喜欢
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2015-09-22
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2018-09-14
    相关资源
    最近更新 更多