Ansible Tower の OSS 版とも言うべき位置づけにある AWX を試していた時にふと気になったことがありました。
デフォルトではブラウザから AWX に HTTP で接続する点です。
「HTTP ということは通信の暗号化はもちろんされていなくて、つまりこの状態で運用すると AWX へのログインはもちろん、 AWX に登録する鍵ファイルやパスワードさえ筒抜けなのでは……?」
SSL を導入して暗号化することにしましたがかなりの手間があったので、もっと簡単な方法で同じ目的を満たせるような手段等、ご存知であれば是非ご一報ください。
作業手順
1.Github上のAWXリポジトリをクローンする。
$ git clone https://github.com/ansible/awx.git
2.inventoryファイルを編集する。
$ cd awx/installer
$ vi inventory
host_port=80の行を以下の通り変更し、保存する。
host_port=443
3.プレイブックを実行し、dockerコンテナをデプロイする。
$ ansible-playbook -i inventor install.yml
4.dockerコンテナがデプロイされていることを確認する。
$ docker ps
5.awx_webコンテナ内にアクセスする。
$ docker exec -i -t <コンテナのID> /bin/bash
コンテナの中に入れていれば、プロンプトが[root@awxweb awx] #
に変化するはずです。
6./etc/nginxディレクトリ直下に証明書用の新ディレクトリを作成する。
# cd /etc/nginx
# mkdir certs
7.証明書の作成を行う。以下のコマンドを実行。
# openssl genrsa -out server.key 2048
# openssl rsa -in server.key -out server.key
# openssl req -sha256 -new -key server.key -out server.csr -subj '/CN=awx.local'
# openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
作成が完了したことを確認する。
# ls
server.crt server.csr server.key
8.nginxの設定ファイルを編集する。
cd /etc/nginx
vi nginx.conf
9.server_name _;の行を以下の通り変更する。
server_name awx.local;
10.keepalive_timeout 65;の真下の行に以下の内容を追記する。編集を終了して保存する。
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
11.コンテナでの作業を中止する。
# exit
12.awx_webコンテナを再起動する。
# docker ps
# docker restart <awx_webコンテナのID>
13.webブラウザ上で、アドレスバーに以下の通り入力する。
https://<AWXをインストールしたサーバのIP>
作業は以上です。自己署名証明書なので chrome で接続した場合プライバシーエラーが表示されると思います。
参考
How to add certificate for AWX login
https://www.youtube.com/watch?v=Ulrr9knCc_w