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 インスタンスにアタッチする必要があります。パラメータグループの詳細については、「DB インスタンスでの DB パラメータグループの使用」を参照してください。

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

パラメータ Value
DB2COMM TCPIP,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 パラメータグループの作成の詳細については、「DB パラメータグループを作成する」を参照してください。

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

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

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

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

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

  3. パラメータグループを RDS for Db2 DB インスタンスに関連付けます。詳細については、「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