0
0

AWSでBasic認証をかけるには?CloudFront編 ~100本ノックしてみたい中堅エンジニア 【AWS】~ 7/100

Posted at

はじめに

前回の記事では、AWS WAFによるBasic認証を行いました。
今回は、CloudFront + S3バケットで構成されるフロントエンドに対して、CloudFront FunctionsによってBasic認証を行いたいと思います。

その前に、CloudFront Functionsってなんだろう?:thinking:って話なんですが、ユーザに近い場所で任意の関数(コード)を実行できる機能って感じです。

※CloudFrontとS3バケットは既に作成済みの前提で話を進めます :bow:

CloudFrontにBasic認証をかける方法としては、他にも以下があります。

  • Lambda@Edge(CloudFront + Lambda)
  • AWS WAF

Lambda@EdgeとCloudFront Functionsの違いは、こちらの記事がわかりやすいと思います

アクセスしてみる(Basic認証設定前)

まず、Basic認証設定前にアクセスすると、まだ何も制限してないためHelloと表示するだけの画面が表示されます

1.png

Basic認証の設定

関数の作成

では、CloudFront Functionsを作っていきます
左メニューの関数から関数を作成をクリックします
2.png

  • 名前は任意の関数名にします。今回はbasic-authenticationとでもしておきます
  • Runtimeに今回はcloudfront-js-2.0を選択します
    3.png

関数コードの実装

Basic認証用に以下のコードを記載し、変更を保存をクリックします。
処理としては

  • ユーザ名がhoge、パスワードがhugaのBasic認証をかける
  • 一致しない場合は、401エラーを返す
    になります

4.png

function handler(event) {
  var request = event.request;
  var headers = request.headers;

  // echo -n hoge:huga | base64
  var authString = 'Basic aG9nZTpodWdh';

  if (typeof headers.authorization === 'undefined' || headers.authorization.value !== authString) {
    return {
      statusCode: 401,
      statusDescription: 'Unauthorized',
      headers: { 'www-authenticate': { value: 'Basic' } },
    };
  }

  return request;
}

保存しただけだと実際にデプロイされていないので、関数を発行をクリックします。
※これをしなかったため、保存したのに反映されない、って最初はなりました...
5.png

CloudFrontに紐づけ

関数は作りましたが、まだCloudFrontディストリビューションに紐づいていないので、関連付けを追加をクリックします
6.png

  • ディストリビューションに関連付けるCloudFrontを設定します
  • イベントタイプViewer requestを選択します
  • キャッシュビヘイビアDefault(*)を選択します
  • 関連付けを追加をクリックして、完了です:smile:

7.png

アクセスしてみる(Basic認証設定後)

さぁ、Basic認証がちゃんとかかったかアクセスしてみましょう。
ちゃんとBasic認証のダイアログが出ましたね :smile:
間違った情報を入力すると、401エラーが返ってくることも確認出来ました

8.png

おわりに

今回はCloudFrontを使ってBasic認証を行う方法について紹介しました。
フロントエンドの構成がCloudFront + S3の場合は、この方法でBasic認証を行うのが良さそうですね :smile:

0
0
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
0
0