はじめに
CData技術ディレクター桑島です。本記事では、AWS EC2上のCDataサーバ製品をHTTPS化して公開する方法をご紹介します。
HTTPS化が必要な理由
CData社では、以下のサーバーアプリケーション製品を提供しております。これらのサーバーアプリケーション製品は、AWSのEC2およびApache・JettyなどのWebアプリケーションサーバーにデプロイして利用することが可能です。また、AWS Marketplaceでは、既にWebアプリケーションサーバーにデプロイ済みのAMIイメージとしても提供しています。
EC2上のWebアプリケーションへの外部からの通信は暗号化されていないHTTPとなりますが、通信を暗号化したHTTPS化することで第三者によるデータの盗聴やなりすまし、改ざん等を防ぐことができます。
本手順でご紹介する方式
AWS EC2上のWebアプリケーションへの通信をHTTPS化する方法はいくつかの方式があるようですが、本手順では、AWSのサービスだけでHTTPS化が完結するACM(AWS Certificate Manager)で発行した証明書をELB(ロードバランサー)にセットする方式をご紹介します。
AWSの利用サービスは、以下のものを利用します。
サービス | 目的 | 備考 |
---|---|---|
Amazon Route 53 | ドメインを取得 | |
Certificate Manager | サーバー証明書を取得 | |
AMI | マシンイメージ | CData社が提供 |
Amazon EC2 | AMIから作成したコンピューティングマシン | CDataサーバー製品がWebサーバにデプロイ済み |
Elastic Load Balansing | 外部からのアクセスの負荷分散 | 今回は、負荷分散目的ではなくHTTPS目的に利用 |
手順
Route 53でのドメインを取得
既に利用可能なドメインを持っている場合は、本手順をスキップください。AWS マネジメントコンソールで、Amazon Route 53 を開きます。
ドメインの取得ウィンドウから取得したドメイン名のキーワードを入力します。例えば、「cdata」で検索すると、「cdata.com」は弊社が既に利用しているドメインとなりますので使用不可と出てきますが、「cdata4.com」や「cdata.biz」などは利用可能となっております。ドメイン名毎に価格が異なりますのでご注意ください。取得したいドメイン名をカートに入れます。
ドメインのお問い合わせ詳細にて登録者の連絡先を登録してウィザードを進み購入します。ドメインの登録はすぐには行われず確認が入るため時間がかかりました。
途中、検証のために登録Emailへの確認メールが飛んできますので、メール内のリンクをクリックします。
登録が完了すると左側メニューの「登録済みドメイン」に追加されます。
また、以下のような登録が完了した旨のメールが送られてきます。
Certificate Managerでのサーバー証明書の取得
AWS マネジメントコンソールで、Certificate Manager を開き、「証明書のリクエスト」ボタンをクリックします。
「パブリックの証明書のリクエスト」にチェックがついていることを確認して「証明書のリクエスト」をクリックします。
ドメイン名を追加します。取得したドメイン名と同じドメイン名の複数サイトを保護するためワイルドカード付きのドメイン両方を追加して次に進みます。
検証方法の選択を行います。「DSNの検証」を選択して次に進み、「確認とリクエスト」をクリックします。
確認が完了すると、Certificate Managerのプライベート証明機関の画面の検証状態が成功となります。
AMIからAmazon EC2 の作成、および、HTTPでの動作確認
Amazon EC2にApacheやJettyなどのWebサーバをインストールしてCDataサーバー製品をデプロイします。各CDataのサーバー製品をEC2に構成する手順はこちらをご覧ください。
- CData社が提供するAWS marketplace内のCData APIServer AMIを利用
下は、CData Syncの例ですが、HTTPの保護されていない外部から接続にてアクセスできていることを確認ください。
Elastic Load BalansingでのEC2インスタンスのターゲット設定と証明書のセット
AWS マネジメントコンソールで、EC2内のロードバランサーを開き「ロードバランサーの作成」をクリックします。
Application Load Balancer を選択して「作成」をクリックします。
手順1:ロードバランサーの設定にて、任意の名前(本例では、cdata)を付与して、リスナーには「HTTPS(セキュア HTTP) ポート:443」をセットします。アベイラビリティゾーンをセットして「次の手順」に進みます。
手順2:セキュリティ設定の構成にて、証明書タイプに「ACMから証明書を選択する(推奨)」にチェックがついていることを確認して上記手順で取得した証明書がセットされていることを確認して「次の手順」に進みます。
手順3:セキュリティグループの設定にて、セキュリティグループを作成、もしくは、既存のものを選択します。アウトバウンドに「TCP:443」のルールの追加が必要となります。必要に応じてソース(アクセス元)の範囲を指定して「次の手順」に進みます。
手順4:ルーティングの設定にて、任意の名称(本例では、cdata)のターゲットグループを作成します。 ターゲットグループには、ターゲットの種類「インスタンス」を選択、プロトコルにHTTP、ポート:(下記のように8080など別なポートを利用の場合はあわせてください。)をセットします。
http://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com:8080/datasync/
ヘルスチェックはプロトコルHTTP、パスは「/」がセットされていることを確認します。
(注意事項) CData のCloud Gateway機能を利用している場合には、プロトコルをHTTPSにセットしないとロードバランサーのヘルスチェックで「Health checks failed with these codes: [302]」エラーが発生する場合があります。 関連ドキュメント aws.amazon.com
手順5:ターゲットの登録にて、CDataサーバー製品が起動しているインスタンスを選択して登録して、「次の手順」に進みます。
手順6:確認で上記で設定した内容を確認したら「作成」ボタンをクリックします。 ロードバランサー作成状況が進行して正常に作成したことを確認て「閉じる」ボタンをクリックします。
EC2内のターゲットグループを開き、ターゲットタブの登録済みターゲットのインスタンスのステータスが「healthy」となっていればヘルスチェックも成功しています。ステータスが「unhealthy」の場合は設定を再度確認してみてください。
Route 53でのホストゾーンの作成
AWS マネジメントコンソールで、Amazon Route 53 を開き、ホストゾーンを選択して「ホストゾーンの作成」を行います。レコードセットの名前に「www.[ドメイン名]」をセット、タイプに「A-IPv4 アドレス」を選択し、エイリアス「はい」を選択します。エイリアス名の「ELB Application Load Balancer」に上記手順で作成したロードバランサーのIDが表示されるので選択して作成します。
HTTPSでのブラウザでのアクセス
それでは、実際に、ブラウザからHTTPSでアクセスしてみます。以下のURLでアクセスしてみます。
ブラウザ上で確認すると保護されたHTTPSの通信でアクセスできていることを確認できれば成功です。
なお、HTTPSのみ公開(HTTPでのアクセスを不可)にする場合は、必要に応じて、EC2インスタンスのセキュリティグループでHTTP(80や8080ポート)の外部からのアクセスを遮断してください。
まとめ
本記事では、AWSのサービスだけでHTTPS化が完結するACM(AWS Certificate Manager)で発行した証明書をELB(ロードバランサー)にセットする方式をご紹介しました。実際のユースケースでは、外部認証機関の証明書を利用するパターンやCloudFrontを利用する方法など様々なパターンで構成することができます。是非、本記事をご参考にお試しいただければ幸いです。