S3でベーシック認証を簡易的に作成する方法
タイトルの通りの作業をしたため備忘録も兼ねて記事にします!
ベーシック認証の設定
Lamdaで実装するのが一般的らしいですが
CloudFront Functionの機能で簡単に作れたので
今回はCloudFront Functionで実装しました。
1.CloudFrontサイドバーにある関数を選択
2.関数名を設定
関数名は何でも大丈夫なので
「basicAuthentication」と設定し「関数を作成」を選択
3.コードを設定
ユーザー名を「hogeuser」
パスワードを「hogepass」
のベーシック認証になるソースコードを設定し
「変更を保存」を選択
ソースコードはこちら
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
function handler(event) { var request = event.request; var headers = request.headers; // authUserがユーザーID、authPassがパスワード var authUser = 'hogeuser'; var authPass = 'hogepass'; 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; } |
4.関数を発行
関数がデプロイされるイメージになります。
関数を発行後にプログラムを変更する場合は、
再度関数を発行する必要があります。
発行すると、関連付けられているディストリビューション
という項目が表示されます。
ここで関連付けからも、cloudFrontに設定可能なのですが
確定画面でどのディストリビューションに紐づいているかがID表示されており
若干最終確認としては不安になるため、次の項目でCloudFront側での設定方法も記載します。
5.CloudFrontの設定で関数を有効に
ベーシック認証を掛けるディストリビューションを選択
ビヘイビアのS3に向いている項目を編集
関数の関連付けの、ビューワーリクエストの項目に
関数タイプが「CloudFront Functions」
関数 ARN/名前が先ほど設定した名前の「BasicAuthencation」
を設定
これで設定は完了ですので
実際にアクセスすると、ベーシック認証が掛かっているかと思います。
なお、解除や設定時はキャッシュが効いているので
必要に応じでCloudFrontのキャッシュ削除で対応して頂ければと思います。
やり方さえ分かれば、凄い簡単にできることが分かりますね。
是非ご活用くださいませ。