記事
· 2023年8月15日 9m read

Docker による Apache Web ゲートウェイ

Docker による Apache Web ゲートウェイ

コミュニティの皆さん、こんにちは。

この記事では、以下を使用して、Docker でプログラムによって Apache Web ゲートウェイを構成します。

  • HTTPS プロトコル
  • Web ゲートウェイと IRIS インスタンス間の安全な通信を確保する TLS/SSL

画像

イメージには、Web ゲートウェイ用と IRIS インスタンス用の 2 つを使用します。

すべての必要なファイルは、こちらの GitHub リポジトリで入手可能です。

では、git clone から始めましょう。

git clone https://github.com/lscalese/docker-webgateway-sample.git
cd docker-webgateway-sample

システムの準備

権限に関する問題を回避するために、システムにユーザーとグループが必要です。

  • www-data
  • irisowner

コンテナと証明書ファイルの共有に必要です。 これらがシステムに存在しない場合は、以下を実行します。

sudo useradd --uid 51773 --user-group irisowner
sudo groupmod --gid 51773 irisowner
sudo useradd –user-group www-data

証明書の生成

この例では、以下の証明書を使用します。

  1. HTTPS Web サーバーの使用状況
  2. Web ゲートウェイクライアントの TLS/SSL 暗号化
  3. IRIS インスタンスの TLS/SSL 暗号化

これらを生成するためにすぐに使用できるスクリプトが用意されています。

ただし、証明書の件名はカスタマイズする必要がありますが、これは、 gen-certificates.sh ファイルを編集するだけです。

以下は、OpenSSL subj 引数の構造です。

  1. C: 国コード
  2. ST: 州
  3. L: 場所
  4. O: 組織
  5. OU: 組織ユニット
  6. CN: コモンネーム(基本的に、ドメイン名またはホスト名)

これらの値を自由に変更してください。

# sudo is needed due chown, chgrp, chmod ...
sudo ./gen-certificates.sh

すべてが正しく設定されたら、証明書を含む ./certificates/~/webgateway-apache-certificates/ という新しいディレクトリが 2 つ表示されます。

ファイル コンテナ 説明
./certificates/CA_Server.cer webgateway、iris 認証局サーバー証明書
./certificates/iris_server.cer iris IRIS インスタンスの証明書(ミラーと webgateway の通信暗号化に使用)
./certificates/iris_server.key iris 関連する秘密鍵
~/webgateway-apache-certificates/apache_webgateway.cer webgateway Apache Web サーバーの証明書
~/webgateway-apache-certificates/apache_webgateway.key webgateway 関連する秘密鍵
./certificates/webgateway_client.cer webgateway webgateway と IRIS の通信を暗号化するための証明書
./certificates/webgateway_client.key webgateway 関連する秘密鍵

自己署名証明書がある場合、Web ブラウザにセキュリティ警告が表示されることに注意してください。 認証許可から配布された証明書がある場合はもちろん、自己署名証明書の代わりにそれを使用できます(特に Apache サーバー証明書の場合)。

Web ゲートウェイ構成ファイル

構成ファイルを見てみましょう。

CSP.INI

CSP.INI ファイルは webgateway-config-files ディレクトリにあります。
イメージにプッシュされますが、コンテンツはランタイム時に変更可能です。 このファイルをテンプレートとして考えてください。

この例では、コンテナの起動時に、以下のパラメーターがオーバーライドされます。

  • Ip_Address
  • TCP_Port
  • System_Manager

詳細は、startUpScript.sh をご覧ください。 大まかに言えば、sed コマンドラインで置換が実行されます。

また、このファイルには、IRIS インスタンスとの通信を保護する SSL/TLS 構成が含まれています。

SSLCC_Certificate_File=/opt/webgateway/bin/webgateway_client.cer
SSLCC_Certificate_Key_File=/opt/webgateway/bin/webgateway_client.key
SSLCC_CA_Certificate_File=/opt/webgateway/bin/CA_Server.cer

これらは重要な行です。 証明書ファイルがコンテナで使用できることを確認する必要があります。
これは、後で docker-compose ファイルの volume で行います。

000-default.conf

これは、Apache 構成ファイルです。 HTTPS プロトコルの使用を許可し、HTTP 呼び出しを HTTPS にリダイレクトします。
証明書と秘密鍵ファイルはこのファイルにセットアップされます。

SSLCertificateFile /etc/apache2/certificate/apache_webgateway.cer
SSLCertificateKeyFile /etc/apache2/certificate/apache_webgateway.key

IRIS インスタンス

IRIS インスタンスでは、Web ゲートウェイとの SSL/TLS 通信を許可するための最小限の要件のみを以下の手順で構成します。

  1. %SuperServer SSL 構成。
  2. SSLSuperServer セキュリティ設定を有効にします。
  3. Web ゲートウェイサービスを使用できる IP のリストを制限します。

    構成を容易にするために、config-api は単純な JSON 構成ファイルと合わせて使用されます。

{
   "Security.SSLConfigs": {
       "%SuperServer": {
           "CAFile": "/usr/irissys/mgr/CA_Server.cer",
           "CertificateFile": "/usr/irissys/mgr/iris_server.cer",
           "Name": "%SuperServer",
           "PrivateKeyFile": "/usr/irissys/mgr/iris_server.key",
           "Type": "1",
           "VerifyPeer": 3
       }
   },
   "Security.System": {
       "SSLSuperServer":1
   },
   "Security.Services": {
       "%Service_WebGateway": {
           "ClientSystems": "172.16.238.50;127.0.0.1;172.16.238.20"
       }
   }
}

操作は必要ありません。 この構成はコンテナの起動時に自動的に読み込まれます。

tls-ssl-webgateway イメージ

dockerfile

ARG IMAGEWEBGTW=containers.intersystems.com/intersystems/webgateway:2021.1.0.215.0
FROM ${IMAGEWEBGTW}
ADD webgateway-config-files /webgateway-config-files
ADD buildWebGateway.sh /
ADD startUpScript.sh /
RUN chmod +x buildWebGateway.sh startUpScript.sh && /buildWebGateway.sh
ENTRYPOINT ["/startUpScript.sh"]

デフォルトのエントリポイントは /startWebGateway ですが、Web サーバーを起動する前にいくつかの操作を実行する必要があります。 CSP.ini ファイルはテンプレートであり、起動時にいくつかのパラメーター(IP、ポート、システムマネージャー)を変更する必要があることに注意してください。 これらの変更は startUpScript.sh によって行われ、その後で初期化エントリポイントのスクリプト /startWebGateway が実行されます。

コンテナの起動

docker-compose ファイル

コンテナを起動する前に、docker-compose.yml ファイルを変更する必要があります。

  • **SYSTEM_MANAGER**Web Gateway Managementhttps://localhost/csp/bin/Systems/Module.cxw へのアクセスが許可された IP で設定する必要があります。基本的に、あなたの IP アドレスです(カンマ区切りのリストである場合があります)。

  • **IRIS_WEBAPPS** は、あなたの CSP アプリケーションのリストで設定する必要があります。 リストはスペース区切りです(例: IRIS_WEBAPPS=/csp/sys /swagger-ui)。 デフォルトでは、/csp/sys のみが公開されます。

  • ポート 80 と 443 はマッピングされています。 これらのポートがすでに使用されている場合は、他のポートに調整します。
version: '3.6'
services:

 webgateway:
   image: tls-ssl-webgateway
   container_name: tls-ssl-webgateway
   networks:
     app_net:
       ipv4_address: 172.16.238.50
   ports:
     # change the local port already used on your system.
     - "80:80"
     - "443:443"
   environment:
     - IRIS_HOST=172.16.238.20
     - IRIS_PORT=1972
     # Replace by the list of ip address allowed to open the CSP system manager
     # https://localhost/csp/bin/Systems/Module.cxw 
     # see .env file to set environement variable.
     - "SYSTEM_MANAGER=${LOCAL_IP}"
     # the list of web apps
     # /csp allow to the webgateway to redirect all request starting by /csp to the iris instance
     # You can specify a list separate by a space : "IRIS_WEBAPPS=/csp /api /isc /swagger-ui"
     - "IRIS_WEBAPPS=/csp/sys"
   volumes:
     # Mount certificates files.
     - ./volume-apache/webgateway_client.cer:/opt/webgateway/bin/webgateway_client.cer
     - ./volume-apache/webgateway_client.key:/opt/webgateway/bin/webgateway_client.key
     - ./volume-apache/CA_Server.cer:/opt/webgateway/bin/CA_Server.cer
     - ./volume-apache/apache_webgateway.cer:/etc/apache2/certificate/apache_webgateway.cer
     - ./volume-apache/apache_webgateway.key:/etc/apache2/certificate/apache_webgateway.key
   hostname: webgateway
   command: ["--ssl"]

 iris:
   image: intersystemsdc/iris-community:latest
   container_name: tls-ssl-iris
   networks:
     app_net:
       ipv4_address: 172.16.238.20
   volumes:
     - ./iris-config-files:/opt/config-files
     # Mount certificates files.
     - ./volume-iris/CA_Server.cer:/usr/irissys/mgr/CA_Server.cer
     - ./volume-iris/iris_server.cer:/usr/irissys/mgr/iris_server.cer
     - ./volume-iris/iris_server.key:/usr/irissys/mgr/iris_server.key
   hostname: iris
   # Load the IRIS configuration file ./iris-config-files/iris-config.json
   command: ["-a","sh /opt/config-files/configureIris.sh"]

networks:
 app_net:
   ipam:
     driver: default
     config:
       - subnet: "172.16.238.0/24"

ビルドして起動します。


docker-compose up -d --build

コンテナ tls-ssl-iris と tls-ssl-webgateway が起動します。

Web アクセスのテスト

Apache のデフォルトページ

http://localhost ページを開きます。 自動的に https://localhost にリダイレクトされます。
ブラウザにセキュリティ警告が表示されます。 これは、自己署名証明書の場合の通常の動作です。リスクを受け入れて続行してください。

image

Web ゲートウェイ管理ページ

https://localhost/csp/bin/Systems/Module.cxw を開き、サーバー接続をテストします。 image

管理ポータル

https://localhost/csp/sys/utilhome.csp を開きます。

画像

上出来です! Web ゲートウェイの例が動作しています!

IRIS ミラーと Web ゲートウェイ

前回の記事では、ミラー環境を構築しましたが、Web ゲートウェイが不足していました。 今回は、それを改善できます。
Web ゲートウェイといくつかの改善が追加された新しい iris-miroring-with-webgateway リポジトリを利用できます。

  1. 証明書はオンザフライではなく、別のプロセスで生成されるようになっています。
  2. IP アドレスは、docker-compose と JSON 構成ファイルの環境変数に置き換えられています。 変数は '.env' ファイルで定義されています。
  3. リポジトリをテンプレートとして使用できます。

以下のように環境を実行するには、リポジトリ README.md ファイルをご覧ください。

image

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください