Conectar-se à instância de banco de dados usando a autenticação do IAM e o AWS SDK for Python (Boto3) - Amazon Relational Database Service

Conectar-se à instância de banco de dados usando a autenticação do IAM e o AWS SDK for Python (Boto3)

Você pode se conectar a uma instância de banco de dados do RDS para MariaDB, RDS para MySQL ou RDS para PostgreSQL com a AWS SDK for Python (Boto3), conforme descrito a seguir.

Pré-requisitos

Veja a seguir os pré-requisitos para se conectar à instância de banco de dados usando a autenticação do IAM:

Além disso, verifique se as bibliotecas importadas no código de exemplo existem no sistema.

Exemplos

Os exemplos de código usam perfis para credenciais compartilhadas. Para obter informações sobre a especificação de credenciais, consulte Credenciais na documentação AWS SDK for Python (Boto3).

O exemplo de código a seguir mostra como gerar um token de autenticação e usá-lo para se conectar a uma instância de banco de dados.

Para executar esse exemplo de código, você precisa do AWS SDK for Python (Boto3), encontrado no site AWS.

Modifique os valores das seguintes variáveis, conforme necessário:

  • ENDPOINT: o endpoint da instância de banco de dados que você deseja acessar

  • PORT: o número da porta usada para se conectar à instância de banco de dados

  • USER: a conta de banco de dados que você deseja acessar

  • REGION: a região da AWS na qual a instância do banco de dados está em execução.

  • DBNAME: o banco de dados que você deseja acessar

  • SSLCERTIFICATE: o caminho completo para o certificado SSL do Amazon RDS

    Para ssl_ca, defina um certificado SSL. Para baixar um certificado SSL, consulte Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados.

nota

Não é possível usar um registro DNS personalizado do Route 53 em vez do endpoint do  da instância de banco de dados para gerar o token de autenticação.

Esse código se conecta a uma instância de banco de dados MariaDB ou MySQL.

Antes de executar esse código, instale o driver PyMySQL seguindo as instruções no Python Package Index.

import pymysql import sys import boto3 import os ENDPOINT="mysqldb.123456789012.us-east-1.rds.amazonaws.com" PORT="3306" USER="jane_doe" REGION="us-east-1" DBNAME="mydb" os.environ['LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN'] = '1' #gets the credentials from .aws/credentials session = boto3.Session(profile_name='default') client = session.client('rds') token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USER, Region=REGION) try: conn = pymysql.connect(auth_plugin_map={'mysql_clear_password':None},host=ENDPOINT, user=USER, password=token, port=PORT, database=DBNAME, ssl_ca='SSLCERTIFICATE', ssl_verify_identity=True) cur = conn.cursor() cur.execute("""SELECT now()""") query_results = cur.fetchall() print(query_results) except Exception as e: print("Database connection failed due to {}".format(e))

Esse código se conecta a uma instância de banco de dados PostgreSQL.

Antes de executar esse código, instale psycopg2, seguindo as instruções na documentação de Psycopg.

import psycopg2 import sys import boto3 import os ENDPOINT="postgresmydb.123456789012.us-east-1.rds.amazonaws.com" PORT="5432" USER="jane_doe" REGION="us-east-1" DBNAME="mydb" #gets the credentials from .aws/credentials session = boto3.Session(profile_name='RDSCreds') client = session.client('rds') token = client.generate_db_auth_token(DBHostname=ENDPOINT, Port=PORT, DBUsername=USER, Region=REGION) try: conn = psycopg2.connect(host=ENDPOINT, port=PORT, database=DBNAME, user=USER, password=token, sslrootcert="SSLCERTIFICATE") cur = conn.cursor() cur.execute("""SELECT now()""") query_results = cur.fetchall() print(query_results) except Exception as e: print("Database connection failed due to {}".format(e))

Se você quiser se conectar a uma instância de banco de dados por meio de um proxy, consulte Conectar-se a um proxy usando autenticação do IAM.