S3でIP制限
静的なファイルの配置先としてS3を利用している場合、アクセス制限などを設けたい場合があります。どこからでもアクセスできるとセキュリティ的にもコスト的にもあれあので。
今回は特定のIPのみを許可する方法です。
実現方法
S3管理画面、特定のバケットの選択、プロパティを選択、
アクセス許可の欄より、バケットポリシーの編集をクリック
以下にてバケットポリシーを生成します。
http://awspolicygen.s3.amazonaws.com/policygen.html
- Select Type of Policyは「S3 Bucket Policy」を選択
- Effectは「Deny」
- Principalは「
*
」アスタリスクですべて - AWS Serviceは「Amazon S3」
- すべてのアクセスに適用させたいなら「All Actions」にチェック
- Amazon Resource はバケット以下が対象なら「
arn:aws:s3:::yourBucketName/*
」のような形で - 「Add Conditions (Optional)」をクリックでIP制限を追加
- Condition 「NotIpAddress」を選択
- Keyは「aws:SourceIp」を選択
- Valueは許可したいIPアドレスを入力
- 「Add Condition」で追加
- 「Add Statement」で正式に追加
- 複数IP追加したい場合は再度Add Conditions (Optional)で上記手順
最後に「Generate Policy」にて生成され、
S3のバケットポリシーエディターに貼り付け保存。
生成されたソースの例
{
"Version": "2012-10-17",
"Id": "Policy*************",
"Statement": [
{
"Sid": "Stmt**********",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::yourBucketName/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "192.0.2.0/24"
}
}
}
]
}
最後に確認
許可IPからのアクセスの場合
ファイルにアクセス可能
NGの場合、以下のXMLレスポンス
AccessDenied
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>2EE0407CB8D16397</RequestId>
<HostId>
******************************************************
</HostId>
</Error>