使用 SSL/TLS 搭配 Amazon RDS for Db2 資料庫執行個體 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 SSL/TLS 搭配 Amazon RDS for Db2 資料庫執行個體

SSL 是一種產業標準通訊協定,可保護用戶端與伺服器之間的網路連線。SSL 3.0 版之後的名稱已變更為 TLS,但我們通常仍會將通訊協定稱為 SSL。Amazon RDS 可支援在 Amazon RDS for Db2 資料庫執行個體上啟用 SSL 加密。使用 SSL/TLS,您可以加密應用程式用戶端與 RDS for Db2 資料庫執行個體之間的連接。SSL/TLS 支援適用於所有的 AWS 區域 for RDS for Db2。

在與資料庫執行個體相關聯的參數群組中新增 Db2 SSL 選項,就能對 RDS for Db2 資料庫執行個體啟用 SSL/TLS 加密。Amazon RDS 會使用第二個連接埠 (依 Db2 要求) 作為 SSL/TLS 連線用途。如此可讓資料庫執行個體與 Db2 用戶端之間同時進行純文字和 Db2 加密的通訊。例如,您可以使用連接埠搭配純文字通訊與 VPC 內的其他資源通訊,同時使用連接埠搭配 SSL 加密的通訊與 VPC 外部的資源通訊。

建立 SSL/TLS 連線

若要建立 SSL/TLS 連線,請選擇憑證認證機構 (CA)、下載所有 AWS 區域 的憑證套件,並將參數新增至自訂參數群組。

步驟 1:選擇 CA 並下載憑證

選擇憑證認證機構 (CA),並下載所有 AWS 區域 的憑證套件。如需更多詳細資訊,請參閱 使用 SSL/TLS 來加密資料庫執行個體或叢集的連線

步驟 2:更新自訂參數群組中的參數

重要

如果您使用 RDS for Db2 的自帶授權 (BYOL) 模型,請修改您為 IBM Customer ID 和 IBM Site ID 建立的自訂參數群組。如果您使用不同的 RDS for Db2 授權模型,則請依照程序將參數新增至自訂參數群組。如需更多詳細資訊,請參閱 Amazon RDS for Db2 授權選項

您無法修改 RDS for Db2 資料庫執行個體的預設參數群組。因此,您必須建立自訂參數群組、加以修改,然後將其連接至 RDS for Db2 資料庫執行個體。如需參數群組的詳細資訊,請參閱 Amazon RDS 資料庫執行個體的資料庫參數群組

使用下表中的參數設定。

參數 Value
DB2COMM TCPIP,SSLSSL
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 – 此參數群組的描述。

    如需建立資料庫參數群組的詳細資訊,請參閱在 Amazon RDS 中建立資料庫參數群組

  2. 修改您透過執行 modify-db-parameter-group 命令所建立的自訂參數群組中的參數。

    包含下列必要選項:

    • --db-parameter-group-name – 您所建立的參數群組之名稱。

    • --parameters – 參數名稱、值,以及參數更新套用方法的陣列。

    如需修改參數群組的相關詳細資訊,請參閱 修改 Amazon RDS 中的資料庫參數群組中的參數

  3. 將參數群組與您的 RDS for Db2 資料庫執行個體建立關聯。如需更多詳細資訊,請參閱 將資料庫參數群組與 Amazon RDS 中的資料庫執行個體建立關聯

連線至 Db2 資料庫伺服器

連線至 Db2 資料庫伺服器的指示為特定語言。

Java
使用 Java 連線至 Db2 資料庫伺服器
  1. 下載 JDBC 驅動程式。如需詳細資訊,請參閱 IBM 支援文件中的 DB2 JDBC 驅動程式版本和下載

  2. 建立包含下列內容的 Shell 指令碼檔案。此指令碼會將套件中的所有憑證新增至 Java KeyStore。

    重要

    確認 keytool 存在於指令碼中的路徑上,以便指令碼可以找到它。如果您使用 Db2 用戶端,則可以在 ~sqlib/java/jdk64/jre/bin 下找到 keytool

    #!/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. 若要執行 shell 指令碼,並使用憑證套件將 PEM 檔案匯入 Java KeyStore,請執行下列命令。將 shell_file_name.sh 取代為 shell 指令碼檔案的名稱,並將 password 取代為您 Java KeyStore 的密碼。

    ./shell_file_name.sh global-bundle.pem password truststore.jks
  4. 若要連線至 Db2 伺服器,請執行下列命令。將範例中的下列預留位置取代為您的 RDS for Db2 資料庫執行個體資訊。

    • ip_address – 資料庫執行個體端點的 IP 位址。

    • port – SSL 連線的連接埠號碼。這可以是任何連接埠號碼,但用於非 SSL 連接埠的號碼除外。

    • database_name – 資料庫執行個體中資料庫的名稱。

    • master_username – 資料庫執行個體的主要使用者名稱。

    • master_password – 資料庫執行個體的主要密碼。

    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 文件中的在 Linux 和 UNIX 系統上安裝 node-ibm_db 驅動程式

  2. 根據下列內容建立 JavaScript 檔案。將範例中的下列預留位置取代為您的 RDS for Db2 資料庫執行個體資訊。

    • ip_address – 資料庫執行個體端點的 IP 位址。

    • master_username – 資料庫執行個體的主要使用者名稱。

    • master_password – 資料庫執行個體的主要密碼。

    • database_name – 資料庫執行個體中資料庫的名稱。

    • 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 資料庫執行個體資訊。

    • port – SSL 連線的連接埠號碼。這可以是任何連接埠號碼,但用於非 SSL 連接埠的號碼除外。

    • master_username – 資料庫執行個體的主要使用者名稱。

    • master_password – 資料庫執行個體的主要密碼。

    • database_name – 資料庫執行個體中資料庫的名稱。

    • ip_address – 資料庫執行個體端點的 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. 建立下列 shell 指令碼,以執行您建立的 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 指令碼,請執行下列命令。將 shell_file_name.sh 取代為您 shell 指令碼檔案的名稱。

    ./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 Support 中的下載初始版本 11.5 用戶端和驅動程式下載。

  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