Featured image of post 【以外と簡単】S3バケットにIP制限をかける方法

【以外と簡単】S3バケットにIP制限をかける方法

S3バケットで公開しているWebサイトに特定のIPだけ閲覧できるIP制限をかける方法。セキュリティグループは使えないので、バケットポリシーのJSONを修正してホワイトリストのIPを指定します。確認手順つき♪

1222文字

S3コンテンツの閲覧制限

S3にもIP制限をかけれる?

以前、S3バケット静的コンテンツをアップロードしてWebサイトとして公開する方法を紹介しました。
関連記事 【お便利AWS】S3バケットで静的サイトホスティングをしてみよう 2018/03/18 1695文字 約4分で読めます IT Amazon AWS デザイン パソコン

基本的にはS3でWebサイトホスティングをするには全公開であることが多いと思いますが、場合によっては閲覧制限をつけてコンテンツを公開したい、というケースも出てくると思います。

EC2にはセキュリティグループという概念があるので、簡単にIP制限をかけることが可能ですが、S3バケットにはセキュリティグループをかけることが出来ません。

ポリシー定義で可能

そんな時は、S3バケットのポリシーを修正するだけでIP制限をかけることが可能になります。

今回は特定のIPのみにS3バケットを公開するようなポリシーの設定の仕方について紹介致します。

手順

前提

Point
  • S3バケットにて全公開のWebサイトホスティングを作成済み

ポリシー定義の修正

AWSにログインしたら、サービスメニューをクリックし、ストレージカテゴリS3を選択します。

次に、IP制限をかけたいバケットを選択し、アクセス制限メニューをクリックします。

アクセス権限タブを選択し、バケットポリシーメニューをクリックします。
すると、現在のポリシー定義のJsonが表示されるので、以下のように要点を修正した上で保存ボタンをクリックします。

policy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::{対象のS3バケット名}/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": "{接続を許可したいIP}"
                }
            }
        }
    ]
}


ポイントとしては、S3でのWebサイトホスティングをすると、基本的には全公開になっているので、Denyを指定することで制限をするような方法を取っています。
仮に、EffectをAllowにしてConditionをIpAddressにしても、それ以外のIPを制限するという動きにはならないので気をつけましょう。

オブジェクトの公開

このままではホワイトリストのIPからアクセスをしても、Access Deniedが出てしまうと思います。

これは、アップロードしたコンテンツを公開していないのが原因なので、公開設定をしないといけません。

バケットメニューに入ったら、すべてのオブジェクトを選択して、さらにメニューから公開を選択します。

公開するオブジェクトの情報が表示されるので、問題が無ければ公開するボタンをクリックします。

確認

では、実際に試してみましょう。
まずはホワイトリストに登録したIPでアクセスしてみます。

正常に表示されています。

次に、ホワイトリストに含まれていないIPからアクセスしてみます。

しっかり閲覧制限がかかっていますね。

終わりに

バケットポリシーを調整することで、EC2セキュリティグループのような事を実現する事が可能です。

これで、一部の範囲でしか公開したくないドキュメントやWebサイトをS3で管理することが可能になるので、皆さんも是非お試しください♩