MENU
category

S3バケットポリシーのdenyについて正しく理解する

バケットポリシーの動き(評価論理)について、サポート回答などを踏まえて改めて理解したので以下に整理する。

目次

前提知識

バケットポリシーにおけるSid(Effect) ごとのステートメントは、ORで評価される。
ただし、denyの条件に合致した場合にはdenyが優先となる。

バケットポリシーのdenyの意味

以下のようなS3バケットポリシーを例にしてdenyの動作を確認する。

下記の場合、denyでSourceIp以外からのs3:PutObjectと、s3:GetObjectの操作を拒否している。裏を返せば、SourceIp指定のIPからのアクセスであれば、s3:PutObjectと、s3:GetObjectが利用可能。(厳密には、denyだけでなく、allowの認証情報が必要なため、別途バケットポリシーか、IAMポリシーで該当のアクションをallowする記述が必要になる。)

また、拒否されるのはs3:PutObjectと、s3:GetObjectの操作のみであるため、s3:ListBucketなど別のアクションであれば、拒否されない。下のバケットポリシーでは、testuserというIAMユーザのクレデンシャルがあれば、どこのIPからでもs3:ListBucketのみ実行可能となる。

denyを用いたバケットポリシーの例:

{
  "Version": "2008-10-17",
  "Id": "DenyAccessFromUnauthorizedSourceIPS",
  "Statement": [
    {
      "Sid": "AAAAA",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn: aws: iam:: XXXXXX:root"
    },
    "Action": [
      "s3:PutObject",
      "s3:GetObject",
      "s3:ListBucket"
    ],
    "Resource": [
    ],
      "arn:aws:s3:::bucket_name",
      "arn:aws:s3:::bucket_name/*
    "Condition": {
      "StringLike": {
         "aws: PrincipalArn": [
            "arn:aws:iam::XXXX::user/testuser",
            "arn:aws:iam::XXXX::root"
          ]
        }
      }
   },
    {
      "Sid": "BBBB",
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
         "s3:PutObject",
         "s3:GetObject"
       ],
      "Resource": "arn:aws:s3:::my-bucket",
      "Condition": {
          "NotIpAddress": {
              "aws:SourceIp": [
                  "11.11.11.11/32"
                    ]
                }
            }
        }
    ]
}
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次