概要
ALBのリスナールールの変更とLambdaの追加でベーシック認証を行います。
ベーシック認証の処理の流れとしては以下となります。
- ALBで
Authorizationヘッダーを検証する - 認証OKであれば、正規のターゲットグループに転送する
- 認証NGであれば、Lambdaをターゲットとするターゲットグループに転送する
- Lambdaではベーシック認証を要求するレスポンスを返す(なお、ALBからのヘルスチェックに対しては
200を返すようにします)
1. Lambda関数の作成
まず、ALBが存在するリージョンで、Lambda関数を作成します。
一から作成を選択- 関数名を入力(今回は
BasicAuthとします) - ランタイムは
Node.js 12.xを選択 - 実行ロールは
基本的な Lambda アクセス権限で新しいロールを作成を選択 - VPCは特に何も選択しない
関数の作成ボタンを押下
index.jsに以下のコードを貼り付けて、Deployボタンを押下
Authorizationヘッダーの検証はALBで実施するため、コード中には検証処理はありません。
exports.handler=async(event,context)=>{constheaders=event.headers||{};// ALB Health checkif(headers['user-agent']==='ELB-HealthChecker/2.0'){return{statusCode:200,statusDescription:'200 OK',isBase64Encoded:false,headers:{'Content-Type':'text/html'}};}return{statusCode:401,statusDescription:'401 Unauthorized',body:'Unauthorized',isBase64Encoded:false,headers:{'WWW-Authenticate':'Basic','Content-Type':'text/html'}};};2. ターゲットグループの作成
先ほどのLambda関数をターゲットとするターゲットグループを作成します。
2.1. 基本的な設定等
- ターゲットタイプに
Lambda関数を選択 - ターゲットグループ名を入力(今回は
basic-authとします) - ヘルスチェックの有効化を
チェック 次へボタンを押下
2.2. ターゲットの登録
- 先ほど作ったLambda関数を選択
ターゲットグループの作成ボタンを押下
3. ALBのリスナールールの編集
3.1. ルールの表示/編集
- ALBの
リスナータブを選択し、ルールの表示/編集を押下
3.2. ルールの挿入
- 画面上部の
+ボタンを押下 ルールの挿入を押下IFの箇所で`HTTPヘッダーを選択- ヘッダーに
Authorizationを入力 - 値に
Basic {ID:パスワードをBase64エンコードした値}を入力(Basicの次にスペースを入れること) - Base64エンコード方法は以下を参照(IDが
hogehoge, パスワードがfugafugaの場合)
- ヘッダーに
$echo-n'hogehoge:fugafuga' | base64aG9nZWhvZ2U6ZnVnYWZ1Z2E=
THENの箇所で、転送先として正規のターゲットグループを選択保存ボタンを押下
3.3. 最後のルールの転送先をLambda関数にする
- 画面上部のペンのアイコンを押下
- 最後のルールの左側に表示されているペンのアイコンを押下
THENに表示されているペンのアイコンを押下- 転送先として先ほど作成したターゲットグループを選択
更新ボタンを押下
4. ベーシック認証の表示確認
以上の設定を終えて目的のサイトにアクセスすると、ベーシック認証がかかるようになります🎉







