Uso de SSL con una instancia de base de datos de Amazon RDS para Db2 - Amazon Relational Database Service

Uso de SSL con una instancia de base de datos de Amazon RDS para Db2

SSL es un protocolo estándar del sector que se utiliza para proteger las conexiones de red entre el cliente y el servidor. Después de la versión 3.0 de SSL, el nombre se cambió a TLS, pero a menudo nos referimos al protocolo como SSL. Amazon RDS admite el cifrado SSL para las instancias de bases de datos de Amazon RDS para Db2. Con SSL/TLS puede cifrar una conexión entre el cliente de la aplicación y la instancia de base de datos de RDS para Db2. La compatibilidad con SSL/TLS está disponible en todas las Regiones de AWS para RDS para Db2.

A fin de habilitar el cifrado SSL/TLS para una instancia de base de datos de RDS para Db2, agregue la opción Db2 SSL al grupo de parámetros asociado a la instancia de base de datos. Amazon RDS utiliza un segundo puerto, según lo requiera Db2, para las conexiones SSL/TLS. Esto permite que se produzca la comunicación cifrada de SSL y de texto sin cifrar al mismo tiempo entre una instancia de base de datos y un cliente Db2. Por ejemplo, es posible utilizar el puerto con la comunicación de texto sin cifrar para ponerse en contacto con otros recursos dentro de una VPC mientras se utiliza el puerto con comunicación cifrada SSL para ponerse en contacto con recursos situados fuera de la VPC.

Crear una conexión SSL/TLS

Para crear una conexión SSL/TLS, elija una autoridad de certificación (CA), descargue un paquete de certificados para todas las Regiones de AWS y agregue parámetros a un grupo de parámetros personalizado.

Paso 1: elegir una CA y descargar un certificado

Elija una autoridad de certificación (CA) y descargue un paquete de certificados para todas las Regiones de AWS. Para obtener más información, consulte Uso de SSL/TLS para cifrar una conexión a una instancia o clúster de base de datos.

Paso 2: actualizar los parámetros de un grupo de parámetros personalizado

importante

Si utiliza el modelo traiga su propia licencia (BYOL) para RDS para Db2, modifique el grupo de parámetros personalizado que creó para su IBM Customer ID y su IBM Site ID. Si utiliza un modelo de licencia diferente para RDS para Db2, siga el procedimiento para agregar parámetros a un grupo de parámetros personalizado. Para obtener más información, consulte Opciones de licencias de Amazon RDS para Db2.

No puede modificar los grupos de parámetros predeterminados de las instancias de base de datos de RDS para Db2. Por lo tanto, debe crear un grupo de parámetros personalizado, modificarlo y asociarlo a las instancias de base de datos de RDS para Db2. Para obtener información acerca de los grupos de parámetros, consulte Trabajo con los grupos de parámetros en una instancia de base de datos.

Utilice la configuración de parámetros en la tabla siguiente.

Parámetro Valor
DB2COMM TCPIP,SSL
SSL_SVCENAME <any port number except the number used for the non-SSL port>
Para actualizar los parámetros de un grupo de parámetros personalizado
  1. Cree un grupo de parámetros personalizado ejecutando el comando create-db-parameter-group.

    Incluya las siguientes opciones obligatorias:

    • --db-parameter-group-name: un nombre para el grupo de parámetros que se está creando.

    • --db-parameter-group-family: la edición y la versión principal del motor de Db2. Valores válidos: db2-se-11-5, db2-ae-11.5.

    • --description: la descripción para este grupo de parámetros.

    Para obtener más información acerca de cómo crear un grupo de parámetros de base de datos, consulte Creación de un grupo de parámetros de base de datos.

  2. Modifique los parámetros del grupo de parámetros personalizado que creó ejecutando el comando modify-db-parameter-group.

    Incluya las siguientes opciones obligatorias:

    • --db-parameter-group-name: el nombre del grupo de parámetros creado.

    • --parameters: una matriz de los nombres de parámetros, valores y métodos de aplicación para la actualización del parámetro.

    Para obtener más información acerca de cómo modificar un grupo de parámetros, consulte Modificación de parámetros de un grupo de parámetros de base de datos.

  3. Asocie el grupo de parámetros a la instancia de base de datos de RDS para Db2. Para obtener más información, consulte Asociación de un grupo de parámetros de base de datos con una instancia de base de datos.

Conexión a su servidor de bases de datos Db2

Las instrucciones para conectarse al servidor de bases de datos Db2 son específicas del lenguaje.

Java
Para conectarse a su servidor de bases de datos Db2 mediante Java
  1. Descargue el controlador JDBC. Para obtener más información, consulte DB2 JDBC Driver Versions and Downloads en el servicio de asistencia de IBM.

  2. Cree un archivo de script de shell con el siguiente contenido. Este script agrega todos los certificados del paquete a un Java KeyStore.

    importante

    Compruebe que keytool exista en la ruta del script para que el script pueda localizarlo. Si utiliza un cliente de Db2, puede localizar el keytool en ~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. Para ejecutar el script de shell e importar el archivo PEM con el paquete de certificados en un Java KeyStore, ejecute el siguiente comando. Sustituya shell_file_name.sh por el nombre del archivo de script de shell y password por la contraseña de su Java KeyStore.

    ./shell_file_name.sh global-bundle.pem password truststore.jks
  4. Para comprobar la conexión a su servidor Db2, ejecute el siguiente comando. Sustituya los siguientes marcadores de posición del ejemplo por la información de la instancia de base de datos de RDS para Db2.

    • ip_address: la dirección IP del punto de conexión de la instancia de base de datos.

    • port: número de puerto de la conexión SSL. Puede ser cualquier número de puerto, excepto el número que se utiliza para el puerto que no es SSL.

    • database_name: el nombre de la base de datos en su instancia de base de datos.

    • master_username: el nombre de usuario maestro para la instancia de base de datos.

    • master_password: la contraseña maestra de la instancia de base de datos.

    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
Para conectarse a su servidor de bases de datos Db2 mediante Node.js
  1. Instale el controlador node-ibm_db. Para obtener más información, consulte Installing the node-ibm_db driver on Linux and UNIX systems en la documentación de IBM Db2.

  2. Cree un archivo JavaScript basado en el siguiente contenido. Sustituya los siguientes marcadores de posición del ejemplo por la información de la instancia de base de datos de RDS para Db2.

    • ip_address: la dirección IP del punto de conexión de la instancia de base de datos.

    • master_username: el nombre de usuario maestro para la instancia de base de datos.

    • master_password: la contraseña maestra de la instancia de base de datos.

    • database_name: el nombre de la base de datos en su instancia de base de datos.

    • port: número de puerto de la conexión SSL. Puede ser cualquier número de puerto, excepto el número que se utiliza para el puerto que no es 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. Para ejecutar el archivo JavaScript ejecute el siguiente comando:

    node ssl-test.js
Python
Para conectarse a su servidor de bases de datos Db2 mediante Python
  1. Cree un archivo Python con el siguiente contenido. Sustituya los siguientes marcadores de posición del ejemplo por la información de la instancia de base de datos de RDS para Db2.

    • port: número de puerto de la conexión SSL. Puede ser cualquier número de puerto, excepto el número que se utiliza para el puerto que no es SSL.

    • master_username: el nombre de usuario maestro para la instancia de base de datos.

    • master_password: la contraseña maestra de la instancia de base de datos.

    • database_name: el nombre de la base de datos en su instancia de base de datos.

    • ip_address: la dirección IP del punto de conexión de la instancia de base de datos.

    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. Cree el siguiente script de shell, que ejecuta el archivo Python que ha creado. Reemplace python_file_name.py por el nombre de su archivo de script 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. Para importar el archivo PEM con el paquete de certificados y ejecutar el script de shell, ejecute el siguiente comando. Sustituya shell_file_name.sh por el nombre de su archivo de script de shell.

    ./shell_file_name.sh global-bundle.pem