Apache2.4でBasic認証を設定した際に、Webアクセス毎にエラーが発生するようになりました。
Apache2.2の設定を流用したのですが、アクセス制御のディレクティブはOrder、Allow、Denyから、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に設定をまとめました。
/etc/httpd/conf.d/htaccess.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| # httpd.confに Require all granted が記載されているため
# Basic認証に成功しない場合やALBヘルスチェック用ファイル以外はアクセス拒否とした
<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認証で良いかと思います。