Amazon CloudFront + ACM 独自ドメインで HTTPS (SSL) 配信設定メモ

クラウド
クラウド
スポンサーリンク

AWS Certificate Manager(ACM)は、AWSの各種サービスで利用する SSL/TLSサーバー証明書の発行/管理/配置を自動で行ってくれるサービスです。Amazon CloudFront(CDNサービス) や Elastic Load Balancing(ロードバランサー)で使う、SSL/TLSサーバー証明書なら、なんと!無料で取得することができます。しかも、証明書の更新作業も AWS Certificate Manager が自動でやってくれます。そこで今回は、この仕組みを利用して、Amazon CloudFront を独自ドメインで HTTPS (SSL/TLS) 配信に設定する方法をメモしておきました。

承認メール受信用のメールアドレスの準備

AWS Certificate Manager で SSL/TLSサーバー証明書を取得する際、ドメインの所有者であることを確認するために、AWS から承認メールが以下のメールアドレスに送られてきます。(メールアドレスの example.com は、証明書を発行するドメイン名になります)

  • admin@example.com
  • webmaster@example.com
  • postmaster@example.com
  • hostmaster@example.com
  • administrator@example.com

もし、これらのメールアドレス宛のメールを受信できない場合は、事前に受信できるようにしておく必要があります。

受信する方法としては、Eメール送受信サービスの Amazon SES を使う、もしくはWEBサーバにインストールされている Postfix をサクッと設定して、普段使っているメールアドレス宛に転送するといった方法もあります。もしよければ「簡単!サーバ証明書の承認メールを Postfix で受信/転送する方法」もあわせてご参照ください。

ACM で SSL/TLSサーバー証明書を取得

AWS Certificate Manager(ACM)で、 SSL/TLSサーバー証明書を取得します。

ひとつ注意しなければならないのは、CloudFront に使う証明書は「米国東部(バージニア北部)」リージョンで取得する必要があります。(2016年12月16日現在)それ以外の東京リージョンなどで取得した証明証は、CloudFront の設定画面で選択することができません。

SSL/TLSサーバー証明書を発行するドメイン名を入力し「確認とリクエスト」をクリックします。

ドメイン名の登録所有者宛にメールを送信する旨が表示されます。前述した承認メール受信用のメールアドレスの準備がOKなら「確定とリクエスト」をクリックします。

承認メールが以下のメールアドレス宛に送信され、承認の完了待ちになります。

下のような内容のメールが届きますので、「Amazon Certificate Approvals」をクリックします。

WEBブラウザで確認画面が開きますので。間違えがなければ「I Approve」をクリックします。

承認が成功すると、以下の画面が表示されます。

AWS Certificate Manager の管理画面に戻り「続行」をクリックします。

以上で、SSL/TLSサーバー証明書が発行されます。認証局(CA)は「Amazon」、有効期限は約1年です。

証明書有効期限の60日前から自動更新プロセスが始まります。ただし、自動更新プロセスが適用されるには条件があるようです。(特にワイルドカード証明書を取得した場合は注意が必要です)詳しくはAWSの公式ブログをご参照ください。
AWS Certificate Manager (ACM) 証明書の自動更新時の注意点 | AWS Solutions Architect ブログ

Amazon CloudFront の設定

本題の Amazon CloudFront の設定です。

サービス >「CloudFront」を選択し「Create Distribution」をクリックします。

コンテンツの配信方法は「WEB」を選択します。

まず初めにオリジンサーバ(元データを格納するサーバ)の設定です。

 Origin Domain Name:オリジンサーバのドメイン名を入力
 Origin ID:自動で設定されますのでそのままでOK
 Origin SSL Protocols:オリジンサーバが使っている SSL Protocols のバージョンを選択
 Origin Protocol Policy:「HTTPS Only」を選択

次に、キャッシュの動作設定です。Viewer Protocol Policy:「HTTPS Only」を選択します。

キャッシュの動作設定の続きです。Query String Forwarding and Caching:「Forward all, cache based on all」を選択します。これを選択しておくと、例えば画像ファイルに「sample.png?v=1」のようなクエリストリングを指定しておいて、画像を差し替える時に、ファイル名を変えずに「sample.png?v=2」として、CloudFront にキャッシュしなおすといった使い方ができます。

最後に配信設定です。

 Alternate Domain Names:先ほどSSL/TLSサーバー証明書を発行したドメイン名を入力
 SSL Certificate:「Custom SSL Certificate」をクリックし、取得したSSL/TLSサーバー証明書を選択

配信設定の続き、あとは初期設定のままでOKです。「Create Distribution」をクリックします。

ディストリビューションの作成が開始します。15分くらいでStatusが「Deployed」になり CloudFront が使えるようになります。

「Domein Name」列に表示されているのが、CloudFront のドメイン名です。これをDNSサーバのCNAMEレコードに登録しますのでメモしておきます。

DNSサーバの設定(Route 53)

DNSサーバに下記の CNAMEレコードを登録します。この記事では AWS の DNSサーバ Route53 に登録していますが、BINDで立てたDNSサーバーや、レジストラ(お名前.comなど)が提供しているDNSサーバでもまったく問題ありません。

cdn.apar.jp. IN CNAME d1v0y00fb1r60y.cloudfront.net.

Amazon Route 53 に登録する場合は、CNAMEレコードではなく AレコードのALIAS(Route 53の独自機能)を使う方がパフォーマンスも良く、利用が推奨されているようです。(ALIASに CloudFront を指定する場合は、CloudFront のStatusが「Deployed」になっている必要があります)

Amazon Route 53のALIASレコード利用のススメ | Developers.IO

動作確認

最後に動作確認です。適当なファイルを CloudFront から何回か取得してみて 「X-Cache: Hit from cloudfront」が表示されていればOKです。(初回取得時はまだキャッシュされていないため「X-Cache: Miss from cloudfront」と表示されます)

$ curl -I https://cdn.apar.jp/wp-content/uploads/2014/10/logo-comp.png
 
HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 4557
Connection: keep-alive
Date: Fri, 16 Dec 2016 21:02:24 GMT
Server: Apache
Last-Modified: Sat, 04 Oct 2014 20:51:51 GMT
ETag: "11cd-5049f04d607c0"
Accept-Ranges: bytes
Cache-Control: max-age=2592000
Expires: Sun, 15 Jan 2017 21:02:24 GMT
Strict-Transport-Security: max-age=31536000; includeSubDomains
Age: 6
X-Cache: Hit from cloudfront
Via: 1.1 8800c8f9c29f284a73ccfb31703a1fbe.cloudfront.net (CloudFront)
X-Amz-Cf-Id: EkqT90Zl_8yURjs8IeMHIQFMEZniscTrOdvzqFqG5QGAdRqogUoslA==

ブラウザでSSL/TLSサーバー証明書を表示してみると、認証局(CA)が Amazon の証明書が使われていることが確認できると思います。

おわりに

AWS Certificate Manager(ACM)からSSL/TLSサーバー証明書を、無料で取得できるのが嬉しいのはもちろんですが、証明書の更新作業も自動化されるので、運用面にも大きなメリットがあります。有料のOV(実在証明型)の証明書やEV証明書を発行している認証局(CA)でも、こういった仕組みが出てきてくれるとありがたいですね。

コメント

  1. akitaka より:

    > DNSサーバに下記の CNAMEレコードを登録します。この記事では AWS の DNSサー
    >バ Route53 に登録していますが、BINDで立てたDNSサーバーや、レジストラ(お名 >前.comなど)が提供しているDNSサーバでもまったく問題ありません。

    お名前でdnsサーバで設定したいのですが、その方法を教えていただけませんか。
    突然のメールで失礼します。
    何卒宜しくお願いいたします。

    • >akitakaさん

      コメントありがとうございます。

      お名前.com の場合は、ドメインNavi(お名前.com の管理ページ)の
      「ドメイン設定」タブ>「DNS関連機能設定」から対象ドメインを選択して「次へ進む」をクリック
      「DNSレコード設定を利用する」の「設定する」をクリックして、DNSレコードの登録画面を開きます。

      例えば下記CNAMEレコードを登録する場合は
      cdn.apar.jp. IN CNAME d1v0y00fb1r60y.cloudfront.net.

      下のように入力して「追加」をクリックして、ページ下の方にある「確認画面へ進む」→「設定する」を押せばCNAMEレコードが登録されます。
      ———-
      ホスト名:cdn
      TYPE:CNAME
      VALUE:d1v0y00fb1r60y.cloudfront.net
      ———-

タイトルとURLをコピーしました