Amazon RDS for Db2 DB インスタンスでの SSL/TLS の使用 - Amazon Relational Database Service

Amazon RDS for Db2 DB インスタンスでの SSL/TLS の使用

SSL は、クライアントとサーバー間のネットワーク接続を安全に保つための業界標準のプロトコルです。SSL バージョン 3.0 以降は、名前が TLS と変更されていますが、いまだに SSL と呼称されることもよくあります。Amazon RDS は、Amazon RDS for Db2 DB インスタンス向けに SSL での暗号化をサポートしています。SSL/TLS を使用して、アプリケーションクライアントと RDS for Db2 DB インスタンス間の接続を暗号化できます。SSL/TLS サポートは、RDS for Db2 のすべての AWS リージョン で提供されています。

RDS for Db2 DB インスタンスの SSL/TLS 暗号化を有効するには、その DB インスタンスに関連付けられているパラメータグループに、Db2 SSL オプションを追加します。Db2 からの要求があるため、Amazon RDS では SSL/TLS 接続のために 2 番目のポートを使用しています。こうすることで、クリアテキストと SSL 暗号化の両方の通信を、DB インスタンスと Db2 クライアント間で同時に実行できます。例えば、このポートで SSL 暗号化通信を使用して VPC 外部のリソースと通信する一方で、このポートでクリアテキスト通信を使用して VPC 内の他のリソースと通信できます。

SSL/TLS 接続の作成

SSL/TLS 接続を作成するには、認証機関 (CA) を選択し、すべての AWS リージョンの証明書バンドルをダウンロードして、カスタムパラメータグループにパラメータを追加します。

ステップ 1: CA を選択して証明書をダウンロードする

認証機関 (CA) を選択し、すべての AWS リージョンの証明書バンドルをダウンロードします。詳細については、「SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化」を参照してください。

ステップ 2: カスタムパラメータグループのパラメータを更新する

重要

RDS for Db2 に Bring-Your-Own-License (BYOL) モデルを使用している場合は、IBM Customer ID と IBM Site ID 用に作成したカスタムパラメータグループを変更します。RDS for Db2 に別のライセンスモデルを使用している場合は、手順に従ってカスタムパラメータグループにパラメータを追加します。詳細については、「Amazon RDS for Db2 のライセンスオプション」を参照してください。

RDS for Db2 DB インスタンスのデフォルトのパラメータグループを変更することはできません。したがって、カスタムパラメータグループを作成して変更し、それを RDS for Db2 DB インスタンスにアタッチする必要があります。パラメータグループの詳細については、「Amazon RDS DB インスタンスの DB パラメータグループ」を参照してください。

次の表のパラメータ設定を使用します。

パラメータ
DB2COMM TCPIP,SSL、または SSL
SSL_SVCENAME <any port number except the number used for the non-SSL port>
カスタムパラメータグループのパラメータを更新するには
  1. create-db-parameter-group コマンドを実行して、カスタムパラメータグループを作成します。

    次の必須パラメータを含めます。

    • --db-parameter-group-name - 作成するパラメータグループの名前。

    • --db-parameter-group-family - Db2 エンジンエディションとメジャーバージョン。有効な値: db2-se-11-5db2-ae-11.5

    • --description - このパラメータグループの説明。

    DB パラメータグループの作成の詳細については、「Amazon RDS での DB パラメータグループの作成」を参照してください。

  2. modify-db-parameter-group コマンドを実行して、作成したカスタムパラメータグループのパラメータを変更します。

    次の必須パラメータを含めます。

    • --db-parameter-group-name – 作成したパラメータグループの名前。

    • --parameters – パラメータ名、値、およびパラメータ更新用のアプリケーションメソッドの配列。

    パラメータグループの変更の詳細については、「Amazon RDS の DB パラメータグループのパラメータの変更」を参照してください。

  3. パラメータグループを RDS for Db2 DB インスタンスに関連付けます。詳細については、「Amazon RDS で DB パラメータグループを DB インスタンスに関連付ける」を参照してください。

Db2 データベースサーバーに接続する

Db2 データベースサーバーへの接続手順は言語によって異なります。

Java
Java を使用して Db2 データベースサーバーに接続するには
  1. JDBC ドライバーをダウンロードします。詳細については、IBM サポートドキュメントの「DB2 JDBC Driver Versions and Downloads」を参照してください。

  2. 以下のコンテンツを使用して、シェルスクリプトファイルを作成します。このスクリプトによりは、バンドルのすべての証明書が Java KeyStore に追加されます。

    重要

    スクリプトが keytool を見つけることができるように、スクリプトのパス上に存在することを確認します。Db2 クライアントを使用する場合、 keytool~sqlib/java/jdk64/jre/bin にあります。

    #!/bin/bash PEM_FILE=$1 PASSWORD=$2 KEYSTORE=$3 # number of certs in the PEM file CERTS=$(grep 'END CERTIFICATE' $PEM_FILE| wc -l) for N in $(seq 0 $(($CERTS - 1))); do ALIAS="${PEM_FILE%.*}-$N" cat $PEM_FILE | awk "n==$N { print }; /END CERTIFICATE/ { n++ }" | keytool -noprompt -import -trustcacerts -alias $ALIAS -keystore $KEYSTORE -storepass $PASSWORD done
  3. シェルスクリプトを実行し、証明書バンドルを含む PEM ファイルを Java KeyStore にインポートするには、次のコマンドを実行します。shell_file_name.sh をシェルスクリプトファイルの名前に置き換え、password を Java KeyStore のパスワードに置き換えます。

    ./shell_file_name.sh global-bundle.pem password truststore.jks
  4. Db2 サーバーに接続するには、次のコマンドを実行します。例の次のプレースホルダーを RDS for Db2 DB インスタンス情報に置き換えます。

    • ip_address – DB インスタンスエンドポイントの IP アドレス。

    • port – SSL 接続のポート番号。これは、SSL 以外のポートに使用される番号を除く任意のポート番号にすることができます。

    • database_name – DB インスタンス内のデータベースの名前。

    • master_username – DB インスタンスのマスターユーザー名。

    • master_password – DB インスタンスのマスターパスワード。

    export trustStorePassword=MyPassword java -cp ~/dsdriver/jdbc_sqlj_driver/linuxamd64/db2jcc4.jar \ com.ibm.db2.jcc.DB2Jcc -url \ "jdbc:db2://ip_address:port/database_name:\ sslConnection=true;sslTrustStoreLocation=\ ~/truststore.jks;\ sslTrustStorePassword=${trustStorePassword};\ sslVersion=TLSv1.2;\ encryptionAlgorithm=2;\ securityMechanism=7;" \ -user master_username -password master_password
Node.js
Node.js を使用して Db2 データベースサーバーに接続するには
  1. node-ibm_db ドライバーをインストールします。詳細については、 IBM Db2 ドキュメントの「Installing the node-ibm_db driver on Linux and UNIX systems」を参照してください。

  2. 次の内容に基づいて JavaScript ファイルを作成します。例の次のプレースホルダーを RDS for Db2 DB インスタンス情報に置き換えます。

    • ip_address – DB インスタンスエンドポイントの IP アドレス。

    • master_username – DB インスタンスのマスターユーザー名。

    • master_password – DB インスタンスのマスターパスワード。

    • database_name – DB インスタンス内のデータベースの名前。

    • port – SSL 接続のポート番号。これは、SSL 以外のポートに使用される番号を除く任意のポート番号にすることができます。

    var ibmdb = require("ibm_db"); const hostname = "ip_address"; const username = "master_username"; const password = "master_password"; const database = "database_name"; const port = "port"; const certPath = "/root/qa-bundle.pem"; ibmdb.open("DRIVER={DB2};DATABASE=" + database + ";HOSTNAME=" + hostname + ";UID=" + username + ";PWD=" + password + ";PORT=" + port + ";PROTOCOL=TCPIP;SECURITY=SSL;SSLServerCertificate=" + certPath + ";", function (err, conn){ if (err) return console.log(err); conn.close(function () { console.log('done'); }); });
  3. JavaScript ファイルを実行するには、次のコマンドを実行します。

    node ssl-test.js
Python
Python を使用して Db2 データベースサーバーに接続するには
  1. 以下のコンテンツを含む Python ファイルを作成します。例の次のプレースホルダーを RDS for Db2 DB インスタンス情報に置き換えます。

    • port – SSL 接続のポート番号。これは、SSL 以外のポートに使用される番号を除く任意のポート番号にすることができます。

    • master_username – DB インスタンスのマスターユーザー名。

    • master_password – DB インスタンスのマスターパスワード。

    • database_name – DB インスタンス内のデータベースの名前。

    • ip_address – DB インスタンスエンドポイントの IP アドレス。

    import click import ibm_db import sys port = port; master_user_id = "master_username" # Master id used to create your DB instance master_password = "master_password" # Master password used to create your DB instance db_name = "database_name" # If not given "db-name' vpc_customer_private_ip = "ip_address" # Hosts end points - Customer private IP Addressicert_path = "/root/ssl/global-bundle.pem" # cert path @click.command() @click.option("--path", help="certificate path") def db2_connect(path): try: conn = ibm_db.connect(f"DATABASE={db_name};HOSTNAME={vpc_customer_private_ip};PORT={port}; PROTOCOL=TCPIP;UID={master_user_id};PWD={master_password};SECURITY=ssl;SSLServerCertificate={path};", "", "") try: ibm_db.exec_immediate(conn, 'create table tablename (a int);') print("Query executed successfully") except Exception as e: print(e) finally: ibm_db.close(conn) sys.exit(1) except Exception as ex: print("Trying to connect...") if __name__ == "__main__": db2_connect()
  2. 作成した Python ファイルを実行する次のシェルスクリプトを作成します。python_file_name.py を Python スクリプトファイルの名前に置き換えます。

    #!/bin/bash PEM_FILE=$1 # number of certs in the PEM file CERTS=$(grep 'END CERTIFICATE' $PEM_FILE| wc -l) for N in $(seq 0 $(($CERTS - 1))); do ALIAS="${PEM_FILE%.*}-$N" cert=`cat $PEM_FILE | awk "n==$N { print }; /END CERTIFICATE/ { n++ }"` cat $PEM_FILE | awk "n==$N { print }; /END CERTIFICATE/ { n++ }" > $ALIAS.pem python3 <python_file_name.py> --path $ALIAS.pem output=`echo $?` if [ $output == 1 ]; then break fi done
  3. 証明書バンドルを含む PEM をインポートし、シェルスクリプトを実行するには、次のコマンドを実行します。shell_file_name.sh をシェルスクリプトファイルの名前に置き換えます。

    ./shell_file_name.sh global-bundle.pem
Db2 CLP
Db2 CLP を使用して Db2 データベースサーバーに接続するには
  1. Db2 CLP を使用して Db2 インスタンスに接続するには、IBM Fix Central からダウンロードできる GSKit が必要です。Db2 CLP を使用するには、IBM Db2 クライアントも必要です。このクライアントは、IBM サポートの「Download initial Version 11.5 clients and drivers」からダウンロードできます。

  2. キーストアを作成します。

    gsk8capicmd_64 -keydb -create -db "directory/keystore-filename" -pw "changeThisPassword" -type pkcs12 -stash
  3. 証明書のバンドルをキーストアにインポートします。

    gsk8capicmd_64 -cert -import -file global-bundle.pem -target directory/keystore-filename> -target_stashed
  4. Db2 インスタンス設定を更新します。

    db2 update dbm cfg using SSL_CLNT_KEYDB keystore-filename SSL_CLNT_STASH keystore stash file immediate
  5. ノードとデータベースをカタログ化します。

    db2 catalog tcpip node ssluse1 REMOTE endpoint SERVER ssl_svcename security ssl db2 catalog database testdb as ssltest at node ssluse1
  6. データベースに接続します。

    db2 connect to ssltest user username using password