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> |
Db2 데이터베이스 서버에 연결
Db2 데이터베이스 서버 연결 지침은 언어별로 다릅니다.
- Java
-
Java를 사용하여 Db2 데이터베이스 서버에 연결하려면
-
JDBC 드라이버를 다운로드합니다. 자세한 내용은 IBM 지원 설명서의 DB2 JDBC 드라이버 버전 및 다운로드를 참조하세요.
-
다음 콘텐츠로 쉘 스크립트 파일을 만듭니다. 이 스크립트는 번들의 모든 인증서를 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
-
쉘 스크립트를 실행하고 인증서 번들이 포함된 PEM 파일을 Java KeyStore로 가져오려면 다음 명령을 실행합니다. shell_file_name.sh
를 쉘 스크립트 파일의 이름으로, 암호
를 Java KeyStore의 암호로 변경합니다.
./shell_file_name.sh
global-bundle.pem password
truststore.jks
-
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 데이터베이스 서버에 연결하려면
-
node-ibm_db 드라이버를 설치합니다. 자세한 내용은 IBM Db2 설명서의 Linux 및 UNIX 시스템에 node-ibm_db 드라이버 설치를 참조하세요.
-
다음 콘텐츠를 바탕으로 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');
});
});
-
JavaScript 파일을 실행하려면 다음 명령을 실행합니다.
node ssl-test.js
- Python
-
Python를 사용하여 Db2 데이터베이스 서버에 연결하려면
-
다음 콘텐츠가 포함된 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()
-
생성한 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
-
인증서 번들과 함께 PEM 파일을 가져오고 쉘 스크립트를 실행하려면 다음 명령을 실행합니다. shell_file_name.sh
를 쉘 스크립트 파일 이름으로 변경합니다.
./shell_file_name.sh
global-bundle.pem