LoginSignup
62
51

More than 3 years have passed since last update.

ALB + Lambdaでお手軽3分ベーシック認証

Posted at

概要

ALBのリスナールールの変更とLambdaの追加でベーシック認証を行います。

ベーシック認証の処理の流れとしては以下となります。

  • ALBでAuthorizationヘッダーを検証する
  • 認証OKであれば、正規のターゲットグループに転送する
  • 認証NGであれば、Lambdaをターゲットとするターゲットグループに転送する
  • Lambdaではベーシック認証を要求するレスポンスを返す(なお、ALBからのヘルスチェックに対しては200を返すようにします)

1. Lambda関数の作成

まず、ALBが存在するリージョンで、Lambda関数を作成します。

  • 一から作成を選択
  • 関数名を入力(今回はBasicAuthとします)
  • ランタイムはNode.js 12.xを選択
  • 実行ロールは基本的な Lambda アクセス権限で新しいロールを作成を選択
  • VPCは特に何も選択しない
  • 関数の作成ボタンを押下

Lambda関数の作成

  • 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'
        }
    };
};

コードの貼り付けとDeployボタン押下

2. ターゲットグループの作成

先ほどのLambda関数をターゲットとするターゲットグループを作成します。

2.1. 基本的な設定等

  • ターゲットタイプにLambda関数を選択
  • ターゲットグループ名を入力(今回はbasic-authとします)
  • ヘルスチェックの有効化をチェック
  • 次へボタンを押下

ターゲットグループの作成1

2.2. ターゲットの登録

  • 先ほど作ったLambda関数を選択
  • ターゲットグループの作成ボタンを押下

ターゲットグループの作成2

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に表示されているペンのアイコンを押下
  • 転送先として先ほど作成したターゲットグループを選択
  • 更新ボタンを押下

最後のルールの転送先をLambda関数にする

4. ベーシック認証の表示確認

以上の設定を終えて目的のサイトにアクセスすると、ベーシック認証がかかるようになります🎉

ベーシック認証の表示

参考

62
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
62
51