web-dev-qa-db-ja.com

S3バケットアクションはどのリソースにも適用されません

フォローS3バケットポリシーを生成するための この回答 の指示に従っています。

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

次のようなエラーが返されます。

アクションはステートメント内のどのリソースにも適用されません

私のポリシーに欠けているものは何ですか?

74

IAMのドキュメントから、 http://docs.aws.Amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Action

一部のサービスでは、個々のリソースに対してアクションを指定できません。代わりに、ActionまたはNotAction要素にリストしたアクションは、そのサービス内のすべてのリソースに適用されます。このような場合は、Resource要素にワイルドカード*を使用します。

この情報により、リソースは次のような値になります。

"Resource": "arn:aws:s3:::surplace-audio/*"
116
Oluwafemi Sule

エラーアクションはステートメント内のどのリソースにも適用されません

単にそれは(あなたがポリシーで書いた)アクションがリソースに適用されないことを意味します。誰でも私のバケツからダウンロードできるように、私は自分のバケツを公開しようとしていました。ステートメントから( "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": "*"
    }
  ]
}

リストバケットはバケット内には適用されないため、このアクションポリシーを削除することで問題なく機能しました。

36
Vaseem007

s3:ListBucketパーミッションを削除するだけでは、私にとって十分な解決策とは言えません。おそらく他の多くの場合もそうではありません。

s3:ListBucketパーミッションが必要な場合は、バケット内のアイテムではなくバケット自体にこのパーミッションが適用されるため、バケットの単純な末尾に(最後の/*なしで)必要があります。

以下に示すように、s3:ListBuckets3: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/*"
    }
  ]
}
34
Luke

この問題に遭遇し、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": "*"
    }
  ]
}
8
Alex Spence

私はバケツを作成している間私はまた同じような問題に直面しました

{
    "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です

0

私の場合、このエラーの解決策は、私が適用していたいくつかのアクションを削除しようとしていました。それらのいくつかは、このリソースに関連していないか、このリソースで動作しません。この場合、これらを含めることはできません。

GetBucketAcl ListBucket ListBucketMultipartUploads

0
Yehuda Clinton