テックメモ

技術的に気になったことをメモしていきます

ACMで自動更新ができない件について調べてみた

はじめに

先日クラスメソッドさんのこちらのブログでAWS ACMで自動更新に失敗するケースがあることを知りました。

dev.classmethod.jp

自動更新に失敗することがあると聞いた事はありつつも、詳しい条件は知らなかった為なるほどなぁーとつらつらと眺めていると衝撃的な一文を目にしました。

纏めると次の条件に当てはまる証明書は自動更新が実施されません。 ワイルドカード証明書を利用している

まじか!それは面倒くさいよ!と思い調査をしたところ、AWSのドキュメントがアップデートされており少し状況が変わっている事が判明しました。

ACMで自動更新されない条件(2017/7/3版)

サクッと紹介します。

まず、ACMで自動更新を有効にする条件を見ていきましょう。 参照したドキュメントは以下になります。

docs.aws.amazon.com

証明書を自動的に更新するには、以下の条件が満たされている必要があるとあります。

  • ACM によって証明書の各ドメインHTTPS 接続を確立できる必要があります。
  • 各接続では、返される証明書が ACM が更新している証明書と一致する必要があります。

さらに更新の可能性を高める為には次の操作を行うようにとあります。

  • AWS リソースで証明書を使用すること
  • インターネットからの HTTPS リクエストを許可するようにリソースを設定します
  • ドメイン名を ACM 証明書をホストするリソースにルーティングするように DNS を設定すること

ここまではクラスメソッドさんのブログにある通りだと思います。

ACMワイルドカード証明書を自動更新させる条件(2017/7/3版)

次にACMドメイン検証の仕組みを確認しましょう。 参照したドキュメントは以下になります。

docs.aws.amazon.com

おそらく、ここに関するドキュメントがアップデートされたのだと思います。 自動ドメイン検証の仕組みには以下の記載があります。

ACM は、ワイルドカードドメイン名 (*.example.com など) を親ドメインと同じく処理します。次の表の例を参照してください。

肝心の表を参照してみると・・・・

証明書のドメイン ACM 自動検証に使用するドメイン
example.com example.com / www.example.com
www.example.com www.example.com / example.com
*.example.com example.com / www.example.com

なんとワイルドカードドメインにも自動検証に使用するドメインが記載されています!

念のためAWSサポートの方にも確認したところ、ワイルドカードドメイン証明書の場合は表の通りapexまたはwwwドメインに対して検証を行うとの事でした。
(ただしワイルドカードのみの証明書の場合はRFC 6125に違反する為、不正な証明書とみなされるので注意!!)

つまり、ワイルドカード証明書の場合は以下3点の条件を満たしていれば自動更新される事になります。

  1. 証明書がELBやCloudFrontに設定されている
  2. インターネットからそのリソースに対してアクセスができる
  3. www.もしくはapexドメインでそのリソースにアクセスできるようにDNSでルーティングされている

ELBだと固定費がかかるので、なるべく安く自動更新する為にはS3+CloudFrontのような構成で自動検証をクリアするのが良いかもしれませんね。

CloudFrontでACMを利用する場合はus-east-1で証明書を作成する必要がありました。そのため、東京リージョンで取得したACMの証明書は上記の構成で自動検証をクリアすることができませんでした。
us-east-1以外のリージョンで自動更新を通過させるためには、現状はELBに証明書をセットするしか手がなさそうです。