LoginSignup
0
0

More than 3 years have passed since last update.

RundeckをHTTPS対応したお話。

Last updated at Posted at 2020-11-15

ことの始まり。

自前の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

namehostnameurlすべてで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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0