【Rundeck】SSL証明書の自動更新
目的
無料で使えるSSL証明書のLet’s Encryptは大変ありがたい存在です。
ただし、この証明書は3か月で期限が切れます。3か月ごとに更新のコマンドを打てばいいのですが、面倒です。更新を忘れてしまう場合もあります。
Rundeckといういい感じのジョブスケジューラを使っているので、Rundeckを使用してSSL証明書を自動更新する仕組みを作ります。
Projectの作成
まずログイン後に現れる「新しいプロジェクト」を選択します。
初回ログイン時で出ていない場合は、左側のナビゲーションバーの「Project」から選択することができます

次に、適当な名前でProjectを作ります。
Project作成時にExecution Modeや User Interface など各種設定ができますが、今回は全てデフォルト設定のままで作成しました。

Create a newProject
Project Name
Project_A <–#適当につけた名前
LabelやらDescriptionは空欄のままでもいけました。
また、キャッシュ等の細かい設定もプロジェクトの作成段階で決められるようですが、これも全てデフォルトのままで「保存」ボタンを押しました。
困ったらあとで考える方針です。
(ちなみにデフォルトのCashe Delayは30)
ここまででプロジェクトの作成は完了です。
ジョブの作成
では、いよいよジョブを作ります。
ナビゲーションバーの「ジョブ」から「新しいジョブを作成」を選択します。

ジョブ作成の画面に遷移しますので、まずはジョブの名前を好きなように入れます。
必須部分以外はスルーしていきますが、重要なのはワークフローの部分です。ワークフロータイプでコマンドを選択し、第一ステップの場所に以下を入力します。

01 | sudo certbot renew |
上記がこれが証明書を自動更新するためのメインコマンドです。
また次のステップでhttpdを再起動するコマンドも書いておきます。
01 | sudo systemctl restart httpd |
次に、スケジュールの登録のところまで進みます。
Let’s encryptの有効期限は90日になります。今回は1か月毎に更新するジョブにしたいと思います。
Crontabのタブをクリックし以下の通りに設定します。
0 0 1 1 * ? *
これは左から、 秒 分 時 日(その月の) 月 曜日 年 に対応しています。月一回ということで、秒と分は特に指定しないということで、0をしています。時と日には1を指定しています。これは1日の1時という意味になります。月は*を指定しています。これはすべての月を指定することになります。週は特に指定しないですが、日と競合しないよう?を設定します。年も*を指定。
これにより、毎月1日の1時にジョブが走る設定になります。

残りの設定としてはタイムアウトとリトライ回数をそれぞれ1m,1で設定して作成しました。
それ以外は全てデフォルトです。

最後に「作成」を押すと、登録が完了します。ここで、今すぐ実行というボタンが出てくるので、これを押すと、ジョブの動作確認がすぐにできます。大変便利ですし、エラー確認ができるので、まずは一回実行しておくことをお勧めします。
ただし、実行する前に一つ準備が要ります。このまま実行するとrundeckユーザーというユーザーで実行が行われますが、このユーザーですと、sudo が許可されずにエラーがでます。
そのため、実行する前にrundck ユーザーにsudoコマンドを許可しておく必要があります。
具体的にはvisudoで以下のように変更します。
01 02 03 04 | $ sudo visudo #Defaults !visiblepw <--コメント化 Defaults visiblepw <--& #36861;加 rundeck ALL=(ALL) NOPASSWD:ALL <--& #36861;加 |
前準備に時間を要しましたが、いよいよジョブを実行します。
先ほどの「今すぐジョブを実行」から実行します。

結果
以下のメッセージが出ました。
01 02 03 04 05 06 | 23:10:13 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 23:10:13 Cert not yet due for renewal 23:10:13 23:10:13 - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 23:10:13 23:10:13 The following certs are not due for renewal yet: |
どうやら、Let’s encryptの証明書の期限が30日より多い場合は不要ということではじかれたようです。
ただ、ジョブとしては正しく動ことが確認できていますので、期限が30日以内の場合は更新がかかると思います。
今後、ジョブの実行履歴を確認して 期限30日以内の実行が上手くいくかをウォッチしたいと思います。