CloudFront+S3+Lambda@Edgeを使ったときにBasic認証してみる
CloudFront+S3+Lambda@Edgeを使ったときにBasic認証してみる
最近要望が多かったのでサーバレス構成でBasic認証してみたのでその時のソースをメモメモ。。
下のソースをLambdaに書いてビューアーリクエストトリガに設定しておけばできましたので!
'use strict'; exports.handler = (event, context, callback) => { const request = event.Records[0].cf.request; const headers = request.headers; // XXX 環境変数にするとエラーが発生するため直接記載(@Edgeの機能を利用しているためだと思われる) const authUser = 'ユーザー名を設定'; const authPass = 'パスワードを設定'; // Construct the Basic Auth string const authString = 'Basic ' + new Buffer(authUser + ':' + authPass).toString('base64'); // Require Basic authentication if (typeof headers.authorization == 'undefined' || headers.authorization[0].value != authString) { const body = 'Unauthorized'; const response = { status: '401', statusDescription: 'Unauthorized', body: body, headers: { 'www-authenticate': [{key: 'WWW-Authenticate', value:'Basic'}] }, }; callback(null, response); } // basic認証した後にやりたい処理を記載。 // 処理終了 callback(null, request); }