2013年2月18日月曜日

S3ってなんじゃ?(ダウンロードだけを特定のIPに制限する)


S3の特定のフォルダだけダウンロードをIP制限したい場合があります。
こういった場合には、S3のBucketPolicyが便利です。

たとえば以下のようなフォルダ内の画像ファイルにアクセスします。




すると以下の画像が表示されます。




この画像が入っているフォルダに対してIP制限してみます。
バケットポリシー画面を開きます。




ここに以下のように入力します。
{
  "Version": "2008-10-17",
  "Id": "Policy1360868462747",
  "Statement": [
    {
      "Sid": "Stmt1360868457064",
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::myfirst-bucket/img/*",
      "Condition": {
        "NotIpAddress": {
          "aws:SourceIp": "xxx.xxx.xxx.xxx/32"
        }
      }
    }
  ]
}

ジェネレータで作成しても構いません。

内容としては、
  • 全てのAWSアカウントを対象に
  • myfirst-bucket/img/*にマッチするファイルへの
  • s3のGetObjectのアクセスに関して
  • xxx.xxx.xxx.xxx/32以外のIPからの要求を
  • 拒否します

ということになります。

「Save」で設定したあと、再度アクセスしてみると



このようにエラーとなり、xxx.xxx.xxx.xxxのIP以外からのアクセスでは画像が表示されなくなりました。
他にもActionを色々変えたり追加することによって、アップロードを制限したり、一覧を制限したりすることができます。

以上です。