AWS CloudFront FunctionsでBasic認証を設定する

これまでAWSのS3にアップした静的ファイルにBasic認証を設定するには CloudFront経由でLambda@EdgeでBasic認証を指定する必要がありましたがCloudFront Functionsの登場によって、CloudFront Functionsを利用して少しだけ簡単に設定できるようになりました。

CloudFront FunctionsはCloudFrontのサイドバーの「関数」から作成できます。

関数ページでは右上の「関数を作成」から適当な名前をつけてBasic認証用の関数を作成します。

CloudFront Functions はLambda@Edgeと違いECMAScript 5.1相当のJavaScriptしか記述できないので注意が必要です。

function handler(event) {
  var authUser = 'user';
  var authPass = 'pass';
  
  var authString = 'Basic ' + (authUser + ':' + authPass).toString('base64');
  
  var request = event.request;
  var headers = request.headers;
  
  if (
    typeof headers.authorization === "undefined" ||
    headers.authorization.value !== authString
  ) {
    return {
      statusCode: 401,
      statusDescription: "Unauthorized",
      headers: { "www-authenticate": { value: 'Basic realm="Please Enter Your Password"' } }
    };
  }
  
  return request;
}

作成後は変更を保存して発行するとCloudFrontで利用可能になります。

CloudFrontでFunctionsを設定

CloudFrontのディストリビューションからBasic認証を設定したいディストリビューションを選択して、ビヘイビアからオリジンを選択し編集します。

関数の関連付けのビューワーリクエストに

関数タイプ : CloudFront Functions
関数 ARN/名前 :作成していた Basic認証用の関数

を指定することでCloudFront FunctionsでBasic認証が可能になります。

スポンサードリンク

«AWS SAM のtemplate.yamlをdeploy環境ごとに切り替える | メイン | Nuxt.js / Next.jsで作成したサイトをGitHub ActionsでAWS S3にデプロイする»