Phi*_*ide 91 amazon-s3 amazon-web-services
我按照此答案中的说明生成以下S3存储桶策略:
{
"Id": "Policy1495981680273",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1495981517155",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::surplace-audio",
"Principal": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我收回了以下错误:
操作不适用于语句中的任何资源
我的政策中缺少什么?
Olu*_*ule 148
来自IAM docs, http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action
某些服务不允许您为单个资源指定操作; 相反,您在Action或NotAction元素中列出的任何操作都适用于该服务中的所有资源.在这些情况下,您在Resource元素中使用通配符*.
有了这些信息,资源应该具有如下值:
"Resource": "arn:aws:s3:::surplace-audio/*"
Run Code Online (Sandbox Code Playgroud)
Luk*_*uke 53
删除s3:ListBucket权限对我来说并不是一个非常好的解决方案,而且可能不适用于其他许多人.
如果您需要s3:ListBucket权限,则需要使用桶的普通arn(不在/*末尾),因为此权限适用于存储桶本身而不是存储桶中的项目.
如下所示,您必须将s3:ListBucket权限作为与存储桶中项目相关的权限的单独语句,如:s3:GetObject和s3:PutObject:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Principal": {
"AWS": "[IAM ARN HERE]"
},
"Resource": "arn:aws:s3:::my-bucket-name"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Principal": {
"AWS": "[IAM ARN HERE]"
},
"Resource": "arn:aws:s3:::my-bucket-name/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
Vas*_*007 39
错误操作不适用于语句中的任何资源
简单来说,这意味着该行动(您在政策中写道)不适用于该资源.我试图公开我的桶,以便任何人都可以从我的桶中下载.我收到错误,直到我从我的声明中删除("s3:ListBucket").
{
"Id": "Policyxxxx961",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmtxxxxx4365",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucket-name/*",
"Principal": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
因为列表桶不适用于桶内,因此通过删除此操作策略工作正常.
Pet*_*ter 16
要解决此问题,您需要在策略规则中执行什么操作,找到Resource,并将您的arn存储桶添加到数组中,一个在末尾*,第二个*在末尾。这将修复该错误。
{
"Version": "2012-10-17",
"Id": "Policy3783783783738",
"Statement": [
{
"Sid": "Stmt1615891730703",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::76367367633:user/magazine-demo-root-user"
},
"Action": [
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:GetBucketLocation",
"s3:DeleteObject",
"s3:AbortMultipartUpload",
"s3:Get*",
"s3:Put*"
],
"Resource": [
"arn:aws:s3:::magazine-demo",
"arn:aws:s3:::magazine-demo/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*nce 11
刚遇到这个问题,并为那些希望在同一策略中使用ListBucket和GetObject的人找到了一个较短的解决方案。
{
"Id": "Policyxxxx961",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmtxxxxx4365",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket-name",
"arn:aws:s3:::bucket-name/*"
],
"Principal": "*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
小智 9
只需对 json 策略资源进行一项更改即可。
"Resource": ["arn:aws:s3:::bucket-name/*"]
Run Code Online (Sandbox Code Playgroud)
注意:在bucket-name后面添加/*
参考文档: https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html
我在创建存储桶时也遇到了类似的问题
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mrt9949"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我已将上面的代码更改为
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mrt9949/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
将/*添加 到您的存储桶名称它将解决问题
这里我的存储桶名称是 mrt9949
在我的情况下,此错误的解决方案是尝试删除我正在应用的一些操作。其中一些与此资源无关或无法使用此资源。在这种情况下,它不会让我包括这些:
GetBucketAcl ListBucket ListBucketMultipartUploads
| 归档时间: |
|
| 查看次数: |
42533 次 |
| 最近记录: |