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

はじめに
AWSが提供するACM(AWS Certificate Manager)、2016年4月現在、 CloudFront、ELB(us-east-1)用で利用できる、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として、サブドメインが存在する環境でした。
SES準備
- ACMのドメイン認証メールを受け取るため、SESのメール受信設定を行います。
- サブドメインを管理しているRoute53と同一のAWS環境を利用しました。
- SESのリージョンは、日本から近いオレゴンを利用しました。
ドメイン認証
- SESのドメイン認証を実施します。
- メール受信を希望するサブドメインを指定し、「Verify This Domain」にすすみます。
認証内容確認
- ドメイン認証用のTXTレコードと、メール着信先を示すMXレコードの確認をします。
- サブドメインがRoute53のHostedZoneで管理されている場合、「Use Route53」に進み設定反映が可能です。
Route53追記内容の確認
- SESによるメール着信を可能とするため、「Email Receving Record」のチェックを入れます。
- Hosted Zoneは、SES、ACMの設定対象とするサブドメインを指定します。
Route53確認
- SESにより設定された、TXTレコード、MXレコードが正しく反映されたことを確認します。
ドメイン認証完了
- Route53にTXTレコードが反映された数分後、SESのドメイン認証のステータスが「verified」となります。
SESメール受信設定
受信ドメイン指定
- AWSコンソールSES画面より、「Email Receiving」→「Rule Sets」→「Create Rule」を開きます。
- 「Recipient」欄にサブドメインを記入します
- サブドメインのみを記入すると、サブドメイン宛に届いた全てのメール受け取りを行う指定となります。
着信設定
- メール着信先となるS3バケットを指定します。
- 2番目のActionは「Stop」、S3へのメール保存のみ行う設定としました。
詳細設定
- メール着信ルールと分かるルール名を指定します。
確認
- メール着信用に設定したルールのステータス、「Enabled」となることを確認します。
ACM設定
証明書リクエスト
- 今回、サブドメイン用に用意する証明書、ZoneApex、ホスト名を省略したサブドメインのみのURLに対応するため、マルチドメイン証明書を発行しました。
S3確認
- メール受信設定をしたS3バケットに、ACMのドメイン認証メールが到着します。
- 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を開き、認証を実施します。
- マルチ証明書を発行した場合、全ての認証が完了するとステータスが「発行済み」となります。
公開設定
- サブドメインをZoneApex、ホスト名省略したURLで公開する設定例を紹介します。
CloudFront
- ACMの証明書、CloudFrontに設定する場合、CNAMEに公開ホスト名を記述します。
- 今回、ZoneApex、ホスト名省略したサブドメインのみの名前を指定しました。
- SSL証明書はACM発行のものを指定します。
ELB
- 2016年4月現在、バージニアリージョンのELBでは、SSL証明書としてACM作成の証明書が選択可能です。
Route53
- サブドメインのみの公開を行うため、Route53に登録するELB、CloudFrontのレコードは、Alias(Zone Apex)として設定します。
まとめ
上位ドメインが別部署で管理、サブドメインのみが委任されAWSのRoute53の管理下にあるケースでも、 簡単なSESの設定のみで、ACMのサーバ証明書を発行に必要なメールを受信することができました。
ACMのメールによるドメイン認証、whois情報として登録された管理者(Registrant Email、Tech Email)宛にも メールが送付されるため、メール受信環境は必須ではありませんが、 ドメインのレジストラによっては、プライバシー設定によりWhois情報が隠匿されていたり、whoisの書式がACMの対応外のため、確認メールが届かない場合もあるようです。 このような場合にも、SESのメール受信機能の利用をご検討ください。
















