いくつかのサイトで特定のIPを許可するといった記事は見かけますが、
CloudFrontを利用している環境で
一時的に特定のIPのみ該当ページを表示させて、
その他のIPはリダイレクトさせたいといったケースがありました。
「https://example.com/example-directory」へアクセスした場合、
特定のIPは許可させる、その他のIPは「https://example.com/」へリダイレクトといったものです。
あまりないケースではあると思いますが備忘録として残しておきます。
前提条件として、
EC2とCloudFrontは構築済みで、CloudFront経由でEC2へアクセスできる状態とします。
手順
1. AWS管理コンソールにログインしCloudFrontの設定項目に移動し、メニュー左の関数をクリックします。
2. 関数を作成をクリックします。
3. 関数名を入力し関数を作成をクリックします。 ここでは関数名を example-redirect とします。
4. 関数コード箇所に下記関数を記載。記載したら変更を保存をクリックします。
function handler(event) {
var request = event.request;
var clientIP = event.viewer.ip;
var uri = request.uri;
// リダイレクト先URLを入力
var redirectUrl = `https://example.com/`
// アクセス許可IPを設定
var IP_WHITE_LIST = [
'XXX.XXX.XXX.XXX',
];
// クライアントIPがアクセス許可IPに含まれていればtrueを返す
var isWhiteListIp = IP_WHITE_LIST.includes(clientIP);
// 「example-directory」ディレクトリへアクセスがあった場合
// アクセス許可IPに含まれてるIPからのみ表示させる。
if (!uri.includes('example-directory')) {
return request;
} else {
if (isWhiteListIp) {
return request;
} else {
var response = {
statusCode: 302,
statusDescription: 'Temporary Redirect',
headers:
{ "location": { "value": redirectUrl } }
}
return response;
}
}
}
5. 発行タブをクリックし、関数を発行します。
6. 関連付けられているディストリビューションの関連付けを追加をクリックします。
7. 設定値を入力し関連付けを追加をクリックで完了です。
ディストリビューション: 対象ディストリビューション
イベントタイプ: Viewer request
キャッシュビヘイビア: Default
※ここではデフォルトのキャッシュビヘイビアを設定しています。
下記参考にさせていただいた記事となります。
https://dev.classmethod.jp/articles/cloudfront-functions-ip-control/
終わりに
いかがでしょうか。
今回のような状況はあまりないかもしれませんが、
もし上記のようなケースが出てきた場合、参考になれば幸いです。