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


123

この回答の指示に従って、フォロー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

回答:


217

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

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

この情報を使用して、リソースは以下のような値を持つ必要があります。

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

39
これがバケットのポリシーやポリシージェネレーターで言及されていないことは信じられません!
Carles Alcolea

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がいまだにやらなければならない仕事を強調しているだけです。
ボルボックス

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

これは正しいです。この場合、リソースは配列であり、これらの2行を含める必要があります...投票してください。
Assil

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 7

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スラッシュとして指定する必要があります。そうしないと、アクセスが拒否されます。それが誰にも役立つことを願っています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.