gpt4 book ai didi

django - 如何使用 Django 进行 RDS IAM 身份验证?

转载 作者:行者123 更新时间:2023-11-29 12:49:24 25 4
gpt4 key购买 nike

我希望我的 Django 应用程序使用 IAM 身份验证连接到 RDS postgres。这意味着数据库密码每 15 分钟过期一次,应该重新生成。问题是如何在运行时更改数据库密码?或者我应该更新我的数据库 URL 环境吗?

最佳答案

我们为此功能实现了一个包并发布到 PyPi。你可以在这里查看 https://github.com/labd/django-iam-dbauth

但原则上步骤如下:

第一个 enable IAM Authentication

然后 add the policy and attach it 连接到数据库的角色或用户。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:us-east-2:1234567890:dbuser:db-ABCDEFGHIJKL01234/db_userx"
]
}
]
}

然后在您的 AWS postgres 上创建一个用户并为其授予 rds_iam 角色:

CREATE USER db_userx WITH LOGIN; 
GRANT rds_iam TO db_userx;

对于 Django,您需要一个自定义后端以允许动态生成凭据。

创建一个包,例如 your.package.postgresql,其中包含一个 base.py

import boto3
from django.db.backends.postgresql import base

class DatabaseWrapper(base.DatabaseWrapper):
def get_connection_params(self):
params = super().get_connection_params()
rds_client = boto3.client("rds")
params["password"] = rds_client.generate_db_auth_token(
DBHostname=params.get("host", "localhost"),
Port=params.get("port", 5432),
DBUsername=params.get("user") or getpass.getuser(),
)

return params

然后使用如下设置:

DATABASES = {
"default": {
"HOST": "<hostname>",
"USER": "<user>",
"PORT": 5432,
"ENGINE": "your.package.postgresql"
}
}

关于django - 如何使用 Django 进行 RDS IAM 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57865837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com