AWSにHTTPS適用

AWSにアップロードしたウェブサイトで使用していたGoogleのAPIが定期的に初期化されていたので調べたところ、そのAPIがテストモードで動作しているとのことでした。Google Cloud Platformにアクセスして確認すると、実際にテストモードで動作していました。プロダクションモードへの切り替えには、適用サイトがHTTPSをサポートしている必要がありました。そこで、HTTPで接続されていたサイトをHTTPSで安全に接続可能に変更する作業を行うことになったという話。 😊 

以前と同様に、詳細な説明はウェブ上の膨大な資料に譲り、どのような作業をなぜ行うのかについてのスケルトンだけを扱います。この内容を見て構造を理解した後、記事内のキーワードで検索して作業を行えば、大きな困難なく作業が可能です。 


HTTPSはブラウザとサーバー間のデータ転送を暗号化するためのプロトコルです。敏感でないデータの場合はHTTPを使用するようになっていますが、情報保護の概念が強化されるにつれ、Google ChromeではHTTPサポートサイトに「安全ではありません」と表示するようになりました。(意外とショックです) HTTPSは公開鍵暗号化方式を使用しますが、そのためにはサーバーは公開鍵と秘密鍵を準備する必要があります。ご存じの通り、秘密鍵はサーバー用で、公開鍵はユーザー配布用です。サーバーは信頼性を高めるために、ユーザー用公開鍵を組織情報と共に認証機関(CA)の認証を受けて配布します。(これを証明書と言い、この証明書はCAの秘密鍵で暗号化され、ユーザーブラウザはCAの公開鍵を使用して復号化します。詳細な動作原理を知りたい場合は「handshake」で検索してください。)🔍 

上記の証明書が準備できたら、サーバーの設定ツールでHTTPSをサポートするように設定し、証明書を特定の場所に保存した後、証明書を使用するようにウェブサーバーを構成すれば完了です。このほかにも、HTTPをHTTPSにリダイレクトしたり、サイト内外のURLがプロトコルに拘束されないように相対パスを使用したり、パスからプロトコルを除外したりする必要があります。(例: //192.168.1.56:8081/something.js) これにより、HTTPS接続時に画像が表示されないなどの不具合を防ぐことができます。📷


ここまでは一般的な話で、私の場合、ウェブサイトがAWSにアップロードされていたため、Amazonのサービスを活用することにしました。まず作業が楽です。無料枠期間中なので、追加費用もかかりません。もちろん基本料金にはトラフィックに比例して課金される費用のほかに基本料もあるため、以下の方法は既にトラフィック問題解決のためにロードバランサーを適用している場合に有用かもしれません。

証明書作業

証明はAWSのCertificate Managerを通じて無料のSSL/TLS証明サービスを受けます。CAを通じて年間費用を支払い、毎回更新作業を行うよりもはるかに安価で便利です。AWS Certification Managerは認証機関を通じた証明書発行と自動更新を自動で行ってくれます。証明書発行作業時にはドメイン名にname.comおよび*.name.comを追加し、e-mailで認証を選択すれば完了します。送信されたメールに同意すると証明書発行が完了します。 📧 

証明書インストールのためのロードバランサー設定

この証明書はトラフィック分散処理サービスであるELB Elastic Load Balancingを使用して配信ポイントにインストールできます。ロードバランサーを生成する方法は、Application Load Balancerを選択し、Basic configurationで名前を設定した後、Scheme = Internet-facing、IP address type = IPv4を選択します。
Network mappingではウェブサービス対象VPC(virtual private cloud)を選択し、Mappingsで2つ以上のAZ(Availability Zones)を選択し、各AZで1つのサブネットを指定します。
Security groupsではデフォルトでDefault security groupを提案しますが、そのまま使用せず、EC2ダッシュボードで該当インスタンスのセキュリティ(タブ)属性のセキュリティグループを確認して同様に指定する必要があります。(これを適切に指定しないとブラウザで接続が切れてしまいます) Listeners and routingではHTTPとHTTPSを両方指定し、適切なターゲットグループを生成して接続します。そして、HTTPSリスナーを追加すると自動的にSecure listener settingsが生まれ、上記のCertificate Managerで生成した証明書を選択できるようになります。(ターゲットグループ生成はBasic configurationでインスタンスを指定、名前指定、プロトコールはHTTP/ポートは80、残りはデフォルトを選択し、次に進みAvailable instancesでインスタンスを選択し、include as pending belowをクリックして下のReview Targetsに追加されるようにします)🔒 

ネームサーバーでAレコードにロードバランサー指定

このように証明書が定義されたロードバランサーが作成されたら、外部トラフィックがそのロードバランサーを通じてインスタンスに伝達されるようにする必要があります。私の場合、以前はドメイン購入先が提供するネームサーバーを使用していましたが、IPではなくロードバランサーを指定できる必要があるため、AmazonのAmazon Route 53というDNSウェブサービスを使用します。ドメイン1つあたり月0.5ドルの料金がかかるのでご注意ください。そのためにドメイン管理サイト(私はホスティングケイアルで購入しました)でAmazonにネームサーバーを指定し(その際に自動的に以前のDNSレコードはすべて消えます)、Route 53でDNSレコードを管理するように移行作業を行いました。すべてそのまま移すだけでよく、Aレコードの場合のみトラフィックルーティング対象にエイリアスを選択し、準備したロードバランサーを選択すれば完了です。

この作業ですべてが完了しました。これで皆さんもChromeのアドレスバーの前に鍵のアイコンを見ることができるようになりました! 🔐✨


Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *