CloudFront Function を使ったBasic認証の設定
概要
- 今回担当した案件にて、初めてCloudFront Function を使用しました。それでは、以下にCloudFront Function を使ったBasic認証の設定方法をまとめたいと思います。
- Basic以外のサンプルは、こちらに記載があります。活用ください。
CloudFront を準備する
- 先ず、CloudFront を準備してください。ここでは、CloudFront およびオリジンを構築する方法は省略します。
- 今回使用するCloudFront には、オリジンにAPI Gateway – Lambda を配置しており、curl を実行すると下記の様に
"CloudFront Function is fun!!"
が返ります。
niikawa@niikawa1:~$ curl https://d1vmj58jrb59di.cloudfront.net/dev
"CloudFront Function is fun!!"
CloudFront Function を作る
- AWSマネジメントコンソールからCloudFrontを選択します。
- 左メニューから関数を選択します。
- 次に、「関数を作成」を選択します。
- 関数の名前、関数の説明を入力します。
- 関数コードに下記コードを貼り付け、「変更を保存」を選択します。authUser, authPass は変更下さい。
var authUser = 'user1';
var authPass = 'password1';
function handler(event) {
var request = event.request;
var headers = request.headers;
var authString = 'Basic ' + (authUser + ':' + authPass).toString('base64');
if (
typeof headers.authorization === 'undefined' ||
headers.authorization.value !== authString
) {
return {
statusCode: 401,
statusDescription: 'Unauthorized',
headers: {
'www-authenticate': {value: 'Basic'}
}
};
}
return request;
}
- 発行タブを選択、「関数を発行」を選択します。
- 関連付けられているディストリビューションにて、「関連付けを追加」を選択します。以下を指定します。
- ディストリビューションに作成済みのCloudFrontのディストリビューション名を選択
- イベントタイプに「Viewer Request」を選択
- キャッシュビヘイビアに対象のキャッシュビヘイビアを指定(追加のビヘイビアがなければ、Default(*)を選択)
- 「関連付けを追加」を押す
- 関数が発行され、CloudFront のビヘイビアに関連付けされました。
- CloudFront のビヘイビアの設定からも関数の関連付けが確認可能です。(以下は、CloudFront のビヘイビア設定画面)
Basic 認証をテストする
ブラウザからアクセスする
- ブラウザからアクセスした場合、下記のログイン画面が表示されます。
- Basic認証後、無事に、"CloudFront Function is fun!!" が出力されました。
ターミナルから curl する
- ターミナルから curlコマンドで確認する場合は、先ず「authUser:authPass」をbase64コマンドでエンコードします。
niikawa@niikawa1:~$ echo -n "user1:password1" | base64
dXNlcjE6cGFzc3dvcmQx
- 次に、curl にAuthorizationヘッダにBasic認証を指定し、かつ認証のためのユーザー名とパスワードを付けてリクエストを行います。ユーザー名とパスワードは、先ほどのbase64コマンドでエンコードした値になります。
niikawa@niikawa1:~$ curl https://d1vmj58jrb59di.cloudfront.net/dev -H "Authorization:Basic dXNlcjE6cGFzc3dvcmQx"
"CloudFront Function is fun!!"
- 認証としては簡易となりますが、CloudFrontに簡単にBasic認証が設定できました。また、Lambda と異なり、CloudFront Functionで実装しているため動作が軽いです。
参考資料
- Introducing CloudFront Functions – Run Your Code at the Edge with Low Latency at Any Scale
- CloudFront Function のサンプルが紹介されています。
- Add a Cache-Control header to the response
- Add a cross-origin resource sharing (CORS) header to the response
- Add cross-origin resource sharing (CORS) header to the request
- Add security headers to the response
- Add a True-Client-IP header to the request
- Redirect the viewer to a new URL
- Add index.html to request URLs that don’t include a file name
- Validate a simple token in the request