CloudFront FunctionsのBasic認証で認証情報をCloudFront KeyValueStoreで管理する
はじめに
先日リリースされたばかりの「CloudFront KeyValueStore」。
これにより、CloudFront Functions間で共有できるKey-valueストアが使えるようになりました。
用途としては、URLの書き換えパターンやリダイレクトの遷移先を保存したり、オリジンを切り替えたり、アクセス拒否の設定を保存したりといったことに使えそうです。
最大5MBのデータを保存でき、キーの最大サイズは512バイト、値の最大サイズは1KBでJSON文字列も扱えるのでちょっとしたDynamoDBみたいな使い方もできそうです。
これまでCloudFront Functionsにハードコードするしかなかったような情報も外出しできるので用途の幅が広がりそうです。
本記事では、古くはLambda@Edge。最近ではCloudFront Functionsで実装されることが多い、CloudFrontディストリビューションへのBasic認証付与の関数。
その認証情報をCloudFront KeyValueStoreで管理してみます。
KeyValueStoreを作成
始めに認証情報を保存しておくKeyValueStore(KVS)を作成します。
任意の名前で作成します。初期の格納データをS3に置いたファイルからインポートして作成もできます。
しばらく待つとKVSができるのでキーと値のペアを登録します。この後に紹介するコードを使うならキー名を合わせておいて下さい。
この画面からKVSとCloudFront Functionsの紐づけも確認できます。
保存すると、確定されひとつ前の画面に反映されます。
関数を作成しKVSに紐づける
次はBasic認証のためのCloudFront Functionsを作成します。
関数ランタイムはcloudfront-js-2.0
である必要があります。
作成した関数に先ほど作ったKVSを紐づけます。
紐づけができるとこのようになります。1つの関数に紐づけられるKVSは1つだけです。
赤枠部分にKVSのIDが表示されるのでこれを関数のコードで使います。
また、サンプルコードも出てくるので迷ったらこちらを参考にしましょう。
関数に記述するコードはこちらです。
<KEY_VALUE_STORE_ID>
を取得したKVSのIDに差し替えましょう。
コードを写して保存したら、関数のテストを実行します。
特にエラーなく401になれば問題ないでしょう。
最後に関数を発行して、任意のCloudFrontディストリビューションに紐づけます。
イベントタイプはViewer request。
キャッシュビヘイビアは発火させたいものを選びましょう。例えば/api/*
のビヘイビアで発火させたくないなどあれば選ばないように。
紐づけ後、アクセスしたディストリビューションでBasic認証ダイアログが表示され、KVSに保存した認証情報の入力でアクセスができれば完成です。
Discussion