この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
渡辺です。 気付けば7月も後半戦、北海道は夏っぽくないまま秋になりそうな気がしてます。
今日はAnsibleのhtpasswdモジュールを紹介します。
htpasswd
モジュールは文字通り、htpasswd
コマンドに相当し、ApacheのBasic認証で参照するパスワードファイルを管理します。
Python passlib を追加する
htpasswdモジュールを利用するには、Pythonのpasslibライブラリが必要です。 AmazonLinuxで、このライブラリをインストールするにはpipを利用してください。
htpasswdモジュールを利用する前に、python-passlib
がインストールしてある状態にしましょう。
- name: "python-passlib installed"
pip:
name: passlib
htpasswdモジュールでhtpasswdを作成する
htpasswd
モジュールは、file
モジュールなどと同様に、path
,owner
,group
,mode
などを指定して定義します。
また、Basic認証で利用するユーザ名(name
)とパスワード(password
)を設定してください。
- name: "file: /opt/classmethod/.htpasswd for basic auth"
htpasswd:
path: /opt/classmethod/.htpasswd
name: "{{ basic_auth_user }}"
password: "{{ basic_auth_passwd }}"
owner: root
group: apache
mode: 0640
ここでは変数を利用しています。
変数はグループファイルなどに記述し、必要に応じてvalut
で暗号化しておきましょう。
templateモジュールでconfファイルを設定する
htpasswd
ファイルが作成できたので、あとはApacheのconfファイルの設定です。
templateモジュールを利用して、/etc/httpd/conf.d の下に配置すれば良いでしょう。
- name: /etc/httpd/conf.d/cm.conf
template:
src: cm.conf
dest: /etc/httpd/conf.d/cm.conf
owner: root
group: root
mode: "0644"
notify: restart apache24
cm.conf
<VirtualHost *:80>
DocumentRoot /opt/classmethod/www/
<Directory /opt/classmethod/www/ >
AuthUserFile /opt/classmethod/.htpasswd
AuthName "Please enter ID and password"
AuthType Basic
require valid-user
order deny,allow
</Directory>
</VirtualHost>
まとめ
Basic認証は、開発環境や公開前のサイトなどで使う機会が結構あります。 Ansibleを利用している場合は、こういったパターンをスニペットとしてストックしておけるので便利ですね。
最後にコードをまとめておきます。
- name: "python-passlib installed"
pip:
name: passlib
- name: "file: /opt/classmethod/.htpasswd for basic auth"
htpasswd:
path: /opt/classmethod/.htpasswd
name: "{{ basic_auth_user }}"
password: "{{ basic_auth_passwd }}"
owner: root
group: apache
mode: 0640
- name: /etc/httpd/conf.d/cm.conf
template:
src: cm.conf
dest: /etc/httpd/conf.d/cm.conf
owner: root
group: root
mode: "0644"
notify: restart apache24