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

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

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

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

若要為 Db2 DB 執行個體啟用SSL/TLS加密,RDS請將 Db2 SSL 選項新增至與資料庫執行個體關聯的參數群組。Amazon 根據 Db2 的要求,RDS使用第二個連接埠進行SSL/TLS連線。這樣做可讓資料庫執行個體和 Db2 用戶端之間同時進行純文字和SSL加密通訊。例如,您可以使用具有純文本通信的端口與其他資源進行通信,VPC同時使用具有 SSL-encrypted 通信的端口與外部的資源進行通信。VPC

建立SSL/TLS連線

若要建立SSL/TLS連線,請選擇憑證授權單位 (CA),為所有人下載憑證服務包 AWS 區域,然後將參數新增至自訂參數群組。

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

選擇一個憑證授權單位 (CA),並為所有人下載憑證套裝軟體 AWS 區域。如需詳細資訊,請參閱使用 SSL/TLS 加密資料庫執行個體或叢集連線

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

重要

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

您無法修改 Db2 DB 執行個體的RDS預設參數群組。因此,您必須建立自訂參數群組、修改它,然後將其附加到您RDS的 Db2 DB 執行個體。如需參數群組的詳細資訊,請參閱 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 Amazon 數據庫參數組中的參數

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

Connect 至您的 Db2 資料庫伺服器

連接到 Db2 資料庫伺服器的指示是特定於語言的。

Java
若要使用連線至 Db2 資料庫伺服器 Java
  1. 下載JDBC驅動程式。如需詳細資訊,請參閱 Sup IBM port 文件中的DB2JDBC驅動程式版本與下載

  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. 若要執行 shell 指令碼,並將具有憑證服務包的PEM檔案匯入到中Java KeyStore,請執行下列命令。Replace (取代) shell_file_name.sh 使用您的 shell 腳本文件的名稱和 password 使用您的Java KeyStore.

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

    • 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
若要使用連線至 Db2 資料庫伺服器 Node.js
  1. 安裝node-ibm_db驅動程式。如需詳細資訊,請參閱說明文件中的在Linux和UNIX系統上安裝 node-ibm_db 驅動程式。IBM Db2

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

    • 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
若要使用連線至 Db2 資料庫伺服器 Python
  1. 創建具有以下內容的Python文件。將範例中的下列預留位置取代為適用RDS於 Db2 DB 執行個體的資訊。

    • 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文件。Replace (取代) 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 指令碼,請執行下列命令。Replace (取代) shell_file_name.sh 使用您的 shell 腳本文件的名稱。

    ./shell_file_name.sh global-bundle.pem