Usar SSL/TLS com uma instância de banco de dados do Amazon RDS para Db2 - Amazon Relational Database Service

Usar SSL/TLS com uma instância de banco de dados do Amazon RDS para Db2

O SSL é um protocolo padrão do setor para proteger as conexões de rede entre o cliente e o servidor. Após o SSL versão 3.0, o nome mudou para TLS, mas ainda costuma ser chamado de SSL. O Amazon RDS é compatível com criptografia SSL para instâncias de banco de dados do Amazon RDS para Db2. Usando o SSL/TLS, é possível criptografar uma conexão entre o cliente de aplicação e a instância de banco de dados do RDS para Db2. A compatibilidade com SSL/TLS está disponível em todas as Regiões da AWS para RDS para Db2.

Para habilitar a criptografia SSL/TLS para uma instância de banco de dados do RDS para Db2, adicione a opção Db2 SSL ao grupo de parâmetros associado à instância de banco de dados. O Amazon RDS usa uma segunda porta, conforme exigido pelo Db2, para conexões SSL/TLS. Isso permite que comunicações de texto sem formatação e de texto com criptografia SSL ocorram ao mesmo tempo entre uma instância de banco de dados e um cliente Db2. Por exemplo, você pode usar a porta com comunicação de texto simples para se comunicar com outros recursos dentro de uma VPC enquanto usa a porta com comunicação criptografada em SSL para se comunicar com recursos fora da VPC.

Criar uma conexão SSL/TLS

Para criar uma conexão SSL/TLS, selecione uma autoridade de certificação (CA), baixe um pacote de certificados para todas as Regiões da AWS e adicione parâmetros a um grupo de parâmetros personalizado.

Etapa 1: Selecionar uma CA e baixar um certificado

Selecione uma autoridade de certificação (CA) e baixe um pacote de certificados para todas as Regiões da AWS. Para ter mais informações, consulte Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados.

Etapa 2: Atualizar os parâmetros em um grupo de parâmetros personalizado

Importante

Se você estiver usando o modelo traga a sua própria licença (BYOL) para RDS para Db2, modifique o grupo de parâmetros personalizado criado para o IBM Customer ID e o IBM Site ID. Se você estiver usando um modelo de licenciamento diferente para o RDS para Db2, siga o procedimento para adicionar parâmetros a um grupo de parâmetros personalizado. Para ter mais informações, consulte Opções de licenciamento do Amazon RDS para Db2.

Não é possível modificar grupos de parâmetros padrão para instâncias de banco de dados do RDS para Db2. Portanto, é necessário criar um grupo de parâmetros personalizado, modificá-lo e associá-lo às instâncias de banco de dados do RDS para Db2. Para obter informações sobre grupos de parâmetros, consulte Como trabalhar com grupos de parâmetros de banco de dados em uma instância de banco de dados.

Use as configurações de parâmetros na tabela a seguir.

Parâmetro Valor
DB2COMM TCPIP,SSL
SSL_SVCENAME <any port number except the number used for the non-SSL port>
Como atualizar os parâmetros em um grupo de parâmetros personalizado
  1. Crie um grupo de parâmetros personalizado executando o comando create-db-parameter-group.

    Inclua as seguintes opções necessárias:

    • --db-parameter-group-name: um nome para o grupo de parâmetros que você está criando.

    • --db-parameter-group-family: a edição do mecanismo do Db2 e a versão principal. Valores válidos: db2-se-11-5, db2-ae-11.5.

    • --description: a descrição desse grupo de parâmetros.

    Para obter mais informações sobre como criar um parameter group de banco de dados, consulte Criar um grupo de parâmetros de banco de dados.

  2. Modifique os parâmetros no grupo de parâmetros personalizado que você criou executando o comando modify-db-parameter-group.

    Inclua as seguintes opções necessárias:

    • --db-parameter-group-name: o nome do grupo de parâmetros criado.

    • --parameters: uma matriz de nomes de parâmetros, valores e os métodos de aplicação da atualização de parâmetros.

    Para ter mais informações sobre como modificar um grupo de parâmetros, consulte Modificar parâmetros em um grupo de parâmetros de banco de dados.

  3. Associe o grupo de parâmetros à sua instância de banco de dados do RDS para Db2. Para ter mais informações, consulte Associando um grupo de parâmetros de banco de dados a uma instância de banco de dados.

Conectar-se ao servidor de banco de dados do Db2

As instruções para se conectar ao servidor de banco de dados do Db2 são específicas do idioma.

Java
Como se conectar ao servidor de banco de dados do Db2 usando Java
  1. Baixe o driver JDBC. Para ter mais informações, consulte DB2 JDBC Driver Versions and Downloads na documentação do IBM Support.

  2. Crie um arquivo de script de shell com o conteúdo a seguir. Esse script adiciona todos os certificados do pacote a um Java KeyStore.

    Importante

    Verifique se há uma keytool no caminho do script para que o script possa localizá-la. Se você usa um cliente Db2, pode localizar a keytool em ~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 executar o script de shell e importar o arquivo PEM com o pacote de certificados em um Java KeyStore, execute o comando a seguir. Substitua shell_file_name.sh pelo nome do arquivo de script de shell, e password pela senha do Java KeyStore.

    ./shell_file_name.sh global-bundle.pem password truststore.jks
  4. Para se conectar ao servidor Db2, execute o comando a seguir. Substitua os seguintes espaços reservados no exemplo pelas informações da instância de banco de dados do RDS para Db2.

    • ip_address: o endereço IP do endpoint de instância de banco de dados.

    • port: o número da porta para a conexão SSL. Pode ser qualquer número de porta, exceto o número usado para a porta não SSL.

    • database_name: o nome do banco de dados na instância de banco de dados.

    • master_username: o nome de usuário principal da sua instância de banco de dados.

    • master_password: a senha mestra da instância de banco de dados.

    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
Como se conectar ao servidor de banco de dados do Db2 usando Node.js
  1. Instale o driver node-ibm_db. Para ter mais informações, consulte Installing the node-ibm_db driver on Linux and UNIXsystems na documentação do IBM Db2.

  2. Crie um arquivo JavaScript com base no conteúdo a seguir. Substitua os seguintes espaços reservados no exemplo pelas informações da instância de banco de dados do RDS para Db2.

    • ip_address: o endereço IP do endpoint de instância de banco de dados.

    • master_username: o nome de usuário principal da sua instância de banco de dados.

    • master_password: a senha mestra da instância de banco de dados.

    • database_name: o nome do banco de dados na instância de banco de dados.

    • port: o número da porta para a conexão SSL. Pode ser qualquer número de porta, exceto o número usado para a porta não 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 alterar o arquivo JavaScript, execute o comando a seguir.

    node ssl-test.js
Python
Como se conectar ao servidor de banco de dados do Db2 usando Python
  1. Crie um arquivo Python com o conteúdo a seguir. Substitua os seguintes espaços reservados no exemplo pelas informações da instância de banco de dados do RDS para Db2.

    • port: o número da porta para a conexão SSL. Pode ser qualquer número de porta, exceto o número usado para a porta não SSL.

    • master_username: o nome de usuário principal da sua instância de banco de dados.

    • master_password: a senha mestra da instância de banco de dados.

    • database_name: o nome do banco de dados na instância de banco de dados.

    • ip_address: o endereço IP do endpoint de instância de banco de dados.

    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. Crie o script de shell a seguir, que executa o arquivo Python criado. Substitua python_file_name.py pelo nome do arquivo 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 o arquivo PEM com o pacote de certificados e executar o script de shell, execute o comando a seguir. Substitua shell_file_name.sh pelo nome do arquivo de script de shell.

    ./shell_file_name.sh global-bundle.pem