IT技術に関する情報掲載サイト

プログラミングに関することを掲載します。

IPアドレス制御の最適化手法

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;
    }
}