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サーバの気持ちで接したら違った)。例え同じファイルを公開したとしても、上書きアップロードしたら非公開になるっぽいので注意。
Comments