s3 バケット/IAM ユーザーポリシー「拒否は他のすべてのアクセスよりも優先されます」?

s3 バケット/IAM ユーザーポリシー「拒否は他のすべてのアクセスよりも優先されます」?

2 つのポリシーがあり、1 つは「拒否」です。バケットに対する操作は実行できないはずですが、バケット オブジェクトを一覧表示したり表示したりすることはできます。なぜでしょうか。ありがとうございます。

S3 バケットポリシー

{
    "Sid": "S3DenyAccess",
    "Effect": "Deny",
    "Principal": "*",
    "Action": "*",
    "Resource": "arn:aws:s3:::<YOURBUCKETHERE>/*"
}

IAM ユーザーポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowConsoleAccess",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}

答え1

変更してみてくださいリソースの中にバケットポリシーバケットのみとオブジェクトを含むバケットの両方を含めるには:

"Resource": [
    "arn:aws:s3:::<YOURBUCKETHERE>",
    "arn:aws:s3:::<YOURBUCKETHERE>/*"
]

お役に立てれば幸いです :)

答え2

AWS ポリシー評価ロジック読んでおくと役に立つでしょう。要するに、明示的な拒否が勝ちです。ただし、ここでは関係ありません。

私は

IAM ユーザー ポリシーでは、「このユーザーはすべてのバケットを一覧表示し、バケットの場所を取得できます」と規定されています。

バケットポリシー

特定のバケットのバケットポリシーでは、「オブジェクトに対して誰も何もできないように明示的に権限を拒否する」としています。内部「バケット」。リソースの末尾の「/*」は、ポリシーが「バケット内」に適用されることを意味しますが、これらを省略すると、ポリシーがバケット自体に適用されることを意味します。

組み合わせ

つまり、結合されたポリシーでは、すべてのユーザーがバケットを一覧表示し、バケットの場所を取得できますが、バケット内のオブジェクトに対して何もできないとされています。バケット内のオブジェクトを一覧表示し、バケット オブジェクトを表示できることに驚きました。AWS のデフォルトの拒否では何も表示すべきではないとされているため、ここでは別のポリシーが機能していると思われます。

その他の意見

私が見逃した何かに気づいた人がいたら、ぜひ指摘してください :)

関連情報