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

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

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

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

若要啟用 RDS for Db2 資料庫執行個體的 SSL/TLS 加密,請將 Db2 SSL 選項新增至與資料庫執行個體相關聯的參數群組。Amazon RDS 會根據 Db2 的要求,使用第二個連接埠進行 SSL/TLS 連線。這樣做可讓純文字和 SSL 加密通訊同時發生在資料庫執行個體和 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 資料庫執行個體。如需參數群組的詳細資訊,請參閱 RDSAmazon資料庫執行個體的資料庫參數群

使用下表中的參數設定。

參數 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 Amazon 中創建數據庫參數組

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

    包含下列必要選項:

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

    • --parameters – 參數更新的參數名稱、值和應用程式方法陣列。

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

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

連線至您的 Db2 資料庫伺服器

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

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

  2. 使用下列內容建立 shell 指令碼檔案。此指令碼會將套件中的所有憑證新增至 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. 若要執行 shell 指令碼,並使用憑證套件將PEM檔案匯入 Java KeyStore,請執行下列命令。將 shell_file_name.sh 取代為 shell 指令碼檔案的名稱,並將密碼取代為 的密碼Java KeyStore。

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

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

    • 連接埠 – 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
使用 連線至 Db2 資料庫伺服器 Node.js
  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 – 資料庫執行個體中的資料庫名稱。

    • 連接埠 – 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
使用 連線至 Db2 資料庫伺服器 Python
  1. 建立具有下列內容Python的檔案。將範例中的下列預留位置取代為您的 RDS for Db2 資料庫執行個體資訊。

    • 連接埠 – 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 資料庫伺服器 Db2 CLP
  1. 若要使用 連線至 Db2 執行個體Db2 CLP,您需要可在 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