一般提供された CloudFront lambda@Edge で、Basic認証を設定する

preview と 仕様が変わっています。

nodejsは6.10を選ぶ必要があり、headers の構造も変わっていました。
Cloudfrontのarn指定に、lambda を version がなければいけないのも、なかなかめんどくさい変更です。
あとは、role の設定も面倒ですが、一旦書きません。

"use strict";

exports.handle = (event, context, callback) => {
    
    const Allows = {
        "users": "users",
    };

    const request = event.Records[0].cf.request;
    const headers = request.headers;

    const authorization = headers.authorization || headers.Authorization;

    if (authorization) {

        const enc = authorization[0].value.split(" ")[1];
        const userPassword = new Buffer(enc, 'base64').toString();

        for (let key in Allows) {
            let val = Allows[key];
            if (`${key}:${val}` === userPassword) {
                callback(null, request);
                return;
            }
        }
    }

    const response = {
        status: '401',
        statusDescription: 'Authorization Required',
        httpVersion: request.httpVersion,
        headers: {
            "www-authenticate": [{key:"WWW-Authenticate", value: 'Basic realm="Enter username and password."'}],
            "content-type": [{ key: "Content-Type", value: "text/plain; charset=utf-8" }],
        },
        body: "401 Authorization Required",
    };

    callback(null, response);
};