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

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

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

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

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

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

生成 IAM 身份验证令牌

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

此代码可为 MySQL 数据库实例生成 IAM 身份验证令牌。

import sys import boto3 import os ENDPOINT="mysqldb.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)

此代码可为 PostgreSQL 数据库实例生成 IAM 身份验证令牌。

import sys import boto3 import os ENDPOINT="postgresmydb.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 – 要访问的数据库

此代码连接到 MySQL 数据库实例。

import mysql.connector import sys import boto3 import os ENDPOINT="mysqldb.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))

此代码连接到 PostgreSQL 数据库实例。

import psycopg2 import sys import boto3 import os ENDPOINT="postgresmydb.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))