3
2

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

Last updated at Posted at 2024-09-18

はじめに

開発環境では特定の人(例えば自社の人)だけが見れるようにアクセス制限をすることがあると思います。
アクセス制限の選択肢としてBasic認証やIP制限が考えられますが、Basic認証をしたい場合、みなさんどうしていますか?

  • AWS WAFでやる
  • CloudFrontFunctionsでやる
  • Lambda@Edgeでやる
  • Webサーバ(Apacheなど)の設定でやる
    などあるかと思います。

その中で今回はAWS WAFを使ってBasic認証を行う方法を説明します。

やってみた

では、実際にやってみましょう。
今回は、ALB(Application Load Balancer)にBasic認証を設定します。

Web ACLの作成

基本情報と紐づけるリソースの設定

左メニューのWeb ACLsからCreate web ACLをクリックします。
1.png

  • Resource typeとしてRegional resoucesを選択します
  • RegionTokyoを選択します
  • Nameは任意のACL名にします。今回はbasic-authenticationとでもしておきます

CloudFrontにBasci認証をかけたい場合は、Resource typeとしてCloudFront distributionsを選択してください!

2.png

  • Resource typeとしてApplication Load Balancerを選択します
  • すると既存のALBがリスト表示されるので、Basic認証をかけたいALBにチェックを付けます

3.png

他にもAPI GatewayなどにBasic認証をかけることが出来ます

ルールの作成

次にルールを作成します。
今回は、設定した認証情報以外は、アクセスを拒否するようなルールを作成します

  • Add rulesからAdd my own rules and rule groupsを選択します
    4.png

ルールの基本情報を入力します

  • Rule builderを選択します
  • Nameは任意のルール名にします。今回はbasic-authenticationとでもしておきます
  • RuleからRegular Ruleを選択します
    5.png

ルールの詳細を入力します

  • リクエストが一致しない場合に拒否したいので、If a requestdoesnt match the statement(NOT)を選択します
  • InsepectSingle headerを選択します
  • Basic認証に利用するヘッダーとして、Header field nameauthorizationを設定します
  • Match typeExactly matches stringを選択します
  • String to matchに設定するBasic認証の情報を入力します
  • Text transformationNoneを選択します

6.png

例えば、ユーザ名がhoge、パスワードがhugaのBasic認証をかけたい場合は、以下のコマンドで出力されたBase64エンコード文字列を設定します
echo -n 'hoge:huga' | base64

次に、ルールの評価結果どうするかを設定します

  • 認証情報が誤っている場合はリクエストをブロックしたいので、ActionBlockを設定します
  • Custom ResponseEnableにし、Response Code401にします
  • KeyWWW-AuthenticateValueBasic realm="Basic"を入力し、エラー時のレスポンスヘッダーを設定します

7.png

  • Default actionAllowを選択します
    8.png

確認と作成

後はそのままで、Create web ACLをクリックすると、Web ACLが作成されます :smile:
9.png

10.png

11.png

アクセスしてみる

Basic認証がちゃんとかかったかALBのURLにアクセスしてみましょう。
ちゃんとBasic認証のダイアログが出ましたね :smile:
間違った情報を入力すると、カスタムレスポンスに設定したステータスコードレスポンスヘッダーが返ってくることも確認出来ました
12.png

おまけ(AWSを使わないでBasic認証を場合)

例えば、LAMP環境でBasic認証をしたいとなった場合、Apacheで設定することになると思います。

Apacheの設定

以下簡単にWordPress環境のApacheでの設定例を記載します。
※Apacheのバージョンによって設定ファイルの場所などは変わりますので、ご注意ください :bow:

# Basic認証のユーザを作成
sudo /opt/bitnami/apache/bin/htpasswd -cb /opt/bitnami/apache/test_user ${ユーザ名} ${パスワード}

# Apacheの設定ファイルに以下を追加
sudo vim /opt/bitnami/apache/conf/vhosts/htaccess/wordpress-htaccess.conf

<Directory "/opt/bitnami/wordpress">
    AuthType Basic
    AuthName "Authentication required"
    AuthUserFile "/opt/bitnami/apache/test_user"
    Require valid-user
</Directory>

#設定ファイルを読み込み
sudo apachectl graceful

おわりに

今回はAWS WAFを使ってBasic認証を行う方法について紹介しました。
バックエンド側の修正をせず、AWSだけで行えるのは便利ですね :smile:

3
2
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
3
2