概要
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) => {
const headers = event.headers || {};
// ALB Health check
if (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' | base64
aG9nZWhvZ2U6ZnVnYWZ1Z2E=
-
THENの箇所で、転送先として正規のターゲットグループを選択 -
保存ボタンを押下
3.3. 最後のルールの転送先をLambda関数にする
- 画面上部のペンのアイコンを押下
- 最後のルールの左側に表示されているペンのアイコンを押下
-
THENに表示されているペンのアイコンを押下 - 転送先として先ほど作成したターゲットグループを選択
-
更新ボタンを押下
4. ベーシック認証の表示確認
以上の設定を終えて目的のサイトにアクセスすると、ベーシック認証がかかるようになります🎉







