話題の記事

[ACM] SSL証明書発行時のドメイン認証メールをSESで受け取ってみた

2016.04.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSが提供するACM(AWS Certificate Manager)、 CloudFront、ELB(2016年4月17日より東京リージョンでも利用可能になりました)で利用できる、 HTTPS通信用のサーバ証明書を、追加費用なく利用できるサービスです。

ACMではサーバ証明書の作成時、対象ドメインの正当な保有者である事の確認のため、 メール認証が行われます。

通知先はwhoisに登録されたドメインの管理者と、

  • admin@<ドメイン>
  • administrator@<ドメイン>
  • hostmaster@<ドメイン>
  • postmaster@<ドメイン>
  • webmaster@<ドメイン>

宛に確認URLを含むメールが送信されます。

今回、

  • 上位ドメインに委任されたサブドメインのみ、Route53で管理されている。
  • サブドメインにはメール着信環境が存在しない。
  • 上位ドメイン管理者によるACMドメイン認証の代行操作が難しい。

といった、ドメイン認証のメール受け取りができない環境で、 ACMのSSL証明書を必要とする機会がありました。

AWSのサービス(SES、Route53、S3)を利用したメール受信環境を設定する事で、 簡単にドメイン認証を実施できました。

CloudFront、ELB、Route53の公開設定とあわせ、その内容を紹介させていただきます。

Route53

サブドメイン

  • トップドメインは、末尾「.com」で終了するgTLD
  • Route53のHostedZoneとして、サブドメインが存在する環境でした。
  • MXレコードが存在する場合、メール受信環境が存在する可能性があります。既存環境の管理者とご相談ください。

acm-subdomain-ses-01

SES準備

  • ACMのドメイン認証メールを受け取るため、SESのメール受信設定を行います。
  • サブドメインを管理しているRoute53と同一のAWS環境を利用しました。
  • SESのリージョンは、日本から近いオレゴンを利用しました。

ドメイン認証

  • SESのドメイン認証を実施します。
  • メール受信を希望するサブドメインを指定し、「Verify This Domain」にすすみます。

acm-subdomain-ses-03-1

認証内容確認

  • ドメイン認証用のTXTレコードと、メール着信先を示すMXレコードの確認をします。
  • サブドメインがRoute53のHostedZoneで管理されている場合、「Use Route53」に進み設定反映が可能です。

acm-subdomain-ses-03-2

Route53追記内容の確認

  • SESによるメール着信を可能とするため、「Email Receving Record」のチェックを入れます。
  • Hosted Zoneは、SES、ACMの設定対象とするサブドメインを指定します。

acm-subdomain-ses-03-3

Route53確認

  • SESにより設定された、TXTレコード、MXレコードが正しく反映されたことを確認します。

acm-subdomain-ses-03-4

ドメイン認証完了

  • Route53にTXTレコードが反映された数分後、SESのドメイン認証のステータスが「verified」となります。

acm-subdomain-ses-03-5

SESメール受信設定

受信ドメイン指定

  • AWSコンソールSES画面より、「Email Receiving」→「Rule Sets」→「Create Rule」を開きます。
  • 「Recipient」欄にサブドメインを記入します
  • サブドメインのみを記入すると、サブドメイン宛に届いた全てのメール受け取りを行う指定となります。

acm-subdomain-ses-04-1

着信設定

  • メール着信先となるS3バケットを指定します。
  • 2番目のActionは「Stop」、S3へのメール保存のみ行う設定としました。

acm-subdomain-ses-04

詳細設定

  • メール着信ルールと分かるルール名を指定します。

acm-subdomain-ses-05

確認

  • メール着信用に設定したルールのステータス、「Enabled」となることを確認します。

acm-subdomain-ses-04-3

ACM設定

証明書リクエスト

  • 今回、サブドメイン用に用意する証明書、ZoneApex、ホスト名を省略したサブドメインのみのURLに対応するため、マルチドメイン証明書を発行しました。

acm-subdomain-ses-06

S3確認

  • メール受信設定をしたS3バケットに、ACMのドメイン認証メールが到着します。

acm-subdomain-ses-07

  • S3に着信したメールの宛先は以下のとおりでした。
    • admin@<サブドメイン>.<ドメイン>
    • administrator@<サブドメイン>.<ドメイン>
    • hostmaster@<サブドメイン>.<ドメイン>
    • postmaster@<サブドメイン>.<ドメイン>
    • webmaster@<サブドメイン>.<ドメイン>

認証URL抽出

  • ACMのドメイン認証メールはテキストと、HTMLが混在したメールで届きます。
  • S3に到達したファイルをダウンロードし、「https:」で開始する行のみを抽出する事で、認証用リンクが抽出可能でした。
cat *  | grep "^https:" | sort -u
https://nnnnnnn.amazon.com/approvals?code=nnnnnnn-dc31-47c4-852e-nnnnnnn&context=fa7df816-e175-4fb4-83f5-nnnnnnn-nnnnnnn
https://nnnnnnn.amazon.com/approvals?code=nnnnnnn-8c01-4d19-af09nnnnnnnn&context=4bc25e2e-ae5e-4e43-b9b7-nnnnnnn-nnnnnnn

認証

  • ブラウザで認証URLを開き、認証を実施します。

acm-subdomain-ses-10

  • マルチ証明書を発行した場合、全ての認証が完了するとステータスが「発行済み」となります。

acm-subdomain-ses-11

公開設定

  • サブドメインをZoneApex、ホスト名省略したURLで公開する設定例を紹介します。

CloudFront

  • ACMの証明書、CloudFrontに設定する場合、CNAMEに公開ホスト名を記述します。
  • 今回、ZoneApex、ホスト名省略したサブドメインのみの名前を指定しました。
  • SSL証明書はACM発行のものを指定します。

acm-subdomain-ses-12

ELB

  • 2016年4月現在、バージニアリージョンのELBでは、SSL証明書としてACM作成の証明書が選択可能です。

acm-subdomain-ses-13

Route53

  • サブドメインのみの公開を行うため、Route53に登録するELB、CloudFrontのレコードは、Alias(Zone Apex)として設定します。

acm-subdomain-ses-14

まとめ

上位ドメインが別部署で管理、サブドメインのみがAWSのRoute53で管理されている場合でも、 SESを利用することで、ACMのサーバ証明書発行手続きに必要なメールを受信することができました。

AWSではメールの受信環境、EC2上にSendmail、Postfixなどを利用して構築する事は可能ですが、 環境構築やインスタンス費用に加えて、正しくメール環境を維持するには相応のコストが発生します。

また、ACMのメールによるドメイン認証、whois情報として登録された 管理者(Registrant Email、Tech Email)宛にもメールが送付される仕様です。

ただ、ドメインの管理が別ベンダーにより実施されていたり、ドメイン取得に利用した レジストラによっては、プライバシー設定によるWhois情報の隠匿や、 whois情報のフォーマットがACM対応外でドメイン管理者宛メールが受け取れない場合があります。

メール環境の存在しないドメイン、サブドメイン環境で、ACMによる無料SSL証明書の発行手続きが必要な場合には、 まずSESのメール受信機能をお試しいただければと思います。