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サーバでもまったく問題ありません。
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」と表示されます)
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)でも、こういった仕組みが出てきてくれるとありがたいですね。
コメント
> 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
———-