LoginSignup
8
6

More than 5 years have passed since last update.

EC2上のApacheでBASIC認証をやってみる[.htaccess]

Last updated at Posted at 2016-01-24

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の編集

Apacheのインストール
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)に変更します。

httpd.conf置換用変数
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"
httpd.conf
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を作成します。

.htaccess/.htpasswd用変数
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:パスワード

.htaccess/.htpasswd
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ヘルスチェック作成用変数(設定したものと同じものを使ってください)
ELB_PATH="${MAKE_DIR}${EXCLUSEION_PASS}"
elb用ヘルスチェックページ作成
sudo touch ${ELB_PATH}

ELBを作成してください。

EC2_Management_Console.png

ヘルスチェックのところで指定すれば完了です。


参考

http://dev.classmethod.jp/cloud/elb-exclude-health-check-url/
http://qiita.com/yuwaita/items/e406c645ae8d0cc3c3fa
 
  
   
   
   
   

   

おまけ

下記スクリプトを作成して実行権限を付与し、実行すれば一気に作成できます。

basic.sh
#!/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ファイルにて管理をしたほうがよさ気。

参考:バーチャルホストを使用している場合

httpd.conf
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /www/exampleDoc
ServerName www.example.dns
  <Directory "/www/exampleDoc">
    AllowOverride all
  </Directory>
</VirtualHost>

このようにして指定ディレクトリで.htaccessを読み込むようにし(AllowOverride all).htaccess内で設定を書く。(先に書いている内容で良い)

8
6
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
8
6