S3+CloudFrontで静的サイトホスティングする際に既存の証明書を導入する
西藤です。入社してからあっという間に2ヶ月が経とうとしています。身につけるべきことは山積みですが、非常に濃い経験ができている気がします。引き続き技術習得して行くべく、努力して行きたいと思います。
さて今回は、AWS の S3 と CloudFront を組み合わせた静的サイトホスティングにおける既存の証明書の導入方法をご案内しようと思います。
想定シナリオ
今回の記事において想定するシナリオは以下のようになります。
- 現存するサービスサイトをAWSの新環境においてS3 + CloudFrontの構成にて静的サイトホスティングで公開したい。そして、S3 + CloudFront で静的サイトホスティングをするときに、その現行の証明書を利用したい。
- 現行の環境においては証明書を「企業認証」で取得している。
- ACM上での新規発行では「ドメイン認証」のレベルになってしまうので、「企業認証」となっている現行の証明書を継続して利用したい。
まず、1についてですが、今回はすでに運用されているサービスサイトを新しいAWS環境において S3 を使った静的サイトホスティング、そして CloudFrontのキャッシュ機構を導入することで安定的な稼働を目指すものです。
なお、S3 + CloudFrontの組み合わせで構築するサイトに使う証明書に既存のものを導入する際には注意点があるので、以下で言及します。
次に2と3についてですが、ウェブサイトをhttps通信にて表示させるために使われるSSLサーバー証明書には種類があり、「ドメイン認証」「企業認証」「EV認証」というものがあります。
サイトの運用体制に合わせてこの中から選択することになるのですが、AWS Certificate Manager(ACM)の中の操作で新規発行することができる証明書は「ドメイン認証」のレベルとなってしまいます。そのため「ドメイン認証」ではサイトの運用体制と合致しない場合は現行の環境で使用している「企業認証」で取得されている証明書を継続して利用できるように、新環境に導入する必要があります。
では、今回はACM上で証明書の新規発行はせず、既存の証明書を導入し、CloudFrontで使用する方法を順を追って見て行きたいと思います。
AWS Certificate Manager(ACM)への登録するための情報取得
まず、現状のサービスにおいて使われている証明情報を把握する必要があります。
ACMへ登録するために必要となる情報は以下の3つあります。
- SSLCertificateFile
- SSLCertificateKeyFile
- SSLCertificateChainFile
例えば、現行のサービスが置かれているサーバー内の httpd-ssl.conf の中にある記述などを参照して、上記3つの内容を現行のサーバーの中から確認して、どこに格納されているのかを把握し、あとで使えるようにその場所を控えておきます。
ACMへのインポート
ACMにインポートするする際の注意点
次に上記で把握した内容をAWS Certificate Managerにてインポートを行い、AWSのサービス内で使えるようにするのですが、ここで冒頭で述べたような注意点があります。
Amazon CloudFront で ACM 証明書を使用するには、米国東部(バージニア北部) リージョンで証明書をリクエストまたはインポートする必要があります。
サポートされているリージョン - AWS Certificate Manager
とあることから、ACMにインポートした証明書をCloudFrontで使いたい今回のような場合には、インポート作業を行う前にリージョンの設定が 米国東部(バージニア北部) リージョン
にしてあるように注意が必要です。(2018/10/19 時点の情報となります)
証明書のインポートの手順
管理画面のメニュー位置
AWS Certificate Managerの管理画面に入ったらリージョンが 米国東部(バージニア北部)
となっていることを確認した上で、今回は既存の証明書を登録して使いたいので 「証明書のインポート」
をクリックします。
必要事項の入力
冒頭で確認した証明書の各情報を入力して行きます。
項目名 | 入力する内容 |
---|---|
証明書本文 | SSLCertificateFileとして指定されているファイル (.crt) |
証明書のプライベートキー | SSLCertificateKeyFileとして指定されているファイル (.key) |
証明書チェーン | SSLCertificateChainFileとして指定されているファイル (.ca-bundle) |
各ファイルの内容を参照して、
-----BEGIN PRIVATE KEY-----
というような内容から始まる各ファイルの内容をコピーして、入力欄にペーストして行きます。
登録する内容の確認
入力を終えたら[レビューとインポート]をクリックします。
各ファイルの内容に基づき、対象となるドメイン、証明書の有効期限などの情報が表示されるので問題なければ[インポート]をクリックします。
インポートの完了
インポートに成功するとACMの管理画面の一覧に表示されるようになるので、ACMへの登録は完了。
CloudFrontからACMにインポートした証明書を選択
上記の手順で、 米国東部(バージニア北部)
リージョンで証明書を登録できたので、ACMにインポートした証明書をCloudFrontのディストリビューションを作成する際に選択できるようになります。
証明書の導入ができているかの確認
ドメインをAWS新環境に移行していないうちは、証明書の対象となるサイトのドメインにアクセスしても現環境の内容しか確認できません。
そのため、ローカルの設定を編集することで強制的にDNSのアクセス先の指定をAWS新環境に変えることで、サイトのドメインにアクセスしてもAWS新環境での動作確認をすることができます。
以下にはその動作確認の手順を紹介します。
CloudFrontのDomainのIPアドレスを調べる
dig [CloudFrontのドメインネーム] +short
のコマンドでCloudFrontのIPアドレスが表示されます。
ぼかしが多くて見づらくなっておりますが、対象となるドメインの静的サイトを表示するディストリビューションのIPアドレスをこのようにして調べて、控えておきます。
/etc/hosts を編集してDNS偽装する
/etc/hosts を編集。
これにより、グローバルには変更されていないが 「自PCにおいてのみ」 ドメインとIPアドレスの名前解決の組み合わせがされるという体制になります。
[CloudFrontのIPアドレス] [対象となる証明書と同じドメイン]
の形で編集します。
(左にはIPアドレスを入れてください。CloudFrontのドメイン名をそのまま入れても効かないので注意が必要です。)
ウェブブラウザで該当のドメインにアクセスする
/etc/hosts を編集したことで、対象となる証明書と同じドメインにアクセスすると、アドレスバーの表示はそのサイトのドメインを示していますが 「自PCにおいてのみ」 、CloudFrontのIPアドレスに接続されます。
検証ツールを見ると、CloudFrontを通じて、Amazon S3上の情報が表示されているのがわかります。
CloudFrontのドメイン名にアクセスするだけでは、Amazon発行のCloudFront用の証明書になっていたのが、 /etc/hostsを編集してブラウザを使ってアクセスすることで、このように対象ドメイン用に登録した証明書が機能していることがわかるようになります。
まとめ
以上の手順により、S3 + CloudFront での静的サイトホスティングにおいて、既存環境で使用している証明書の利用継続が実現します。
同様の構成で、既存環境で使用している証明書を継続して利用したい際にご参考になれば幸いです。