我有一个可以写的桶,没问题。但是,当我尝试删除一个对象时,我收到一个错误......
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
));
但是一切都会产生同样的错误。有什么建议吗?
答案 0 :(得分:3)
用户可能能够在存储桶中创建对象并不一定意味着同一用户可以删除他/她可能已创建的对象。
S3权限可以在资源级别(存储桶/前缀)精细化,您的角色可以采取的操作可以是一个或多个权限(请参阅:http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html)
看起来你有s3:PutObject权限但不是s3:DeleteObject。
答案 1 :(得分:0)
拥有写权限(只是将数据写入S3的用户)和与其他用户的单独删除权限(以避免意外删除)是很常见的。拥有写权限(只是编写权限的用户)很常见数据到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"
}
最有可能的情况是,你可能没有&#34; s3:DeleteObject&#34;该资源的操作(桶/前缀)