はじめに
こんにちは、京セラコミュニケーションシステム 寳来(ほうらい)(@kccs_teruya-horai)です。
vol.1では Google Cloud のVMインスタンスに画像アノテーションツールである CVAT を構築し接続する方法をご紹介しました。
vol.2となる本記事では、vol.1で構築したVMインスタンスへの証明書と鍵の適用によるSSL化、およびリバースプロキシ機能の有効化によって、HTTPS通信を用いた CVAT への接続 を可能にする方法をご紹介いたします。
vol.1までの環境と違い暗号化を施した通信を行うことができるようになるので、より セキュアなアノテーション環境を構築 することができます。
本記事は 2024 年 2 月ごろに作成しております。
よって、引用している文章などはこの時点での最新となります。ご了承ください。
連載記事一覧
クラウドで簡単画像アノテーション ~vol.1 Google Compute EngineにCVATを構築しよう!
クラウドで簡単画像アノテーション ~vol.2 Apacheを使ってCVATにHTTPS通信を実装しよう! ★本記事★
完成イメージ
VMインスタンスに Apache2 をインストールし、SSL 化と リバースプロキシ 機能を使ってCVATへの HTTPS通信接続 を実装します。
まず、CVATを構築したVMインスタンスにApacheをインストールします。次に、設定ファイルを用いてApacheにサーバー証明書ファイル、中間CA証明書ファイル、秘密鍵ファイルの3つを適用することでSSL化を行います。さらにリバースプロキシ機能も使用して、443ポートへのリクエストをCVATのために開かれている8080ポートへ転送するように設定を行います。
以上を完了させてから証明書に紐づいたドメインへアクセスすると、HTTPS通信でCVATへのアクセスが行われるようになります。
この記事の対象者
- クラウド上に構築したCVATに対して、セキュアな通信で接続したい方
- Apacheを用いたSSLの適用とリバースプロキシの実装方法にお悩みの方
手順の説明に入る前に…
HTTPS通信実装の手順の説明へと入る前に、今回の記事で重要となる2つの技術である SSL と リバースプロキシ について簡単にですが解説いたします。
SSLって何?
SSLとは(Secure Socket Layer)とは、インターネット上でのデータの送受信を暗号化するための仕組みです。暗号化によって悪意のある第三者による通信の盗聴やなりすましを防ぐことができます。WEBブラウザからSSLを使ったサイトに接続すると、アドレスの冒頭は http://… ではなく https://… となります。
さらにSSLには、認証局より発行された電子証明書を使ってそのウェブサイトが信用に足るものであるとアクセス者に証明する機能もあります。
本記事ではApache2に電子証明書と秘密鍵を適用することでSSL化を行います。
リバースプロキシって何?
リバースプロキシとは、クライアントからのリクエストを各サーバーへ転送するためのサーバーのことを指します。通信のセキュリティやパフォーマンス、信頼性の向上のために用いられます。
本記事では、インスタンスの443ポートで受信するブラウザからのHTTPSによるリクエストを、リバースプロキシによってCVATの8080ポートへ転送します。
用意するもの
実装に先立って各自でご用意していただく4つのものをご説明します。
1. ドメイン
Webサイトがどこにあるかを人が判断しやすくするための情報で、インターネット上の住所のようなものです。「0.0.0.0」のような数字だけで構成されるIPアドレスではわかりづらいので、一般的なサイトではIPアドレスと紐づけられたドメイン名でアクセスを行います。たとえば、Qiitaのドメインは qiita.com
となります。
今回は、構築したVMインスタンスの外部IPアドレスに紐づいたドメインの取得を事前に行っています。
2. サーバー証明書ファイル
認証局によって発行されるもので、SSL/TLSサーバー証明書とも呼びます。証明書に紐づいたドメインが安全であるという証明を行うファイルです。
これをVMインスタンス内へアップロードしておいてください。
なお、本記事ではこのサーバー証明書ファイルを my_SSL_Certificate_File.crt
と定義しています。
3. 中間CA証明書ファイル
サーバー証明書を発行している認証局自体に対する証明書です。認証局が信頼に足ると証明する .crt
ファイルです。
こちらのファイルもVMインスタンスへアップロードをお願いします。
本記事では my_SSL_Certificate_Chain_File.crt
と定義しています。
4. 秘密鍵ファイル
サイト証明書の中に含まれている公開鍵と対になるもので、安全な通信を行うために使用される鍵です。
このファイルもアップロードしてください。
本記事ではこの鍵を my_SSL_Certificate_Key_File.key
と定義しています。
CVATにHTTPS通信を実装しよう
Apache の構築
リバースプロキシ機能とSSL化の実装のために、Webサーバとして一般的に使われている Apache の構築を行っていきます。
前回の記事を参考にCVATを構築したVMインスタンスにSSH接続を行い、コンソールを呼び出してコマンドを入力します。
Apacheをインストールします。
$ sudo apt update
$ sudo apt install apache2
Apacheのプロキシ機能とhttpでのプロキシ機能を有効化するために、以下のコマンドを実行します。
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
Apacheでヘッダーを編集する機能を有効化します。
$ sudo a2enmod headers
Apacheの自動転送機能を有効化します。
$ sudo a2enmod rewrite
変更した設定を反映するために、Apacheを再起動します。
$ sudo systemctl restart apache2
VMインスタンスの外部IPアドレスをブラウザに入力してアクセスし以下のような画面が表示されたら、Apache の構築は成功です。
SSL化とリバースプロキシの実装
構築した Apache を使って、SSL化とリバースプロキシを実装します。
事前に準備した サーバー証明書ファイル 、 中間CA証明書ファイル 、 秘密鍵ファイル を、VMインスタス上の分かりやすい場所にアップロードしてください。
次に、ApacheでSSL化とリバースプロキシを行うための設定ファイルを/etc/apache2/sites-enabled/
の下に作成します。ファイル名はcvat-ssl-reverseproxy.conf
とします。
$ vi /etc/apache2/sites-enabled/cvat-ssl-reverseproxy.conf
コマンドライン内でテキストエディタが立ち上がりますので、以下の内容を入力して保存します。ドメイン名 ServerName
、サーバー証明書ファイルのパス SSLCertificateFile
、秘密鍵ファイルのパス SSLCertificateKeyFile
中間CA証明書ファイルのパス SSLCertificateChainFile
、以上4つの項目の内容をお手元の環境に合わせて 書き換え てください。
<VirtualHost *:443>
ServerName domain-example-cvat-ssl-reverseproxy.jp
SSLEngine on
SSLCertificateFile /home/teruya_horai/myfiles/my_SSL_Certificate_File.crt
SSLCertificateKeyFile /home/teruya_horai/myfiles/my_SSL_Certificate_Key_File.key
SSLCertificateChainFile /home/teruya_horai/myfiles/my_SSL_Certificate_Chain_File.crt
ProxyRequests Off
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
<Proxy *>
Allow from all
</Proxy>
</VirtualHost>
変更した設定を反映させるために、Apacheを再起動します。
$ sudo systemctl restart apache2
以上でApacheでのSSL化とリバースプロキシを行うためのセットアップは完了です。
HTTPS通信でCVATにアクセスしてみよう
それでは、CVATを立ち上げてHTTPS通信で接続してみましょう。
Apacheのconfファイルではlocalhostの8080ポートへ転送するように設定しましたので、CVATへのアクセスに使用するアドレスを指定する環境変数 CVAT_HOST
もlocalhostに設定します。
$ export CVAT_HOST=localhost
CVAT をダウンロードしたディレクトリに移動し、コンテナを起動します。
docker compose up -d
ドメインをブラウザに入力してアクセスし、保護された接続 でCVATが表示されればHTTPS通信の実装は成功です!
お疲れ様でした!
まとめ
いかがでしたでしょうか?
本記事では構築した CVAT 用のインスタンスにSSLとリバースプロキシを適用することでHTTPS通信を可能にする方法をご紹介いたしました。
弊社では他にもデジタルトランスフォーメーション(DX)に関する様々な技術情報をご紹介しております。もし今回の記事が参考になった方は、ぜひ他の記事もご覧ください!
おしらせ
弊社X(旧:Twitter)では、Qiita投稿に関する情報や各種セミナー情報をお届けしております。情報収集や学びの場を求める皆さん!ぜひフォローしていただき、最新情報を手に入れてください