Open Liberty、あるいはWebSphere LibertyベースのPod(Javaアプリ搭載)からDb2 on IBM Cloud へのDBアクセスにて、SSLでのDB接続する部分の設定について記載します。
数々の記事を見ながらcloudやkubernetes環境の自習を進めていたのですが、ある時点からDb2 on CloudへのDB接続方法がLiteプランではSSL接続に限定されるようになったようで、この設定に若干時間を費やしてしまったので、設定方法をシェアします。
1. WebSphere Liberty ベースのPodの前提
1.ベースとなる WebSphere Liberty イメージをDocker Hub から取得します。
2.単純なDBアクセスするアプリ(warファイル)、server.xml、JDBCドライバーファイル、DBサーバーのSSL証明書ファイルを、取得したイメージに組み入れて、新たなイメージを作成します。
3.作成したイメージをIBM Cloud上のワーカーノードにデプロイします。
当記事は、上の2.の「関連ファイルの入手と設定」について記述し、イメージ作成やデプロイ方法はここでは割愛します。他の記事を参照ください。
2. DB接続情報の確認
接続情報(ホスト名、ポート番号、データベース名、ユーザーID、パスワード)とSSL証明書ファイルをweb consoleから取得しておきます。
1. IBM Cloudのダッシュボードの左上のメニューから「リソース・リスト」を選択
2.「Services」をクリックして開き、接続したいDb2の名前をクリック
4.表示されたサービス資格情報をクリックして、内容を表示する。
様々な形式でユーザーIDとパスワード情報が書いてありますが、
-uと-pの値や
usernameとpasswordの値が
接続時に使用するユーザーDとパスワードになります。
5.「管理」をクリックし「Go to UI」ボタンのクリックにより、Db2 Webコンソールを開く。
左上のメニューをクリックし、「管理」をクリックする。
「Linux」の手順を参照する。
「接続構成リソース」から以下の情報を取得する。
ホスト名
ポート番号
データベース名
3. SSL証明書の取得
同じページにある「SSL証明書のダウンロード」ボタンをクリックしてをSSL証明書をダウンロードする
4. JDBCドライバーの入手
Db2 にアクセスするための JDBC ドライバーです(db2jcc4.jar )。
同じページにある「Linuxドライバー・パッケージのダウンロード元」のリンクから、記載されているファイル名のドライバー・パッケージをダウンロードします。
ダウンロードの詳細な手順は割愛しますが、 IBM ID が必要になりますのでご留意ください。
このファイルを何度か展開し、中にある db2jcc4.jar ファイルを取得します。
5. server.xmlの編集
これは、WebSphere Liberty のメインの設定ファイルで、この中で各種設定を行っています。
今回はDBへのSSL接続に関連する部分のみ記述します。
<?xml version="1.0" encoding="UTF-8"?>
<server description="Default server">
<!-- Enable features -->
<featureManager>
<feature>jdbc-4.2</feature>
・・・略・・・
</featureManager>
<dataSource id="dataSource01" jndiName="jdbc/ds1">
<properties.db2.jcc
serverName="xxxxxxxxxxxxxxxxxx"
portNumber="31198"
databaseName="bludb"
user="xxxxxx"
password="xxxxxxxx"
sslConnection="true"
sslCertLocation="/config/ssl/xxxxxxxx.cer"
/>
<jdbcDriver libraryRef="DB2JCCLib"/>
</dataSource>
<library id="DB2JCCLib">
<fileset dir="/config/jdbc/" includes="db2jcc4.jar"/>
</library>
</server>
・feature
利用する機能を設定するところで、今回はjdbc-4.2を追加しています。
・dataSource
・jndiNameはアプリケーション側で指定したJNDI名を設定します
・serverName、portNumber、databaseName、user(ユーザー名)、passwordは先ほどDBの資格情報で確認したものを設定します。
・sslConnectionをtrueに、sslCertLocationでDBサーバーのSSL証明書の保管場所を示します。
SSL証明書を組み入れてDockerイメージを作成しますが、その時に指定するパスを設定します。
・JDBCドライバーも同様に、libraryのfilesetでDockerイメージを作成時に指定したパスを設定します。
*SSL証明書は、kdb作成等の設定が必要かと調査していましたが、ダウンロードした証明書(cerファイル)をそのまま指定して接続できました。
以上です。
参考にさせていただいた投稿
@shimauma_Zzzzzさん、ありがとうございます。
[IKS + Db2 on IBM Cloud で DBアクセスアプリを動かしてみた(1.概要)]
(https://qiita.com/shimauma_Zzzzz/items/9a513abdf02d11fff55b)
参考資料
[Open Liberty server.xmlでのData Source]
(https://www.openliberty.io/docs/21.0.0.6/reference/config/dataSource.html)
[Database connections with TLS]
(https://openliberty.io/blog/2021/06/04/database-ssl-primer.html)