はじめに
たまにしか更新しないSSL証明書、有効期限を過ぎてから気がつくことってありませんか?
実際、私も過ぎてはいなかったものの期限間近に気がつき、慌てて更新する事態になりました。
SSL証明書の有効期限は2023年6月時点で約13ヶ月(397日)ですが、実は少しずつ短縮されています。
今後さらに短縮された結果、また期限ぎりぎりで気づくことになるのは防ぎたいところ。
予防策としてリマインダー系のツールで通知設定することも検討しましたが、いちいち更新の度に期限を確認するのもスマートじゃないし、万が一ヒューマンエラーで期限を間違えでもしたら目も当てられません。
そこで、Amazon EventBridgeを利用して証明書の期限から30日前にメールで通知が来るように設定を行いました。
今回はその時の対応内容を記事にまとめてみましたので、ぜひご参考ください。
手順はAWS re:Postにあったこちらのページを参考にしています。

前提
AWS Certificate Managerへ証明書のインポートが完了している状態を想定しています。
使用するコンソール
- Amazon Simple Notification Service(SNS)
- Amazon EventBridge
- AWS Certificate Manager
※2023年6月23日時点の情報です。
トピックの作成
SNSでトピックを作成し、メール通知の設定をしていきます。
(すでにメール通知のトピックを作成している場合は、ここは読み飛ばしてください。)
AWSにログインしたらSNSを開き、トピックから「トピックの作成」を選択。

詳細で「スタンダード」を選択。
任意の名前を入力して「トピックの作成」をクリックします。

次にサブスクリプションを作成します。
作成したトピックのページから「サブスクリプションの作成」をクリック。
トピックARNが先ほど作成したトピックになっていることを確認し、プロトコルを設定します。
今回はメールで通知したかったので、「Eメール」を選択しました。
エンドポイントには送信するメールアドレスを入力し、「サブスクリプションの作成」をクリックします。

設定したアドレスに確認メールが届いたら、メール本文の「Confirm subscription」をクリック
サブスクリプションのステータスが確認済みになればOKです。
EventBridgeにイベントルールを作成
メール通知が送信されるルールを作成します。
Amazon EventBridgeを開き、 ルールから「ルールを作成」をクリック

任意の名前を入力し、ルールタイプの「イベントパターンを持つルール」を選択して、次へ をクリックします。
※イベントバスの場合は関連付けるイベントバスを選択してください。

イベントソースで「AWS イベントまたは EventBridge パートナーイベント」を選択します。

作成のメソッドで「パターンフォームを使用する」を選択
イベントパターンは、
イベントソース: AWS のサービス
AWS のサービス: Certificate Manager
イベントタイプ: ACM Certificate Approaching Expiration
を選択し、次へ をクリックします。

ターゲットタイプは「AWS のサービス」を、ターゲットの選択は「SNSトピック」を選択します。
通知設定を行うトピックを選択したら、次へ をクリック。

タグを設定する場合は追加し、次へ をクリックします。

ルールの詳細を確認し、問題がなければ「ルールを作成」をクリックして完了です。
有効期限通知の日数を変更
デフォルトでは期限の45日前に通知が届くように設定されていますが、今回は30日前に変更したいと思います。
AWS Certificate Managerを開きます。
先述したAWS re:Postの解決方法には
ACM API のPutAccountConfiguration アクションで、DaysBeforeExpiry に 1~45 の値を入力します。
などと難しく書いていますが、AWS Certificate Manager の証明書一覧にある「有効期限イベントの管理」で設定できます。

有効期限までの日数に「30」を入力し、保存をクリックします。

これで30日前から、1日1回通知が届くようになりました。
30日以外の日数で設定したい場合は、1~45の任意の数字を入力してください。
※45日以上でも設定できますが、AWS Configを有効化することになるため、使用量に応じて追加コストが発生します。
さいごに
今回の設定で、証明書の期限に早めに気づけるようになったので、とりあえず一安心です。
後は通知が来た時に、忘れず対応するだけですね。
有効期限が切れたままでは、ページを開いたときに警告が出てしまうため、サイトを訪れたユーザーに不信感を与えてしまいます。
そういった事態を避けるためにも、メールでの通知は妥協せず設定しておきましょう。
特に、期限が長いものほど油断は禁物
多少面倒でも対応しておくことをおすすめします。