Matillion ETLを安全に使いたい人へ送る、SSL対応の実践ガイド

こんにちは、エクスチュアの黒岩です。

最近、Matillion ETLをSSL化する必要があり進めていたのですが、アプリのバージョンによってやり方が異なる等、公式ドキュメントを細かく見ないとつまずくポイントがいくつかありました。
想像以上に苦戦したため、同じように困っている人が日本国内にもいるのではないか、参考にしてもらえるのではないかと思いブログ記事化することを決意しました📝

実行環境と使用したサービス

今回は、以下の環境で構築されたMatillion ETLに対してSSL化をしています。

  • クラウド:GCP
  • OS:CentOS 8
  • Matillion ETLのバージョン:1.77.7
  • ドメイン取得&DNS設定:XServer Domain
  • SSLサーバ証明書発行:Let’s Encrypt

そもそもHTTPS化の必要性は?

Matillionは、インストール直後の状態ではHTTP通信(ポート80)でアクセス可能な構成になっています。これは開発環境や社内ネットワークでの使用を想定した簡易的な構成であり、暗号化されていない通信が行われます。

それって危険なの?

はい。HTTP通信は以下のようなリスクを含んでいます:

  • パスワードやAPIキーなどの機密情報が平文で送信される
  • 第三者による盗聴・改ざんが可能
  • ブラウザから「保護されていない通信」と警告される

これを回避するために必要なのが、HTTPS化(SSLの導入)です。


Matillion は HTTPS に対応していない?

実は Matillion には、自己証明書(self-signed certificate)によるHTTPS通信機能が組み込まれています。

初回起動時に、内部的にTomcatが自己証明書を生成し、それを使ってポート443でHTTPS通信を提供しています。ですので、URLに https:// を指定すればブラウザからも接続は可能です。

ただし、この「自己証明書」には注意が必要です。


自己証明書ってなに?

自己証明書とは、信頼された認証局(CA)によって発行されたものではなく、自分で生成した証明書のことです。この証明書は以下のような特徴があります。

  • 暗号化はされているが、ブラウザにとっては「誰が発行したか分からない」状態
  • そのため「接続は安全ではありません」という警告が出る
  • 社内用途やテスト環境での一時的な利用には便利だが、本番環境では不適切

Let’s EncryptなどでのSSL導入が必要な理由

実運用においては、第三者が信頼する認証局(CA)から発行された証明書を導入することで、以下の効果が得られます。

  • ブラウザの警告が表示されない
  • ユーザーやAPIクライアントに安心感を与えられる
  • ゼロトラストセキュリティやコンプライアンス要件を満たせる

無料のSSL証明書を提供する Let’s Encrypt を使えば、自動化された手順で簡単にHTTPS化できます。

実行手順

※以下の公式Youtube動画が出ていますが、情報やバージョンが古いためこの方法ではうまくできませんでした
https://www.youtube.com/watch?v=4nL3-ZVzGmQ

1. XServer Domainでドメイン取得・DNS設定

①XServer Domainで会員登録後、ドメインを取得
※契約期間は1年に設定しましたが、デフォルトで自動更新設定がされているので注意が必要です。

②DNSレコード設定で、Aレコードに外部IPを指定

③取得したドメイン名でMatillionへアクセスできることを確認

2. Let’s Encryptを利用し、SSLサーバ証明書を取得

以下ドキュメントを参考
https://docs.matillion.com/metl/docs/setting-up-lets-encrypt-for-ssl-on-matillion-etl/#install-certbot-on-a-matillion-etl-virtual-machine

①インスタンスにssh接続し、以下コマンドを順番に実行

sudo yum install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo service tomcat stop

②SSLサーバー証明書を発行するためのコマンドを実行
ここではドキュメントに記載のコマンドではなく、マニュアル設定で発行するためのコマンドにしています。

sudo certbot certonly --manual --preferred-challenges dns -d [任意のドメイン名]

※このコマンドを実行すると、メールアドレスの入力や登録内容の確認が行われ、テキストレコードが表示されるためコピーしてください。ここでEnterを押してしまうと登録ができないので、必ずコピーしてそのままの状態でコマンドプロンプトは待機させてください。

3. TXTレコードの登録

①XServer DomainのDNSレコード設定から、以下画像のように新たにTXTレコードを追加し、「内容」に先ほどコピーしたテキストレコードをペーストして登録する

②登録完了後、以下のサイトで「_acme-challenge.ドメイン名」で検索し、先ほど登録したテキストレコードがネットワーク上でも正常に登録されていることを確認https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.ext-matillion-dev.com

③コマンドプロンプトに戻りEnterをクリックすると、”/etc/letsencrypt/live/[ドメイン名]”直下に以下の証明書が発行されていることを確認

  • README
  • cert.pem
  • chain.pem
  • fullchain.pem
  • privkey.pem

4. SSLサーバ証明書の格納

以下ドキュメントを参考
https://docs.matillion.com/metl/docs/7156283/#matillion-etl-version-169-and-later

①既存のMatillion証明書のバックアップを取得

cp -rp /etc/tomcat/localhost.crt /etc/tomcat/localhost.crt.bak
cp -rp /etc/tomcat/localhost.key /etc/tomcat/localhost.key.bak
cp -rp /etc/tomcat/server.xml /etc/tomcat/server.xml.bak

②発行した証明書を使用するように設定

cp /etc/letsencrypt/live/{ドメイン名}/privkey.pem /etc/tomcat/localhost.key
cp /etc/letsencrypt/live/{ドメイン名}/cert.pem /etc/tomcat/localhost.crt
cp /etc/letsencrypt/live/{ドメイン名}/chain.pem /etc/tomcat/localhost-chain.crt

③server.xmlの中身を下記のように編集

# 修正前
<Certificate certificateFile="${catalina.base}/conf/localhost.crt" certificateKeyFile="${catalina.base}/conf/localhost.key"/>

# 修正後
<Certificate certificateFile="${catalina.base}/conf/localhost.crt" certificateKeyFile="${catalina.base}/conf/localhost.key" certificateChainFile="${catalina.base}/conf/localhost-chain.crt" />

④所有者をrootユーザーからtomcatへ変更

chown tomcat:tomcat /etc/tomcat/localhost*
chown tomcat:tomcat /etc/tomcat/server.xml

⑤適切な権限を設定

chmod 775 /etc/tomcat/localhost*
chmod 775 /etc/tomcat/server.xml

5. Matillionの再起動

sudo systemctl restart tomcat

6. ブラウザでMatillionを起動し、SSL化されていることを確認

「この接続は保護されています」と表示されていればOK

SSL証明書の更新

Let’s Encryptで手動で証明書を格納しているため、90日毎に更新する必要があります。
こちらは以下の公式ドキュメント記載の手順で問題なく更新できそうですね。
https://docs.matillion.com/metl/docs/setting-up-lets-encrypt-for-ssl-on-matillion-etl/#renew-the-lets-encrypt-ssl-certificate

おわりに

今回はMatillion ETLをSSL化するための実践ガイドを書いていきました。
世の中には多くのETLツールが普及し、用途によって選ばれるものが限られますが、私個人的にはMatillion ETLが一番使い勝手がよく推しています!
そもそもMatillionってどんな良さがあるの?構築方法は?といった初期構築の部分からご支援可能ですので、お気軽にお問い合わせください👀

類似投稿