This page looks best with JavaScript enabled

[AWS][EC2][ALB]Apache2.4のBasic認証で軽くハマったお話し

 ·  ☕ 2 min read

Apache2.4でBasic認証を設定した際に、Webアクセス毎にエラーが発生するようになりました。
Apache2.2の設定を流用したのですが、アクセス制御のディレクティブはOrderAllowDenyから、Requireに変更されたのが原因でした。

詳細は公式ドキュメントを参照願います。

構成


  • プラットフォーム:AWS
  • 仮想マシン:EC2(t3.small)
  • ロードバランサ:ALB
  • OS:CentOS7.7

なんでCognito使わなかったの?


大人の事情ってやつです。昔ながらのやり方が好まれたって背景もあります
開発期間のみ認証が必要でありユーザ管理もほぼ必要なかったので、Cognitoが必須ではありませんでした。

もし導入するならクラメソ様のインフラエンジニアが一切コードを書かずにWebサーバーに認証機能を実装した話がわかりやすいです。

Apache2.4のBasic認証設定


DocumentRootに作成したくないのと、/etc/httpd/conf/httpd.confを変更したくなかったため、/etc/httpd/conf.d/htaccess.confに設定をまとめました。

# httpd.confに Require all granted が記載されているため
# Basic認証に成功しない場合はアクセス拒否とした
<Directory "/var/www/html/">
   AllowOverride all
   Require all denied
</Directory>
 
# DocumentRootに誤って公開した場合の予防
<Files ~ "^\.(htaccess|htpasswd)$">
   Require all denied
</Files>

# IEでファイルアクセス毎に認証を求められないようにLocationディレクティブを使用
<Location />
   #Basic認証設定
   AuthType Basic
   AuthGroupFile /dev/null
   AuthUserFile /etc/httpd/conf/.htpasswd
   AuthName "Input your ID and Password."
 
   #ALBヘルスチェックファイル環境変数設定
   SetEnvIf Request_URI "/healthcheck.html" healthcheck
 
   #Basic認証とヘルスチェックファイルはアクセス許可
   <RequireAny>
     Require valid-user
     Require env healthcheck
   </RequireAny>
</Location>

まとめ


インフラの要件や運用体制次第で、CognitoかBasic認証のどちらを使うかを決めてください。
優先順位としてはCognito→Basic認証で良いかと思います。

Share on