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 옵션을 추가합니다. Amazon RDS는 Db2에서 요구하는 대로 SSL/TLS 연결을 위해 두 번째 포트를 사용합니다. 이로 인해 DB 인스턴스와 Db2 클라이언트 간에 클리어 텍스트 통신과 SSL로 암호화된 통신이 동시에 발생할 수 있습니다. 예를 들어 이 포트를 클리어 텍스트 통신에 사용하여 VPC 내의 다른 리소스와 통신하면서 동일한 포트를 SSL로 암호화된 통신에 사용하여 VPC 외부의 리소스와 통신할 수 있습니다.

SSL/TLS 연결 생성하기

SSL/TLS 연결을 만들려면 인증 기관(CA)을 선택하고 모든 AWS 리전에 대한 인증서 번들을 다운로드한 다음 사용자 지정 파라미터 그룹에 파라미터를 추가합니다.

1단계: CA 선택 및 인증서 다운로드

인증 기관(CA)을 선택하고 모든 AWS 리전에 대한 인증서 번들을 다운로드합니다. 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화 단원을 참조하십시오.

2단계: 사용자 지정 파라미터 그룹의 파라미터 업데이트

중요

RDS for Db2용 기존 보유 라이선스 사용(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-5, db2-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 드라이버 버전 및 다운로드를 참조하세요.

  2. 다음 콘텐츠로 쉘 스크립트 파일을 만듭니다. 이 스크립트는 번들의 모든 인증서를 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. 쉘 스크립트를 실행하고 인증서 번들이 포함된 PEM 파일을 Java KeyStore로 가져오려면 다음 명령을 실행합니다. shell_file_name.sh를 쉘 스크립트 파일의 이름으로, 암호를 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 설명서의 Linux 및 UNIX 시스템에 node-ibm_db 드라이버 설치를 참조하세요.

  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