rita.xyzはAmazon CloudFrontを用いてS3内のコンテンツを配信している。何気にAmazon Certificate Manager(ACM)でSSL用の証明書を取得してSSL通信可能にしてみようと思ったが、ACMはメールでのドメイン認証が必要。あいにくrita.xyzにはMXレコードを設定していない。なのでAmazon Simple Email Service(SES)でドメイン認証メールを受信できるようにしてからACMで証明書を取得するという手を使ってみた。画像てんこ盛りで長いので続きを読むから。
目次
SESでメールを受信できるようにする
ACMからのドメイン認証メールを受信するため、MXレコードがないrita.xyz宛のメールをSES経由で受信できるようにしておく。
ここではオレゴンリージョン(us-west-2)、受信したメールの保存先として同じオレゴンリージョンにあるS3バケットを利用する。
ドメイン登録&認証
まずマネジメントコンソールからSESを開き、Domains→Verify a New Domainを押す。
ダイアログが出てくるので、登録したいドメイン(rita.xyz)を入力してVerify This Domainを押す。
するとドメイン認証のため次のレコードをDNSに登録しろと表示されるが、rita.xyzのネームサーバーはRoute 53を使用しているのでUse Route 53を押す。
Route 53に選択したレコードを登録するよと表示されるので、Email Receiving Recordにもチェックを入れてCreate Record Setsを押す。すでにMXレコードがある場合は上書きされるので注意。
しばらくするとSESでのドメイン認証が完了する。
受信ルールの設定
Email ReceivingのRule Sets→Create a Receipt Ruleを押す。
入力欄にドメイン名を入力してAdd Recipient→Next Step。
Add actionからS3を選択、S3 bucketに保存先のバケット、Object key prefixにプリフィックス(保存先のフォルダのみを指定する時は最後に/を付ける)を入力し、Add action→Stop Rule Setを選択してNext Step。
Rule nameに適当な名前を入力してNext Step。
Create Ruleを押す。この時S3に書き込みできないという表示が出た時はここを参考に当該バケットに対してバケットポリシーを追加すること。
これで受信できるようになった。適当にメールを送るとS3に送ったメールが保存されているはず(内部的なメッセージIDがファイル名として保存される。件名では保存されないので注意)。
ACMで証明書を作る
マネジメントコンソールからCertificate Managerを開き、今すぐ始めるを押す。
ドメイン名を入力して確認とリクエストを押す。ワイルドカード証明書も作成可能。上に「AWS Certificate Manager 証明書は Elastic Load Balancing のみで使用できます。」とCloudFront抜きで表示されている場合はリージョンをバージニア北部(us-east-1)にすること。
確定とリクエストを押す。
以下のアドレスに検証のメールを送ると表示される。
検証未完了の状態。S3にSESのメールを保存する設定にしたので、S3を確認し複数通届いている認証メールっぽいファイル(タイムスタンプが近くファイルサイズがほぼ同じなもの)のどれかを開きリンク先のページからApproveする。
ドメイン認証が完了すると発行済みに変わる。
CloudFrontに証明書を設定する
CloudFrontの画面から該当するDistributionを選択→GeneralタブでEdit→SSL CertificateからCustom SSL Certificateを選択すると取得した証明書が選べるはずなのでそれを選択し保存、Deployが終わるのを待つ。
Deployedになったら試しにhttpsでアクセスしてみる。Amazon発行の13ヶ月間有効な証明書が確認できる。