思い出したようにサーバー証明書の更新通知が来たので、復習を兼ねて設定方法をメモ。
ちなみに証明書はVue.jsのサンプルサイトやCloudFront+S3など、主にWebサイト系の素振り(たまに本番運用)をする際に使っている。
ドメインはRoute 53で構成。
やりたいこと
- AWS Certificate Managerで運用している証明書の、1年ごとの更新を自動で行えるようにする
- 更新時にチャットボットを介して通知を受け取る
使ったサービス
- AWS Certificate Manager(ACM)
- 2K証明書を無料で払い出し、更新するためにACMを使う。
- AWS Chatbot(Chatbot)
- 証明書自動更新の通知をチャットツールに送るためのチャットボットを作るのに使用。
- Amazon Chime(Chime)
- 普段使いしているチャットツール。ここでChabotから通知を受け取る。
- AWS Personal Health Dashboard(PHD)
- 自動更新の通知をマネジメントコンソール上で受け取る仕組み。
- Amazon CloudWatch Events(CWE)
- PHDのイベントを引っかけて処理するのに使う。
- Amazon Simple Notification Service(SNS)
- CWEからメッセージをPublishし、SubscribeしているChatbotに通知するための繋ぎ目として使う。
少々長いが、正しく構成すれば、
という流れで自動更新の通知が飛んで来るようになる。
イメージとしては、「証明書の自動更新」というニュースがニュースサイトに載ると、それを担当者がクリップして登録者に一斉配信し、登録者に名を連ねているボット君が配信メッセージを受け取ってチャットに投稿してくれる、といった感じ。自分でニュースサイトをウォッチしている必要がなくなるし、見落としも起きにくくなくなるメリットがある。
ACMの証明書更新について
ACMで作成した証明書は1年で切れる。
更新方法は、ドメインの所有権の検証方法(リクエストしたユーザーがドメインの管理者であることを確認するプロセス)に対応する形で二種類存在する。
検証方法 | 概要 | 更新 |
---|---|---|
Eメール検証 | whoisの管理者アドレスにメールを送付し、所有権を検証する | 手動 |
DNS検証 | ドメインにACMがCNAMEを作成し、レコードの存在をもって所有権を検証する | 自動 |
以前サイト運用をしていた時はEメール検証を使っていたが、ドメインのwhois情報は一般にプライバシーを考慮してプロバイダーによる代理公開となっているため、メールが届かない。このため、更新時期にwhoisを一時的に解除して検証メールを受け取れるようにした上で承認を行う必要があり、大変面倒くさかった。
DNS検証にしておくと、ACMが登録したCNAMEがドメイン上に存在している限り自動的に検証され、whoisをいじる必要も、メールを開いて承認する必要もない。なので、よほどのことがない限りDNS検証にしておくのがおすすめ。
詳しくはこちら。
通知
自動更新にしておけばほぼメンテフリーだが、一応更新の通知は受け取りたい。
証明書の更新はAWSのPersonal Health Dashboard(PHD)で捕捉できるので、これをボットに食わせてチャットツールで受け取れるようにする。
Step by Step
手順は以下の通り。
最初に「受け手」を構成し、次に「送り手」を構成する。
1. 証明書のリクエストとDNS検証の構成
マネジメントのコンソールにログインし、ACMノードを開く。
新規に証明書をリクエストし、その際ドメイン所有者の検証方法としてDNSの検証を選択する。後は手なりでOK。
2. Chime Webhookの作成
通知を受け取れるよう、チャットボットを構成していく。
まずは通知を受け取りたいChime Room(チャットツール上の部屋。Slackならチャンネル)を選択し、右上の管理ボタンから、Webhookを生成する。名前は何でもよい。
3. WebhookのURLをコピー
4. 新規Chatbotの作成
マネジメントコンソールからAWS Chatbotに移動し、新しいChatbotを作成する。
ChimeとSlackが選択可能。ここではChimeを選択。
5. Chatbotの設定(1)
そのままWebhookの設定画面に進むので、先程コピーしたChime WebhookのURLを貼り付ける。
6. Chatbotの設定(2)
CloudWatchにアクセスするためのIAMロール(今回はCloudWatchは関係ないが、設定上必須)と、指定したWebhookに通知を行うためのSNSトピックを指定する。ここでは、いずれも作成されている前提で進める。
IAMロール | SNSトピック |
---|---|
role4Chatbot | myTopic-NotifyMe |
設定が終わったら保存。
Chatbot(Webhook)が作成され、SNSにSubscriberとしてWebhookが追加される。
ここまでで、SNSトピックに送られた通知をChatbotで受け取り、Chimeに送るための仕掛けができた。
ただし、「受け手」を作っただけなので、これだけではまだ更新通知は届かない。
ACMの証明書更新通知はPHDに届くので、PHDのイベントを引っかけて、SNS経由でChatbotに送るための「送り手」を構成する必要がある。
7. CWEルールの作成
PHDの通知を受け取れるよう、CWEルールを設定する。
PHDの右上にCWEへのリンクがあるので、今回はここから飛ぶ。
8. CWEルール:イベントソースの設定
CWEの構成画面から、イベントソースとしてHealth
を選択する(Health
はPHDを指す)。
9. CWEルール:ターゲットの設定
同じく、ターゲットとしてSNSを選択する。トピックは先程Chatbotで設定したものを使う(PublisherがCWE、SubscriberがChatbotの関係)。
あとはルール名を設定して完了。
受け手と送り手の構成ができたので、これで、1年ごとの証明書更新時にChimeに通知が届くようになる。
証明書更新の通知
更新日になると、DNS更新の恩恵で証明書が自動更新され、以下のようなメッセージがChimeに届く。
ちなみに、AWS BudgetsなどもChatbotに対応しているので、SNS経由でAWSの利用量アラートをChime(ないしSlack)で受け取る、といったことも可能。