Help us understand the problem. What is going on with this article?

AWS S3でホワイトリスト形式でIP制限する(特定IPのみアクセス許可)

More than 1 year has passed since last update.

AWS S3で特定IPのみアクセスできる=ホワイトリスト形式でIP制限を設けるときの備忘録。

0.追記2018/4/18

AWSに慣れてきたら普通にAllowでもできるようになったのでそっちのやり方も書きます。

1. S3バケット作成

①バケットの作成

  • すべてのサービス>ストレージから「S3」を選択、「バケットを作成する」ボタンを押下する。
  • ウィザードに下記必要事項を入力。
    - バケット名:命名規則に併せて適宜入力
    - リージョン:アジアパシフィック(東京)
    - 既存のバケットから設定をコピー:なにも選択しない

  • 入力し終わったら「作成」ボタンを押下。

2. バケットの設定

①バケットのRW設定

  • バケット一覧画面で作成したバケットを選択し、「アクセス制限」タブを選択する。
  • パブリックアクセス許可を管理する>Everyone>オブジェクトアクセス/アクセス許可の2項目ともに「読み込み」「書き込み」にチェックを入れる。

3. アクセス制限設定

 今回は特定IPのみアクセスできる、ホワイトリスト形式のポリシーを作成する。

①ポリシー設定

  • 「アクセス制限」タブ>「バケットポリシー」ボタン>バケットポリシーエディター>「ポリシージェネレーター」のリンクを押下して、AWSポリシージェネレーターで下記を入力する。

Allow-IpAddressを使う場合

設定項目 設定値
Select Type of Policy S3 Bucket Policy
Effect Allow
Principal *
AWS Service Amazon S3
Actions All Actions ('*')にチェック(プルダウンは選択しない)
Amazon Resource Name (ARN) 前画面の「バケットポリシーエディター」の記載の横に書いてあるarn:aws:s3:::から始まる文字列をコピー&ペースト

Deny-NotIpAddressを使う場合 

Effectが変わってます。

設定項目 設定値
Select Type of Policy S3 Bucket Policy
Effect Deny
Principal *
AWS Service Amazon S3
Actions All Actions ('*')にチェック(プルダウンは選択しない)
Amazon Resource Name (ARN) 前画面の「バケットポリシーエディター」の記載の横に書いてあるarn:aws:s3:::から始まる文字列をコピー&ペースト

②-A ホワイトリストIP設定(Allow-IpAddress版)※2018/4/18追記

多分こっちがデファクトスタンダードだと思います。

  • ホワイトリストに載せるIPの設定フォームは、ARN設定の下の「Add Conditions (Optional)」のリンク押下で展開するので、そこで諸々設定する。
設定項目 設定値
Condition IpAddress
key aws:SourceIp
value 設定したいIPアドレス
  • ホワイトリストに設定したいIPアドレスが複数個ある場合は、"aws:SourceIp"に配列形式で設定する。
ポリシー記載例
{
        "Version": "XXXX-XX-XX",
        "Id": "XXXXXXXXXXXXXXXXX",
        "Statement": [
            {
                "Sid": "XXXXXXXXXXXXXXXXX",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:*",
                "Resource": "arn:aws:s3:::AAAAA/*",
                "Condition": {
                    "IpAddress": {
                        "aws:SourceIp": [
                            "111.222.111.222/11",
                            "100.200.100.200/22",
                            "121.212.121.212/12"
                        ]
                    }
                }
            }
        ]
    }

②-B ホワイトリストIP設定(Deny-NotIpAddress版)

多分普通はこっちじゃなくてAllow-IpAddressでやると思いますが、こっちでもできます。

  • ホワイトリストに載せるIPの設定フォームは、ARN設定の下の「Add Conditions (Optional)」のリンク押下で展開するので、そこで諸々設定する。
設定項目 設定値
Condition NotIpAddress
key aws:SourceIp
value 設定したいIPアドレス
  • ホワイトリストに設定したいIPアドレスが複数個ある場合は、"aws:SourceIp"に配列形式で設定する。
ポリシー記載例
{
        "Version": "XXXX-XX-XX",
        "Id": "XXXXXXXXXXXXXXXXX",
        "Statement": [
            {
                "Sid": "XXXXXXXXXXXXXXXXX",
                "Effect": "Deny",
                "Principal": "*",
                "Action": "s3:*",
                "Resource": "arn:aws:s3:::AAAAA/*",
                "Condition": {
                    "NotIpAddress": {
                        "aws:SourceIp": [
                            "111.222.111.222/11",
                            "100.200.100.200/22",
                            "121.212.121.212/12"
                        ]
                    }
                }
            }
        ]
    }

③設定内容の反映

  • 入力が終わったら「Add Statement」ボタンを押下する。jsonが表示されるので、バケットポリシーエディターにコピー&ペーストする。

4. 公開設定

  • プロパティタブ>Static website hostingを選択。
  • 「このバケットを使用してウェブサイトをホストする」にチェック。
  • インデックスドキュメント、エラードキュメントに任意ファイル名を入力。
  • エンドポイントのURLを押下し、公開できているかを確認する。

[メモ] ハマったところ

  • ネット上の情報を探すとき、ホワイトリストにしたいのかブラックリストにしたいのかで設定内容が変わるのに気づかず四苦八苦した。ホワイトリストのときはAllow-IpAddressまたはDeny-NotIpAdressの組み合わせ。

  • HTMLファイルとかのコンテンツをアップロードしたあと、「公開する」を選択しないと公開されないのにしばらく気がつかず困った(懐かしきWebサーバの気持ちで接したら違った)。例え同じファイルを公開したとしても、上書きアップロードしたら非公開になるっぽいので注意。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした