RundeckをHTTPS対応したお話。
ことの始まり。
自前のVPSの管理だとか、自前で作っているシステムのバッチ基盤としてRundeckを使用しています。
ところが、適当に導入してしまっていたのでHTTP通信でのやり取りをしている状況です。セキュリティ的によろしくない。
いい加減何とかしなければ、と思ったので、HTTPS対応を行いました。そのことを残しておきます。
既存の記事を見ながら作業したらハマった
TL;DR;
- Rundeckのマニュアルをちゃんと読め
- JVMオプションとして
server.web.context
は使えない、server.servlet.context-path
を使え - /etc/rundeck/profileはいじらない、カスタマイズ用のファイルを作成すべし
環境・前提
作業した環境はこんなところです。
項目 | 内容 | 説明 |
---|---|---|
OS | Centos 7.9 | さくらのVPS |
MW | Rundeck 3.3.6 | yumを使用してインストールしました。 |
MW | Apache 2.4.6 | 言わずもがな |
MW | certbot 1.9.0 | Let's Encryptツール |
上記にある通り、Rundeckは実行可能Warやtomcat前提のwarではなく、パッケージとして導入したもの(=debやrpm)を使用しています。
構成
利用者 <--HTTPS--> Apache <----> Rundeck
変更作業
ではHTTP通信をHTTPS化するべく、作業を進めましょう。
Rundeck編
Rundeck側で対応が必要なファイルは以下です。
- /etc/default/rundeckd または /etc/sysconfig/rundeckd
- /etc/rundeck/framework.properties
- /etc/rundeck/rundeck-config.properties
/etc/default/rundeckd
または /etc/sysconfig/rundeckd
はデフォルトでは作成されないため、新規に作成します。DEBパッケージの場合は/etc/default/rundeckd
、RPMパッケージの場合は/etc/sysconfig/rundeckd
を使用するとのことです。
(RPMだけれど/etc/default/rundeckdにファイル作ったら普通に読んでくれた、もしかしてどっちも見ている?)
多くの記事では/etc/rundeck/profile
をいじっている記述があるのですが、このファイルはアップデートがあった場合に書き換えられてしまう可能性があるため、変更してはいけないとのことです。(/etc/rundeck/profileを開くと先頭に書いてある)
profileファイルのカスタマイズがrundeckdファイルとなるわけです。
#
# Rundeck Configuration
#
RDECK_JVM_OPTS="-Dserver.servlet.context-path=/rundeck \
-Drundeck.jetty.connector.forwarded=true"
この中で最も大事なのはserver.servlet.context-path
です。Rundeckのコンテキストパスを指定するものです。Apacheをフロントエンドとするため、パスを合わせるために設定が必要です。
他の記事を参照するとコレをserver.web.context
で設定する記述があるのですが、少なくとも利用しているバージョンでは機能しませんでした。←コレがハマりポイント
/etc/rundeck/framework.properties
はサーバ名や接続URIを変更します。
# ----------------------------------------------------------------
# Rundeck server connection information
# ----------------------------------------------------------------
#framework.server.name = localhost
framework.server.name = <<サーバドメイン>
#framework.server.hostname = localhost
framework.server.hostname = <<サーバドメイン>
framework.server.port = 4440
#framework.server.url = http://localhost:4440
framework.server.url = https://<<サーバドメイン>/rundeck
name
hostname
url
すべてでlocalhostではなくドメイン名を使用するように変更します。
更に、url
は変更したコンテキストルート/rundeck
を追加します。
url
はApache経由で接続する際の最終的なURLを設定します。
/etc/rundeck/rundeck-config.properties
はGrailsとしての設定です。ここでも接続URIの変更が必要です。
#grails.serverURL=http://localhost:4440
grails.serverURL = https://<<ドメイン>>/rundeck
設定内容はframework.server.url
と一致させる必要があります。
Apache編
ApacheにLet'sEncryptの証明書を設定する手順は以下を参照してください。今回のバージョンとは多少異なりますが、同じ手順で行けました。
CentOS7 + RPM版 Apache HTTPD 2.4.6 で Let's Encrypt 導入メモ : certbot, 2017年1月時点
Rundeckと連携させるにあたり、Apache側で対応が必要なファイルは以下です。
- /etc/httpd/conf.d/rundeck.conf
Rundeck向けのVirtualHost設定です。
<Location "/rundeck">
ProxyPass http://localhost:4440/rundeck
ProxyPassReverse http://localhost:4440/rundeck
</Location>
Locationはserver.servlet.context-path
と一致させます。
こちら側はドメイン名でなくてもlocalhostを使用して問題ないです。
反映作業
設定の反映のためには、Rundeckの再起動・Apacheのリロードが必要です。
sudo systemctl restart rundeckd
sudo systemctl reload httpd
コレでHTTPSアクセスができるようになるはずです。
参考
CentOS7 + RPM版 Apache HTTPD 2.4.6 で Let's Encrypt 導入メモ : certbot, 2017年1月時点
Rundeck - System Properties Configuration
Author And Source
この問題について(RundeckをHTTPS対応したお話。), 我々は、より多くの情報をここで見つけました https://qiita.com/filunK/items/bbae3e30a62393763f77著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .