CloudFrontでS3のウェブサイトをSSL化する

  • 54
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

「S3 + Route 53」の組み合わせで独自ドメイン運用しているサイトにhttpsでアクセスしたい!と思って調べたところ、ClodFrontを使用すればできることがわかった。

実は、「AWSで静的ウェブサイトをホストする」のステップ6でCloudFront を使用してウェブサイトを高速化する方法が紹介されているが、自分がテストするだけなので高速化は不要だと思ってCloudFrontの設定をしていなかった。

ウェブサイトの高速化に興味がなくても、「S3 + CloudFront + Route 53」に変えるだけでSSL化できるし、なんとこの構成は「AWSにおける静的コンテンツ配信パターンカタログ(アンチパターン含む)」で紹介されている横綱=最高の構成になるらしいので、検証してみる価値あり。

ちなみにCloudFrontはCDN(コンテンツ配信ネットワーク)サービスと紹介されているが、今回使ってみた感想はコンテンツキャッシュ機能付きのリバースプロキシのような感じ。

S3のウェブサイトをCloudFrontに登録

  1. CloudFrontのメニューから「Create Distribution」のボタンをクリック
  2. 配信方法で「Web」を選択
    Clipboard08.jpg

  3. 「Origin Settings」でSSL化したいS3バケットを選択
    「Origin Domain Name」でSSL化したいS3バケットを選択すると、「Origin ID」が自動で設定される(www.example.comの部分は実際に使用するドメイン名)
    Clipboard09.jpg

  4. 「Default Cache Behavior Settings」は何も変更しない

  5. 「Distribution Setting」で「Alternate Domain Name」に使用するドメイン名を設定する(example.comとwww.example.comのように複数のドメイン名を使用する場合は、下位行区切りで入力)
    「Default Root Object」にはS3でウェブサイト用に使用しているバケットの「インデックスドキュメント」と同じファイル名を設定する
    Clipboard10.jpg
    SSL証明書(SSL Certificate)の設定で独自SSLを使用するには事前にIAMに証明書をアップロードしておく必要があるので、とりあえずCloudFrontで用意されているデフォルトのSSL証明書を使う設定で先に進む

  6. 設定内容を保存するとデプロイが始まり、「Status」の欄がDeployedになると使用できるようになる

  7. デプロイが完了したらディストリビューションの詳細画面に表示されているDomain Nameにhttpsでアクセスでき(https://xxxxx.cloudfront.net/等)、S3のウェブサイトを閲覧できるようになる

Route 53の設定をS3からCloudFrontに変更

  1. Route 53のHosted Zonesから、CloudFrontに登録したS3を指しているAレコードwww.example.comの編集画面を開く
  2. 「Alias Target」をS3のエンドポイントから、CloudFrontのディストリビューションに変更し保存する Clipboard11.jpg
  3. しばらくするとブラウザでhttps://www.example.comにアクセスできるようになり、S3のウェブコンテンツが表示される(ただし、CloudFrontのSSL証明書を使用しているのでURLと証明書でドメイン名が一致せず証明書エラーが出る)

CloudFrontに独自SSL証明書を設定

TODO...(未検証)

CloudFrontの開発者ガイドによると、自己証明書は使用できないようである。

Caution
オリジンサーバーが失効した証明書、無効な証明書、または自己署名証明書を返したり、間違った順番の証明書チェーンを返したりした場合、CloudFront は TCP 接続を中断し、HTTP エラーコード 502 を返して、X-Cache ヘッダーを Error from cloudfront に設定します。

サーバー証明書の作成手順に従って証明書を作成し、サードパーティ認証局で署名されたSSL証明書を使用する必要がある。その後、IAM へのサーバー証明書のアップロードを行う。

CloudFrontを使う場合の注意点

CloudFrontはコンテンツキャッシュを行い、「ウェブサイトの高速化」を実現している。デフォルトではオリジンサーバのコンテンツを 24 時間キャッシュする設定になっているため、検証中など頻繁にS3のオブジェクト内容を更新する際にはキャッシュがききすぎて辛い。Cache-Controlヘッダーを設定してCloudFrontのキャッシュ時間を制御する等、キャッシュコントロールを適切に行う必要がある。

参考