AnsibleでApacheのBasic認証を設定する
渡辺です。 気付けば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