はじめに
RundeckはデフォルトだとWebの管理画面はhttpなんだけど、まともに使うならhttps化しておきたい。
いちおう、Rundeck単体でもSSLの設定することは可能っぽいんだけど、
http://rundeck.org/docs/administration/configuring-ssl.html
見るからにちょっと、めんどくさそうで、Rundeck初心者には敷居が高そうである。
ところで、Rundeckの前段にnginxを配置してhttps化する構成なら大体nginxの知識+αでなんとかなりそうなので、nginxでSSL復号化する構成にしてみる。
RundeckのSSL復号化をnginxにオフロードする
前段のnginxでSSL復号化する構成については、公式wikiに以下のような簡単な説明があるんだけど、
https://github.com/rundeck/rundeck/wiki/FAQ#can-i-do-ssl-offloading
Yes, If you have load balancer or reverse proxy, you can let them handle SSL and just do http between them and RunDeck servers:
- Set up RunDeck as http
- in profile file, add option -Drundeck.jetty.connector.forwarded=true to RDECK_JVM
- Set framework.rundeck.url and grails.serverURL to use https
簡単すぎである。
これを読み解いて何を言ってるかを理解したので、補足説明しておく。
- Set up RunDeck as http
これは、読んだまま、普通にhttpの構成として、Rundeckをセットアップする。
- in profile file, add option -Drundeck.jetty.connector.forwarded=true to RDECK_JVM
これは /etc/rundeck/profile
に RDECK_JVM
という起動オプションを設定している変数があるので、 それに -Drundeck.jetty.connector.forwarded=true
を追加しろということ。
...
RDECK_JVM="-Djava.security.auth.login.config=$JAAS_CONF \
-Dloginmodule.name=$LOGIN_MODULE \
-Drdeck.config=$RDECK_CONFIG \
-Drundeck.server.configDir=$RDECK_SERVER_CONFIG \
-Dserver.datastore.path=$RDECK_SERVER_DATA/rundeck \
-Drundeck.server.serverDir=$RDECK_INSTALL \
-Drdeck.projects=$RDECK_PROJECTS \
-Drdeck.runlogs=$RUNDECK_LOGDIR \
-Drundeck.config.location=$RDECK_CONFIG/rundeck-config.properties \
-Djava.io.tmpdir=$RUNDECK_TEMPDIR \
-Drundeck.server.workDir=$RUNDECK_WORKDIR \
-Dserver.http.port=$RDECK_HTTP_PORT \
-Drundeck.jetty.connector.forwarded=true"
- Set framework.rundeck.url and grails.serverURL to use https
これは /etc/rundeck/framework.properties
の framework.rundeck.url
のスキームを https
にしてねというのと、
...
framework.server.name = localhost
framework.server.hostname = localhost
framework.server.port = 4440
framework.server.url = http://rundeck.example.com:4440
framework.rundeck.url = https://rundeck.example.com
/etc/rundeck/rundeck-config.properties
にある grails.serverURL
のスキームも https
にしてね
...
# change hostname here
grails.serverURL=https://rundeck.example.com
ということらしい。
あとはnginxのSSLを復号化する設定はこんなかんじ。SSL証明書の作り方とかは割愛。特にRundeck関係ないので知らなければぐぐってくれ。
...
http {
....
server {
listen 443;
set_real_ip_from '10.0.0.0/8';
real_ip_header X-Forwarded-For;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto https;
ssl on;
ssl_certificate /etc/nginx/keys/server.crt;
ssl_certificate_key /etc/nginx/keys/server.key;
server_name rundeck.example.com;
....
location / {
proxy_pass http://rundeck:4440;
}
}
}
これで https://rundeck.example.com
でアクセスできるようになった。