在AWS文档中;使用IAM身份验证和AWS SDK for Python(Boto3(连接到您的DB实例";,对CCD_ 1(示出(和CCD_
conn = psycopg2.connect(host=ENDPOINT, port=PORT, database=DBNAME, user=USR, password=token, sslmode='prefer', sslrootcert="[full path]rds-combined-ca-bundle.pem")
cur = conn.cursor()
cur.execute("""SELECT now()""")
query_results = cur.fetchall()
print(query_results)
我看到了一些关于ssl_ca
路径(这里和这里(以及这些捆绑包的用途的讨论。但我在这里给出的三个链接都没有描述AWS文档给出的[full path]
组件,也没有描述它指向的位置。我目前的猜测(从第二个链接来看(是这个URL,但我想确定一下。
此外,将此捆绑包下载到运行Python3(boto3(脚本的远程EC2有什么好处?
EDIT:顺便说一句,上面对psycopg2.connect
的调用目前正在Jupyter中使用EC2上的Python 3.9.5,[full path]
按原样编写。。。
当您将pem文件下载到本地计算机(从您提供的最后一个URL(时,您应该将'[完整路径]'替换为保存pem文件的文件系统路径(目录路径(。
使用它的好处是,您的客户端将验证它是否连接到了正确的数据库,而不是拦截您流量的恶意系统。我不知道你认为这有多有利:如果有人破坏了亚马逊,拦截了他们的内部流量,他们也可能破坏了他们的CA。但至少有一种可能性,他们做了一个没有另一个。
您显示的代码对我不起作用,因为ssl_ca不是它的拼写方式。假设您使用了PostgreSQL第一个链接中实际给出的代码:
sslmode='prefer', sslrootcert="[full path]rds-combined-ca-bundle.pem"
那么,尽管有虚假的路径,它仍然有效的原因是";优选";意味着它不在乎rootcert是否丢失,在这种情况下它只是跳过验证。如果您将其更改为"验证已满",那么它可能会停止工作。