テックメモ

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

ACMでDNSによるドメイン検証が可能になりました(自動更新が楽になるかもしれない)

はじめに

AWSACMに関する以下のリリースを発表しました。

https://aws.amazon.com/jp/about-aws/whats-new/2017/11/aws-certificate-manager-easier-certificate-validation-using-dnsaws.amazon.com

今まで、ACMドメイン検証をする場合は、メール受信による検証だけだったのですが、これにDNSレコードの登録(CNAMEレコード)による検証が加わりました。

正直、今まではこれだけのためにメール受信環境を構築することもあり、TerraformとかCloud Formation等でテンプレ化をしていても面倒だったのでかなり嬉しいリリースです。

何が嬉しいか

メールの受信環境を構築しなくて良いのは楽ですね。

あと、証明書の自動更新もアップデートされたっぽいのです。

どちらかと言えばこちらのアップデートの方が嬉しいのですが、今までは証明書の自動更新の際には以下のプロセスが発生していました。

  1. ACMから対象ドメインの対してHTTPSの接続要求による検証を行う
  2. HTTPSの接続が確認できなかった場合はドメインオーナーに対して確認用Eメールを送付する

ACMからの接続による検証が通ると勝手に更新されていて、ACM最高だわ!となるのですが、接続を制限している環境で運用をしていると、更新時にメール承認の一手間が発生してしまい、あー。ってなっていました。

今回のDNSレコード検証が追加されたことで、更新方法にもバリエーションが増えたようなんです。

docs.aws.amazon.com

上記の、英語版の最新ドキュメントに By email to your AWS account (DNS validation) という項目が追加されていました。

If you originally used DNS validation when you requested your certificate という部分が気にはなりますが、文脈から察するとドメイン検証で取得した証明書については自動更新時にもCNAMEレコードによる検証をしているように思えます。
本当にそうであれば、CNAMEレコードを登録するだけで良いということになり、プライベートな環境で運用している証明書が自動更新されるのかもしれません。

希望的な部分を多分に含んではいますが、DNSレコード検証で取得した証明書の自動更新の際には以下のようなプロセスが発生するのではないかと考えています。

  1. CNAMEレコードによる検証を行う
  2. CNAMEレコードが確認できなかった場合はAWS Accountに対して確認用Eメールを送付する
    (メールの通知先がドメインオーナーからAWS Accountに変更されているようです)

もし、上記の通りであればドメイン検証に寄せていきたいなと思います。
検証のタイミングが難しいですが、結果が出たら更新します。多分。

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に証明書をセットするしか手がなさそうです。