kikukawa's diary

都内で活動するシステムエンジニアが書いてます。 興味を持った技術やハマったポイント、自分用メモをつけてます。 最近はweb中心

AWSのS3にてIP制限をかける

S3の特定ディレクトリにIP制限をかけたいという場面があったのでその時のメモです。
Actionは全てを対象にしています。

通常のIP制限

特定のバケット、パスに対して複数のIPからの操作を許可をするやり方です。

{
  "Statement": [
    {
      "Sid": "分かるような名前に",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::bucketname/dirname/*",
      "Condition" : {
        "IpAddress" : {
          "aws:SourceIp": [
            "AAA.AAA.AAA.AAA/32",
            "BBB.BBB.BBB.BBB/32"
          ]
        }
      }
    }
  ]
}

複数ディレクトリ

特定のバケット、パスに対して複数のIPからの操作を許可をするやり方です。
Statementの部分を複数にします。

{
  "Statement": [
    {
      "Sid": "limit for dirname",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::bucketname/dirname/*",
      "Condition" : {
        "IpAddress" : {
          "aws:SourceIp": [
            "AAA.AAA.AAA.AAA/32",
            "BBB.BBB.BBB.BBB/32"
          ]
        }
      }
    },
    {
      "Sid": "limit for dirname2",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::bucketname/dirname2/*",
      "Condition" : {
        "IpAddress" : {
          "aws:SourceIp": [
            "CCC.CCC.CCC.CCC/32",
            "DDD.DDD.DDD.DDD/32"
          ]
        }
      }
    }
  ]
}

ファイル自体がACL_PUBLICになってしまっている場合

ただし、ファイル自体にACL_PUBLICとか設定してあると、IP制限でかけても
参照できてしまうようです。
ファイルの属性を変えるべきだとは思いますが、数が多いとそれも面倒だったりするのでいったん全部拒否して、特定のものだけ許可するやり方です。

{
  "Statement": [
    {
      "Sid": "limit for deny",
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::bucketname/dirname/*",
      "Condition" : {
        "IpAddress" : {
          "aws:SourceIp": [
            "0.0.0.0/0"
          ]
        },
        "NotIpAddress" : {
          "aws:SourceIp": [
            "AAA.AAA.AAA.AAA/32",
            "BBB.BBB.BBB.BBB/32"
          ]
        }
      }
    }
  ]
}

参考
Example Cases for Amazon S3 Bucket Policies - Amazon Simple Storage Service