20160127加筆修正
AWS環境上のWEBサイトにBASIC認証をつけてみました。
キーワード [ AWS Apache BASIC認証 .htaccess .htpasswd ]
0.目標
WEBサイトのページにユーザー/パスワードでアクセス認証を付けたいことってあるかと思います。
今回はApacheのルートディレクトリ配下に認証をつけていこうと思います。
1.準備
Apacheの設定までみていきます。
セキュリティグループ
プロトコル | ポート | ソース |
---|---|---|
TCP | 22 | 0.0.0.0/0 |
TCP | 80 | 0.0.0.0/0 |
2.Apacheのインストールとhttpd.confの編集
sudo yum update -y
sudo yum install httpd -y
sudo chkconfig httpd on
EC2にApache(httpd)をインストールします。
インストールが完了したら、Apacheの設定ファイル(/etc/httpd/conf/httpd.conf)を編集します
今回はApacheのルートディレクトリを(/var/www/html)から(/var/www/html/sample)に変更します。
MAKE_DIR="/var/www/html/sample"
ORG_DOCUMENT_ROOT="\/var\/www\/html"
CHANGE_DOCUMENT_ROOT="\/var\/www\/\html\/sample"
ORG_DIRECTORY_INDEX="DirectoryIndex index.html index.html.var"
CHANGE_DIRECTORY_INDEX="DirectoryIndex index.html index.html.var index.php"
AUTH_USER_FILE="/var/www/html/.htpasswd"
EXCLUSEION_PASS="/elb-test.txt"
SET_ENV_NAME="healthcheck"
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
sudo sed -i -e "/^DocumentRoot/s/$ORG_DOCUMENT_ROOT/$CHANGE_DOCUMENT_ROOT/g" /etc/httpd/conf/httpd.conf
sudo sed -i -e "/^DirectoryIndex/s/$ORG_DIRECTORY_INDEX/$CHANGE_DIRECTORY_INDEX/g" /etc/httpd/conf/httpd.conf
cat << EOF >> /etc/httpd/conf/httpd.conf
<Location />
AllowOverride all
Satisfy Any
AuthType Basic
AuthName "Login"
AuthUserFile ${AUTH_USER_FILE}
Require valid-user
SetEnvIf Request_URI "${EXCLUSEION_PASS}" ${SET_ENV_NAME}
Order Deny,Allow
Deny from all
Allow from env=${SET_ENV_NAME}
</Location>
EOF
sudo mkdir ${MAKE_DIR}
catで書き込む際ですが、sudo su でrootにスイッチしたのち、変数を設定し、cat以下をコピペすれば使えます。
3. .htaccess .htpasswd の作成と編集
/var/www/html/.htaccessを作成します。
AUTH_USER_CONF_FILE="/var/www/html/.htaccess"
USER_NAME="user01"
USER_PASSWD="user01-passwd"
HTPASSWD_PATH="/var/www/html/.htpasswd"
USER_NAME:認証用のユーザー
USER_PASSWD:パスワード
sudo su
touch ${AUTH_USER_CONF_FILE}
chmod 604 ${AUTH_USER_CONF_FILE}
cat << EOF >> /var/www/html/.htaccess
AuthUserfile ${AUTH_USER_CONF_FILE}
AuthGroupfile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user
EOF
htpasswd -c -b ${HTPASSWD_PATH} ${USER_NAME} ${USER_PASSWD}
chmod 604 ${HTPASSWD_PATH}
rootになってから変数を指定してください。
4.テスト
sudo service httpd start
Apacheを起動してEC2のパブリックIPにアクセスしてください。
認証画面が出てきて設定したユーザー名、パスワードでサンプルページへログインができるはずです。
5.ELBヘルスチェック用ページ作成とBLBへのインスタンス登録
ELB_PATH="${MAKE_DIR}${EXCLUSEION_PASS}"
sudo touch ${ELB_PATH}
ELBを作成してください。
ヘルスチェックのところで指定すれば完了です。
参考
http://dev.classmethod.jp/cloud/elb-exclude-health-check-url/
http://qiita.com/yuwaita/items/e406c645ae8d0cc3c3fa
おまけ
下記スクリプトを作成して実行権限を付与し、実行すれば一気に作成できます。
#!/bin/bash
MAKE_DIR="/var/www/html/sample"
ORG_DOCUMENT_ROOT="\/var\/www\/html"
CHANGE_DOCUMENT_ROOT="\/var\/www\/\html\/sample"
ORG_DIRECTORY_INDEX="DirectoryIndex index.html index.html.var"
CHANGE_DIRECTORY_INDEX="DirectoryIndex index.html index.html.var index.php"
AUTH_USER_FILE="/var/www/html/.htpasswd"
EXCLUSEION_PASS="/elb-test.txt"
SET_ENV_NAME="healthcheck"
AUTH_USER_CONF_FILE="/var/www/html/.htaccess"
USER_NAME="user01"
USER_PASSWD="user01-passwd"
HTPASSWD_PATH="/var/www/html/.htpasswd"
ELB_PATH="${MAKE_DIR}${EXCLUSEION_PASS}"
sudo yum update -y
sudo yum install httpd -y
sudo chkconfig httpd on
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
sudo sed -i -e "/^DocumentRoot/s/$ORG_DOCUMENT_ROOT/$CHANGE_DOCUMENT_ROOT/g" /etc/httpd/conf/httpd.conf
sudo sed -i -e "/^DirectoryIndex/s/$ORG_DIRECTORY_INDEX/$CHANGE_DIRECTORY_INDEX/g" /etc/httpd/conf/httpd.conf
sudo sh -c "cat << EOF >> /etc/httpd/conf/httpd.conf
# <Location>
<Location />
AllowOverride all
Satisfy Any
AuthType Basic
AuthName \"Login\"
AuthUserFile ${AUTH_USER_FILE}
Require valid-user
SetEnvIf Request_URI \"${EXCLUSEION_PASS}\" ${SET_ENV_NAME}
Order Deny,Allow
Deny from all
Allow from env=${SET_ENV_NAME}
</Location>
EOF"
sudo mkdir ${MAKE_DIR}
sudo touch ${AUTH_USER_CONF_FILE}
sudo sh -c "cat << EOF >> ${AUTH_USER_CONF_FILE}
AuthUserfile ${AUTH_USER_CONF_FILE}
AuthGroupfile /dev/null
AuthName \"Please enter your ID and password\"
AuthType Basic
require valid-user
EOF"
sudo chmod 604 ${AUTH_USER_CONF_FILE}
sudo htpasswd -c -b ${HTPASSWD_PATH} ${USER_NAME} ${USER_PASSWD}
sudo chmod 604 ${HTPASSWD_PATH}
sudo touch ${ELB_PATH}
sudo service httpd start
修正
httpd.conf内に
AllowOverride all
AuthType Basic
AuthName \"Login\"
AuthUserFile ${AUTH_USER_FILE}
Require valid-user
このように設定を書き加えるよりも、conf内はAllowOverride all
のみにし、.htaccessファイルにて管理をしたほうがよさ気。
参考:バーチャルホストを使用している場合
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/exampleDoc
ServerName www.example.dns
<Directory "/www/exampleDoc">
AllowOverride all
</Directory>
</VirtualHost>
このようにして指定ディレクトリで.htaccessを読み込むようにし(AllowOverride all).htaccess内で設定を書く。(先に書いている内容で良い)