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
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)
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 RDSPara
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.