CData Software Blog

クラウド連携のCData Software の技術ブログです。

AWS EC2上のCDataサーバ製品をHTTPS化して公開する方法

はじめに

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(ロードバランサー)にセットする方式をご紹介します。

f:id:kuwazzy:20200604132843p:plain

AWSの利用サービスは、以下のものを利用します。

サービス 目的 備考
Amazon Route 53 ドメインを取得
Certificate Manager サーバー証明書を取得
AMI マシンイメージ CData社が提供
Amazon EC2 AMIから作成したコンピューティングマシン CDataサーバー製品がWebサーバにデプロイ済み
Elastic Load Balansing 外部からのアクセスの負荷分散 今回は、負荷分散目的ではなくHTTPS目的に利用

手順

Route 53でのドメインを取得

既に利用可能なドメインを持っている場合は、本手順をスキップください。AWS マネジメントコンソールで、Amazon Route 53 を開きます。

f:id:kuwazzy:20200604140854p:plain

ドメインの取得ウィンドウから取得したドメイン名のキーワードを入力します。例えば、「cdata」で検索すると、「cdata.com」は弊社が既に利用しているドメインとなりますので使用不可と出てきますが、「cdata4.com」や「cdata.biz」などは利用可能となっております。ドメイン名毎に価格が異なりますのでご注意ください。取得したいドメイン名をカートに入れます。

f:id:kuwazzy:20200604141003p:plain

ドメインのお問い合わせ詳細にて登録者の連絡先を登録してウィザードを進み購入します。ドメインの登録はすぐには行われず確認が入るため時間がかかりました。

f:id:kuwazzy:20200604141307p:plain

途中、検証のために登録Emailへの確認メールが飛んできますので、メール内のリンクをクリックします。

f:id:kuwazzy:20200604142603p:plain

登録が完了すると左側メニューの「登録済みドメイン」に追加されます。

f:id:kuwazzy:20200604141521p:plain

また、以下のような登録が完了した旨のメールが送られてきます。

f:id:kuwazzy:20200604142656p:plain

Certificate Managerでのサーバー証明書の取得

AWS マネジメントコンソールで、Certificate Manager を開き、「証明書のリクエスト」ボタンをクリックします。

f:id:kuwazzy:20200604141904p:plain

「パブリックの証明書のリクエスト」にチェックがついていることを確認して「証明書のリクエスト」をクリックします。

f:id:kuwazzy:20200604142015p:plain

ドメイン名を追加します。取得したドメイン名と同じドメイン名の複数サイトを保護するためワイルドカード付きのドメイン両方を追加して次に進みます。

f:id:kuwazzy:20200604142219p:plain

検証方法の選択を行います。「DSNの検証」を選択して次に進み、「確認とリクエスト」をクリックします。

f:id:kuwazzy:20200604142846p:plain

確認が完了すると、Certificate Managerのプライベート証明機関の画面の検証状態が成功となります。

f:id:kuwazzy:20200604160956p:plain

AMIからAmazon EC2 の作成、および、HTTPでの動作確認

Amazon EC2ApacheやJettyなどのWebサーバをインストールしてCDataサーバー製品をデプロイします。各CDataのサーバー製品をEC2に構成する手順はこちらをご覧ください。

www.cdatablog.jp

www.cdatablog.jp

  • CData社が提供するAWS marketplace内のCData APIServer AMIを利用

www.cdatablog.jp

下は、CData Syncの例ですが、HTTPの保護されていない外部から接続にてアクセスできていることを確認ください。

f:id:kuwazzy:20200604150330p:plain

Elastic Load BalansingでのEC2インスタンスのターゲット設定と証明書のセット

AWS マネジメントコンソールで、EC2内のロードバランサーを開き「ロードバランサーの作成」をクリックします。

f:id:kuwazzy:20200604150704p:plain

Application Load Balancer を選択して「作成」をクリックします。

f:id:kuwazzy:20200604150829p:plain

手順1:ロードバランサーの設定にて、任意の名前(本例では、cdata)を付与して、リスナーには「HTTPS(セキュア HTTP) ポート:443」をセットします。アベイラビリティゾーンをセットして「次の手順」に進みます。

f:id:kuwazzy:20200604151041p:plain

手順2:セキュリティ設定の構成にて、証明書タイプに「ACMから証明書を選択する(推奨)」にチェックがついていることを確認して上記手順で取得した証明書がセットされていることを確認して「次の手順」に進みます。

f:id:kuwazzy:20200604151316p:plain

手順3:セキュリティグループの設定にて、セキュリティグループを作成、もしくは、既存のものを選択します。アウトバウンドに「TCP:443」のルールの追加が必要となります。必要に応じてソース(アクセス元)の範囲を指定して「次の手順」に進みます。

f:id:kuwazzy:20200604151806p:plain

手順4:ルーティングの設定にて、任意の名称(本例では、cdata)のターゲットグループを作成します。 ターゲットグループには、ターゲットの種類「インスタンス」を選択、プロトコルにHTTP、ポート:(下記のように8080など別なポートを利用の場合はあわせてください。)をセットします。

http://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com:8080/datasync/

ヘルスチェックはプロトコルHTTP、パスは「/」がセットされていることを確認します。

f:id:kuwazzy:20200604161437p:plain

(注意事項) CData のCloud Gateway機能を利用している場合には、プロトコルHTTPSにセットしないとロードバランサーのヘルスチェックで「Health checks failed with these codes: [302]」エラーが発生する場合があります。 関連ドキュメント aws.amazon.com

手順5:ターゲットの登録にて、CDataサーバー製品が起動しているインスタンスを選択して登録して、「次の手順」に進みます。

f:id:kuwazzy:20200604153629p:plain

手順6:確認で上記で設定した内容を確認したら「作成」ボタンをクリックします。 ロードバランサー作成状況が進行して正常に作成したことを確認て「閉じる」ボタンをクリックします。

f:id:kuwazzy:20200604152706p:plain

EC2内のターゲットグループを開き、ターゲットタブの登録済みターゲットのインスタンスのステータスが「healthy」となっていればヘルスチェックも成功しています。ステータスが「unhealthy」の場合は設定を再度確認してみてください。

f:id:kuwazzy:20200604154721p:plain

Route 53でのホストゾーンの作成

AWS マネジメントコンソールで、Amazon Route 53 を開き、ホストゾーンを選択して「ホストゾーンの作成」を行います。レコードセットの名前に「www.[ドメイン名]」をセット、タイプに「A-IPv4 アドレス」を選択し、エイリアス「はい」を選択します。エイリアス名の「ELB Application Load Balancer」に上記手順で作成したロードバランサーのIDが表示されるので選択して作成します。

f:id:kuwazzy:20200604155713p:plain

HTTPSでのブラウザでのアクセス

それでは、実際に、ブラウザからHTTPSでアクセスしてみます。以下のURLでアクセスしてみます。

https://www.[ドメイン名]/datasync/

ブラウザ上で確認すると保護されたHTTPSの通信でアクセスできていることを確認できれば成功です。

f:id:kuwazzy:20200604160056p:plain

なお、HTTPSのみ公開(HTTPでのアクセスを不可)にする場合は、必要に応じて、EC2インスタンスのセキュリティグループでHTTP(80や8080ポート)の外部からのアクセスを遮断してください。

まとめ

本記事では、AWSのサービスだけでHTTPS化が完結するACM(AWS Certificate Manager)で発行した証明書をELB(ロードバランサー)にセットする方式をご紹介しました。実際のユースケースでは、外部認証機関の証明書を利用するパターンやCloudFrontを利用する方法など様々なパターンで構成することができます。是非、本記事をご参考にお試しいただければ幸いです。