datsukan blog
🛠️

ACMの証明書が自動更新に失敗した際の対応(CAAレコード追加)

これはなにか

AWS Certificate Manager(以後ACMと表記)で発行している証明書の自動更新に失敗した際の対応の記録です。

結論

証明書の再発行を行うことで原因が明らかになることがある。

背景

私の個人ブログでは各記事にいいねボタンを設置しています。
裏側の仕組みはAWS上で構築しており、API GatewayでWebAPIのエンドポイントを用意しています。
API Gatewayのエンドポイントに対してACMで発行した証明書を紐づけています。

これらを構築したのがちょうど1年前でした。

証明書の自動更新失敗の通知

ある日AWSからメールが来ていました。
要約すると証明書の更新ができない状態だから期限が切れる前にDNSのレコードを修正しろってことのようです。

以下文面です。

Greetings from Amazon Web Services,

You have an SSL/TLS certificate from AWS Certificate Manager in your AWS account that expires on [マスキング:有効期限]. This certificate includes the primary domain api.good.blog.datsukan.me and a total of 1 domains.

AWS account ID: [マスキング]
AWS Region name: [マスキング]
Certificate identifier: [マスキング]

AWS Certificate Manager (ACM) was unable to renew the certificate automatically using DNS validation. You must take action to ensure that the renewal can be completed. If the certificate is not renewed and the current certificate expires, your website or application may become unreachable.

To renew this certificate, you must ensure that the proper CNAME records are present in your DNS configuration for each domain listed below. You can find the CNAME records for your domains by expanding your certificate and its domain entries in the ACM console. You can also use the DescribeCertificate command in the ACM API[1] or the describe-certificate operation in the ACM CLI[2] to find a certificate’s CNAME records. For more information, see Automatic Domain Validation Failure in the ACM troubleshooting guide[3].
The following 0 domains require validation:

If you have questions about this process, you can contact the Support Center[4]. If you don’t have an AWS support plan, you can post a new thread in the AWS Certificate Manager discussion forum[5].

[1] https://docs.aws.amazon.com/acm/latest/APIReference/API_DescribeCertificate.html
[2] https://docs.aws.amazon.com/cli/latest/reference/acm/describe-certificate.html
[3] https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-renewal.html#troubleshooting-renewal-domain-validation-failure
[4] https://console.aws.amazon.com/support
[5] https://repost.aws/tags/TAJ7zd4vjzSfC_8JNlsbq2tA?forumID=206
Sincerely,
Amazon Web Services

Amazon Web Services, Inc. is a subsidiary of Amazon.com, Inc. Amazon.com is a registered trademark of Amazon.com, Inc. This message was produced and distributed by Amazon Web Services Inc., 410 Terry Ave. North, Seattle, WA 98109-5210

ACMのページを確認してみる

ACMのコンソールから対象ドメインのページを確認したところ、自動更新の欄が保留中となっていました。
ただ、なぜ保留中なのか具体的な原因は記載されていませんでした。

解決策を調査

メールの内容から確認

メールには以下の記述がありました。

To renew this certificate, you must ensure that the proper CNAME records are present in your DNS configuration for each domain listed below. You can find the CNAME records for your domains by expanding your certificate and its domain entries in the ACM console.

「DNSでCNAMEのレコードはちゃんと設定されてる?ACMのコンソールからCNAMEのレコードに設定すべき内容を確認できるよ!」って内容のようです。
このCNAMEのレコードは最初に証明書を発行した際にDNS認証するのに設定しているので、DNS認証した人はあえて削除していなければあるはずです。
私の場合も存在していました。

ネット上で情報を探す

とりあえず「ACM 自動更新 失敗」みたいなワードで検索しまくってみましたが、いまいちピンとくる情報がありませんでした。

ただメールのThe following 0 domains require validationという不自然な記述が気になって検索したところ、以下の通りAWSのコミュニティサイトにおける質問を見つけました。

I received an email from AWS telling me my cert could not be renewed until the following domains were verified, but there were no domains in the list. The proper CNAME record for the domain shows Success but the Certificate status is still "Pending verification" which it has been for over a week now. How do I renew the certificate?

Ended up trying to create an identical certificate. That gave me an error message about a problem with the CAA. Fixed the CAA issue and the original cert then successfully verified. Would have been great to just have this message as the pending reason from the start...

この人は私と同じように証明書の自動更新に失敗しているが、CNAMEのレコードは適切なのでThe following 0 domains require validationとなっていたようです。
そして、証明書の再発行を行ったところ、認証の際にCAAレコードの問題に関するエラーメッセージが表示され、その内容に従って修正したところ解消したとのことでした。

証明書を再発行してみる

自動更新の際は明確なエラーメッセージが無かったですが、新規発行時には出る可能性があるということなので、早速私も再発行してみました。
そうすると先述のコミュニティサイトにおける記述と同様にCAAレコードに関する問題がある旨がACMのコンソール上で表示されました。
さらに下記のページへのリンクがあったので確認しました。

どうやら下記のいずれかをvalueにしたCAAレコードがDNSに設定されている必要があるようです。

  • amazon.com
  • amazontrust.com
  • awstrust.com
  • amazonaws.com

CAAレコードの追加

今回対象とするドメインはapi.good.blog.datsukan.meです。
datsukan.meがメインのドメインで、api.good.blogを付けたサブドメインになっています。
早速CAAレコードを追加しようとしていくつかの問題に直面しました。

  • api.good.blog.datsukan.meに対してはAPI Gatewayのエンドポイントに対するエイリアスとしてCNAMEレコードが既に存在している
    • 同じホスト名に対してCNAMEレコードとCAAレコードをどちらも登録することは出来ない仕様らしい
  • datsukan.me自体は別のサイトに使用しており、証明書の発行も別で行っている
    • datsukan.meに対してCAAレコードを発行したところdatsukan.meのサイト側で証明書の自動更新が失敗した

結局good.blog.datsukan.meに対してCAAレコードを登録することでうまくいきました。
ACMのコンソール上では少し待ってからリロードすると反映されていました。

API Gatewayで証明書の紐づけをやり直し、API Gatewayのエンドポイントを作り直したのでDNSで設定しているエイリアスのCNAMEレコードを修正することで、問題なく使える状態になりました。

おわり

ACM、DNSまじ分からんって感じですね。
自動更新のときにCAAレコードのエラーメッセージ出してくれないの謎です。

今回自動更新ではなく新規発行の形になっているので、おそらく原因は同じとはおもいつつ、1年後にうまくいくのか少し不安です。
少なくとも最初ACMで証明書を発行・設定したときはCAAレコード必要なかったんですが、なんで今は必要になったのかが分からずモヤモヤしてます。

もうちょっと詳しい方いればコメントで教えていただけると嬉しいです。

2024.01.15 追記

他の証明書について同じ対応したところ自動更新成功しました。
やはりCAAレコードが必要だったようです。

コメント
 
URLをコピーしました
Profile picture
datsukan

24歳。埼玉県在住。東京都のSaaS企業でバックエンドエンジニアとして勤務しています。

© 2022 datsukan