cloudfrontで、アクセス制御をかけたいとき、関数を使って制御しました。
配列に対象のIPアドレスを追加して、ループで処理をしようとしたら、対象のIPアドレスが多すぎて、メモリーエラーとなってしまったので、以下のような記述に変更したら、うまくいきました。
function handler(event) {
var request = event.request;
var clientIP = event.viewer.ip;
// アクセス許可するIPを設定
// グローバルIP
var IP_WHITE_LIST = [
clientIP,
];
// クライアントIPが、アクセス許可するIPに含まれていればtrueを返す
var isPermittedIp = IP_WHITE_LIST.includes('xxx.xxx.xxx.xxx');
// aaa.aaa.aaa.111 ~ aaa.aaa.aaa.222
if (!isPermittedIp) {
for (var i = 111; i < 223; i++) {
if (!isPermittedIp) {
isPermittedIp = IP_WHITE_LIST.includes('aaa.aaa.aaa.' + i);
}
}
}if (isPermittedIp) {
// trueの場合はオリジン側へリクエストを渡す
return request;
} else {
var response = {
statusCode: 403,
statusDescription: 'Forbidden',
}// falseの場合はViewer に対してレスポンスを返す
return response;
}
}