使用 IAM 身份验证和 Amazon SDK for Python (Boto3) 连接到数据库集群 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 IAM 身份验证和 Amazon SDK for Python (Boto3) 连接到数据库集群

您可以使用 Amazon SDK for Python (Boto3) 连接到 Aurora MySQL 或 Aurora PostgreSQL 数据库集群,如下所述。

以下是使用 IAM 身份验证连接到数据库集群的先决条件:

此外,请确保示例代码中的导入库存在于您的系统中。

该代码示例将配置文件用于共享凭证。有关指定凭证的信息,请参阅 Amazon SDK for Python (Boto3) 文档中的凭证

生成 IAM 身份验证令牌

您可以调用 generate_db_auth_token 方法来获取签名令牌。提供数据库集群终端节点、端口、用户名、Amazon 区域和数据库引擎,以生成用于通过 IAM 凭证连接到数据库集群的令牌。

此代码可为 Aurora MySQL 数据库集群生成 IAM 身份验证令牌。

import sys import boto3 import os ENDPOINT="mysqlcluster.cluster-123456789012.us-east-1.rds.amazonaws.com" PORT="3306" USR="jane_doe" REGION="us-east-1" os.environ['LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN'] = '1' #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=USR, Region=REGION)

此代码可为 Aurora PostgreSQL 数据库集群生成 IAM 身份验证令牌。

import sys import boto3 import os ENDPOINT="postgresmycluster.cluster-123456789012.us-east-1.rds.amazonaws.com" PORT="5432" USR="jane_doe" REGION="us-east-1" #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=USR, Region=REGION)

连接到数据库集群

以下代码示例演示如何生成一个身份验证令牌,然后使用该令牌连接到数据库集群

要运行该代码示例,您需要使用 Amazon 网站上提供的 Amazon SDK for Python (Boto3)

根据需要修改以下变量的值:

  • ENDPOINT – 要访问的数据库集群的终端节点。

  • PORT – 用于连接到数据库集群的端口号

  • USER – 要访问的数据库账户。

  • REGION – 在其中运行数据库集群的 Amazon 区域

  • DBNAME – 要访问的数据库

此代码连接到 Aurora MySQL 数据库集群。

import mysql.connector import sys import boto3 import os ENDPOINT="mysqlcluster.cluster-123456789012.us-east-1.rds.amazonaws.com" PORT="3306" USR="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=USR, Region=REGION) try: conn = mysql.connector.connect(host=ENDPOINT, user=USR, passwd=token, port=PORT, database=DBNAME, ssl_ca='[full path]rds-combined-ca-bundle.pem') 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))

此代码连接到 Aurora PostgreSQL 数据库集群。

import psycopg2 import sys import boto3 import os ENDPOINT="postgresmycluster.cluster-123456789012.us-east-1.rds.amazonaws.com" PORT="5432" USR="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=USR, Region=REGION) try: conn = psycopg2.connect(host=ENDPOINT, port=PORT, database=DBNAME, user=USR, password=token, ssl_ca='[full path]rds-combined-ca-bundle.pem') 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))