これはなに

内部的に証明書の期限監視をしたいタイミングがあり、検証したものをまとめました

やりたいこと

AWS+New RelicでSSL証明書の有効期限が近づいてきたらアラートを発生させ通知したい。

事前準備

AWS Certificate Manager で証明書を準備しておきます。  (証明書期限が365日以内のもの)

手順

モニター作成

New Relicコンソールから Synthetic Monitoring > Create monitor > Certificate Check を選択します。

モニター名と監視する証明書のドメイン名を入力します。

Days remaining until expiration(有効期限までの残り日数)はとりあえず100に設定しておきます。
また、検証のためPeriodは1分に設定します。

ロケーションは任意の場所を選択します。(今回は東京)

モニター作成が完了すると以下のような画面が表示されます。

アラート作成

Alert conditions > New alert condition > Write your own query でアラートを作成します。
QueryではmonitorNameの後に先ほど作成したモニター名を入力します。

SELECT count(*) FROM SyntheticCheck FACET monitorNameresult WHERE result = 'FAILED' AND monitorName = 'your-monitor-name'

閾値は検証のため以下の通り設定していきます。

condition名とポリシーを任意の値に設定します。
Close open incidents afterは検証のため30分に設定します。
(ここをデフォルトのままにすると、閾値を変更してもアラート継続状態が3日くらいクローズされないため)

 

conditionを作成、確認します。

 

アラート発報テスト

作成したモニター > Generalを開き、 Days remaining until expirationを有効期限よりも多く設定します。
(今回は期限まで110日のため200に設定)
Save monitorで設定を変更します。

 

アラートが発生することを確認します。

ワークフローを設定していたのでSlackでもアラート通知を確認できました。

アラートクローズテスト

この方法で設定すると、閾値を元に戻してもアラート状態が継続してしまいます。
今回はClose open incidents afterを設定していたので閾値を戻して30分待ってみます。

閾値を100に戻します。

閾値を戻して10分後の状態です。
まだアラートが継続しています。

閾値を戻して30分以上経過した状態です。
アラートがクローズされていることが確認できました。

 

終わりに

以上で今回の検証は終了です。
検証当初は閾値を直した後もアラートが継続してしまい頭を悩ませていましたが、Close open incidents afterの存在に気が付き無事解決できました。証明書の有効期限切れを防ぐためにも、Certificate Check で SSL証明書期限監視をしてみてはいかがでしょうか。