AnsibleでApacheのBasic認証を設定する

この記事は公開されてから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