S3存储桶操作不适用于任何资源


124

我正在按照此答案中的说明生成以下S3存储桶策略:

{
  "Id": "Policy1495981680273",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1495981517155",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::surplace-audio",
      "Principal": "*"
    }
  ]
}

我得到以下错误:

动作不适用于语句中的任何资源

我的保单中缺少什么?


1
我已经在链接中尝试解决方案:stackoverflow.com/a/36551238/2786039并且它现在可以工作。问候
Vuong Nguyen

Answers:


218

从IAM文档中, http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action

某些服务不允许您为单个资源指定操作。相反,您在Action或NotAction元素中列出的所有操作都将应用于该服务中的所有资源。在这些情况下,请在Resource元素中使用通配符*。

有了这些信息,资源应该具有如下值:

"Resource": "arn:aws:s3:::surplace-audio/*"

39
不能相信这在存储桶的策略和/或策略生成器中未提及!
卡尔斯·阿尔科莱亚

4
我正在使用*,它仍然会给出该错误。有人可以帮我吗?
耶胡达·克林顿,

@YehudaClinton,为我工作。确保同时添加/ *
RMati

74

s3:ListBucket对我来说,仅仅删除许可并不是一个很好的解决方案,对于其他许多人可能也不是。

如果您需要s3:ListBucket许可权,则只需拥有存储桶的简单信息(/*末尾没有),因为此许可权适用于存储桶本身,而不适用于存储桶中的项目。

如下图所示,你必须有s3:ListBucket权限从内斗有关的项目,如权限的单独声明s3:GetObjects3: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/*"
    }
  ]
}

同意 对于某些操作,在执行GetObject之前需要具有ListBucket权限,因此此答案更为详尽。
3cheesewheel

2
这对我有用,并且仅强调了AWS在指导用户做基本事情方面仍需要做多少工作。
volvox

41

错误操作不适用于语句中的任何资源

简而言之,这意味着该操作(您在策略中编写的)不适用于该资源。我试图公开我的存储桶,以便任何人都可以从我的存储桶下载。在从语句中删除(“ 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": "*"
    }
  ]
}

由于列表存储桶不适用于存储桶,因此通过删除此操作策略可以正常工作。


谢谢,这对我有用,删除了“ s3:ListBucket”。
保罗·沃森

14

刚遇到这个问题,并为那些希望在同一策略中使用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": "*"
    }
  ]
}

错误Principal-S3策略语法不允许。
azec-pdx

上面的解决方案都不适合我,委托人无效或者我将被拒绝访问。
丹尼尔(Daniel)

这是正确的,在这种情况下,资源应该是一个数组,并包括那两行...投票。
阿西耳

4

创建存储桶时,我也遇到了类似的问题

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949"
            ]
        }
    ]
}

我已将上面的代码更改为

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::mrt9949/*"
            ]
        }
    ]
}

在您的存储桶名称中 添加/ *即可解决该问题

我的存储桶名称是mrt9949


谢谢!花了很多时间寻找
Jack_Hardy

4

就我而言,此错误的解决方案是尝试删除我正在应用的某些操作。其中一些与该资源无关或无法使用该资源。在这种情况下,不允许我包括以下内容:

GetBucketAcl ListBucket ListBucketMultipartUploads


ListBucket吸引了我!谢谢你
Quad64Bit

对我来说,只保留getObjet才有用
LittleTiger

0

您必须检查在“策略”的“资源”标签下定义的arn模式-

“资源”:“ arn:aws:s3 ::: s3mybucketname / *”

最后,即使在为您的存储桶解除了公共访问策略阻止后仍然遇到问题,也可以在末尾添加“ / *”来解决该问题。


0
  • 在您的实例中转到Amazon S3。
  • 转到权限->公共访问选项卡。
  • 选择编辑,然后取消选中阻止所有公共访问和保存。
  • 您将在“权限”选项卡和“访问控制列表”中看到“公共”标签。

0

您还可以为每个文件夹配置ListBuckets,如下所示

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSESPuts-1521238702575",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::buckets.email/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "[red]"
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringEquals": {
                    "s3:delimiter": "/",
                    "s3:prefix": [
                        "",
                        "domain.co",
                        "domain.co/user"
                    ]
                }
            }
        },
        {
            "Sid": "Stmt1586754972129",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::buckets.email",
            "Condition": {
                "StringLike": {
                    "s3:prefix": "domain.co/user/*"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::596322993031:user/[red]"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::buckets.email/domain.co/user/*"
        }
    ]
}

这些规则与SES一起使用以接收电子邮件,但允许外部用户查看SES放入存储桶中的文件。我按照这里的指示进行操作:https : //aws.amazon.com/blogs/security/writing-iam-policies-grant-access-to-user-specific-folders-in-an-amazon-s3-bucket/

另外,domain.co/user/在使用SDK时,您必须在结尾处将前缀指定为WITH斜杠,否则访问将被拒绝。希望它能帮助任何人

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.