aws

CloudFrontでお名前.comの独自ドメインおよびSSL証明書を使用する

CloudFrontに、お名前.comで用意したドメインを割り当て、AWSで作成したSSL証明書を適用してHTTPS化したいと思います。

なお注意点として、CloudFrontで利用するSSL証明書は、どのリージョンでサービスを提供するかに関わらず、米国東部 (バージニア北部) リージョン us-east-1 にて作成します

スポンサーリンク

構築手順

ACMでSSL証明書の作成

SSL証明書のリクエスト

まず最初にSSL証明書を作成します。
サービスで [ Certificate Manager ] を選択します。

画面右上の リージョン選択のプルダウンで 米国東部 (バージニア北部)us-east-1 を選択後、画面下の [ いますぐ始める ] を押下します。次の画面から順次、以下を入力してください。

【証明書のリクエスト】
[ パブリック証明書のリクエスト ] にチェックを入れます。

【ドメイン名の追加】
ドメインを設定します。 *(アスタリスク)のワイルドカードを使用すれば複数ドメインに対応できます。
例: *.hoge.com

【検証方法の選択】
[ DNS の検証 ] にチェックを入れます。

お名前.com で Whois情報公開代行 を利用しており、 Whois情報公開代行メール転送オプション(300円/年)を指定しない場合は、必然的にDNSの検証になると思います。


タグを追加 以降は [ 確認 ] → [確定とリクエスト] 押下します。

以下のようにオレンジ色で 検証保留中 となるので、このまま別の画面で、引き続き お名前.com での設定を行います。(※この検証保留中画面はACMのTOP画面からでも確認できるので設定を閉じても大丈夫です)

お名前.comで検証用CNAMEレコードの追加

AWSの画面で表示されている 検証用CNAMEレコードをお名前.comで追加します。

レコード入力時、先頭にスペースが入ってたり末尾に「.」ドットが入ってるとエラーになるので注意してください。

リクエスト成功の確認

AWSへ戻って、しばらく待ちます。自分のときは体感3分くらいでした。F5で更新すると以下のように緑色で 発行済み となります。

CloudFrontで独自ドメイン、SSL証明書の設定

サービスで [ Certificate Manager ] を選択します。

[ Create Distribution ] → Web の [ Get Started] を押下し、次の画面で以下を入力します。

【Origin Settings】
オリジンの情報を入力します。最低限 [ Origin Domain Name ] を入力すれば動きます

【Default Cache Behavior Settings】
キャッシュ動作の設定をします。

[ Viewer Protocol Policy ] は HTTP and HTTPS か HTTPS Only を指定します。「既に稼働しているサービスでHTTPのリダイレクトが必要」などの要件がない限り、HTTPS Onlyがいいと思います。

【Distribution Settings】
このディストリビューションの全体的な設定を行います。

[ Alternate Domain Names(CNAMEs) ] に独自ドメインをいれます。複数ドメインを割り当てたい場合、カンマ区切りや *(アスタリスク)でいれます。

[ SSL Certificate ] は [ Custom SSL Certificate ] を選択しACMで設定したSSL証明書を選択します。SSL証明書は入力欄をクリックすると自動で候補が出てきます。


あとはデフォルト設定でおkです。

お名前.comで独自ドメインのCNAMEレコードの追加

AWSの画面で表示されているCloudFrontのドメイン名をお名前.comのCNAMEレコードとして登録します。


以上で設定完了となります。

DNSが反映されるまでしばらく待ってからブラウザやCurlで正常に動いていることを確認しましょう〜

補足 設定エラー

CloudFrontで設定を保存するために[ Create Distribution ] を押したときに以下のように画面の左下にエラーが出る場合があります。自分が遭遇した2つのエラーを紹介しておきます。

InvalidViewerCertificateException

com.amazonaws.services.cloudfront.model.InvalidViewerCertificateException: 
The certificate that is attached to your distribution doesn't cover the alternate domain name (CNAME) 
that you're trying to add. For more details, see: 
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-requirements
(Service: AmazonCloudFront; Status Code: 400; 
Error Code: InvalidViewerCertificate; Request ID: xxxx-yyyy-zzzz ; Proxy: null)

和訳:ディストリビューションに添付されている証明書は、追加しようとしている代替ドメイン名(CNAME)をカバーしていません。

これはSSL証明書作成時に指定したドメインが、CloudFront設定時のCNAMEs ドメインに対応できていないためです。

例えばSSL証明書では abc.example.com を、CloudFrontのCNAMEsでは *.example.com や xyz.example.com を設定すると当該エラーとなります。

CNAMEAlreadyExistsException

com.amazonaws.services.cloudfront.model.CNAMEAlreadyExistsException: 
One or more aliases specified for the distribution includes an incorrectly configured DNS record 
that points to another CloudFront distribution. 
You must update the DNS record to correct the problem. For more information, see https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-restrictions 
(Service: AmazonCloudFront; Status Code: 409; 
Error Code: CNAMEAlreadyExists; Request ID: xxxx-yyyy-zzzz ; Proxy: null)

和訳:ディストリビューションに指定された1つ以上のエイリアスに、別のCloudFrontディストリビューションを指す誤って設定されたDNSレコードが含まれています。 問題を修正するには、DNSレコードを更新する必要があります。

これはCloudFrontで設定したCNAMEsと同じドメインが既にDNSに登録されている場合に出力されます。
テストなどでドメイン名を使い回してると遭遇しやすいかもしれません。自戒。。

参考

(´・ω・`)ゞアリガトゴザイマス.。.・゚

代替ドメイン名と HTTPS の使用