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

2024-02-11

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


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

但原则上步骤如下:

First 启用 IAM 身份验证 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Enabling.html.

Then 添加策略并将其附加 https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html连接到数据库的角色或用户。

{
"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 with a base.py in it

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"
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Django 进行 RDS IAM 身份验证? 的相关文章

  • Django 自定义查询集过滤器

    在 Django 中 是否有一种标准方法可以为查询集编写复杂的自定义过滤器 就像我能写的一样 MyClass objects all filter field val 我想做这样的事情 MyClass objects all filter
  • Django 中同一个模型的多个多对多关系

    给定以下具有两个多对多关系的模型 class Child models Model name models CharField max length 80 class Foo models Model bar models ManyToMa
  • 使用 Django 在 App Engine 上存储图像

    我正在尝试使用 Django 在 Google App Engine 上的 db BlobProperty 字段中上传并保存调整大小的图像 我认为处理请求的相关部分如下所示 image images resize request POST
  • 如何在django模板中显示img文件?

    我知道标题有点误导 但我解释了一切 我正在 django 中创建商店 有一个小问题我不知道如何解决 好吧 对于每个产品 我想分配几张保存在数据库中的照片 这就是为什么我创建了Photo模型 它连接到Book模型与一个ForeignKey 整
  • 在大表上快速使用 LIMIT 和 OFFSET 进行 SELECT

    我的表中有超过 1000 万条记录 SELECT FROM tbl ORDER BY datecol DESC LIMIT 10 OFFSET 999990 输出EXPLAIN ANALYZE on 解释 depesz com http e
  • 微服务中的关系型数据库

    我有一个整体应用程序 当前使用 PostgreSQL 数据库 并且模式的设置与您对大多数关系数据库的期望相同 其中各种表数据通过 FK 链接回用户user id 我正在尝试了解有关微服务的更多信息 正在尝试将我的 python API 迁移
  • kubernetes 如何将 pod 暴露给集群机器之外的东西?

    我读了以下内容Kubernetes 文档 https kubernetes io docs tutorials kubernetes basics expose expose intro 这导致以下 yaml 在集群中运行 postgres
  • 将 VueJs 组件添加到 Django 模板中

    我正在开发一个 Django 网站 我希望将一些 Vue 组件 散布 到 Django 渲染的模板中 我正在单个存储库中工作 并使用 webpack 设置来创建我在 Django 模板中使用的 style js 包 我正在努力让功能按照我想
  • 错误:[ngModel:datefmt] 预期 `2015-05-29T19:06:16.693209Z` 为日期 - Angular

    我正在尝试angular申请与Django with rest framework 该应用程序从服务器接收 json 信息 关键之一是created time 该字段的值的格式根据iso 8601 例如2015 05 29T19 06 16
  • PostgreSQL 8.3 中不为空且唯一约束的增量字段

    我有一个表 项目 其中有一列 位置 位置具有唯一且非空的约束 为了在位置 x 插入新行 我首先尝试增加后续项目的位置 UPDATE items SET position position 1 WHERE position gt x 这会导致
  • 如何在 django 管理模型中上传多个文件

    file models FileField upload to settings FILE PATH 为了在 django 模型中上传文件 我使用了上面的行 但是对于通过 django 管理模型上传多个文件我该怎么办 我发现this htt
  • 使用 GeoDjango 在坐标系之间进行转换

    我正在尝试将坐标信息添加到我的数据库中 添加django contrib gis支持我的应用程序 我正在写一个south数据迁移 从数据库中获取地址 并向 Google 询问坐标 到目前为止 我认为我最好的选择是使用geopy为了这 接下来
  • 是否可以在使用 AWS DMS 迁移期间转换数据

    使用 AWS Data Migration Service 执行迁移时是否可以转换实际数据 我正在尝试将数据从 PostgreSQL 迁移到 DynamoDB 并向通过 DMS 带来的数据附加前缀 据我所知 迁移任务中可用的所有转换规则似乎
  • 自定义用户模型错误:AttributeError:“CustomUser”对象没有属性“is_anonymous”

    尝试建立一个扩展基本用户的自定义用户模型 有些用户会有登录信息 有些则没有 但我仍然希望所有用户都登录 我认为这就是错误所说的 在默认的 Django 模型中 它们被记录 但现在一些用户只有 IP 地址和用户名 其他用户将获得更多信息 例如
  • django 模板和列表字典

    我正在使用 django 的模板系统 但遇到以下问题 我将一个字典对象 example dictionary 传递给模板 example dictionary key1 value11 value12 我想做以下事情 for key in
  • 如何在不安装 AWS SDK 的情况下通过 Powershell 从 S3 下载文件?

    我想使用 Windows Powershell 从我的 AWS S3 存储桶下载文件 我无法安装任何 AWS 软件 需要创建一个 API 才能访问 AWS S3 中的文件 我使用Postman测试该文件是否可访问并且成功 鉴于这一成功 我尝
  • Django Azure AD 集成

    我目前正在使用 Azure AD 将 SSO 集成到 Django 项目中 我目前正在使用该包 https github com leibowitz django azure ad auth https github com leibowi
  • AWS Lambda:类 java.lang.ClassNotFoundException

    I am getting this message and I have no idea how to resolve it Searched online and tried to implement their suggestion b
  • 如何使 Postgres Copy 忽略大 txt 文件的第一行

    我有一个相当大的 txt 文件 9gb 我想将此 txt 文件加载到 postgres 中 第一行是标题 后面是所有数据 如果我直接 postgres COPY 数据 标头将导致数据类型与我的 postgres 表不匹配的错误 因此我需要以
  • Sails.js + Postgres:交易问题

    我试图使用 Postgres 作为数据库在 Sails 0 10 5 中实现事务 但操作最终没有提交 或回滚 这是我作为测试写下的一个简单的事务场景 使用 async js testTransaction function uri var

随机推荐

  • Dynamic_cast 没有按预期抛出异常

    基于这个答案 在 C 中查找对象的类型 https stackoverflow com questions 351845 finding the type of an object in c 我写了这段代码 static TVALUE ge
  • 当我对符号矩阵进行行归约时,为什么 SymPy 给出了错误的答案?

    如果我要求 SymPy 对奇异矩阵进行行归约 nu Symbol nu lamb Symbol lambda A3 Matrix 3 nu 1 0 0 3 nu 2 nu 1 2 0 0 2 nu 1 nu lamb 2 3 0 0 nu
  • Safari 中的 Vue.js 渲染问题

    我有一个使用 Vue 和 Laravel 编写的作品集网站 它使用 v for 呈现项目缩略图 除了 Safari 之外 这在每个浏览器上都工作得很好 但有一个奇怪的问题 除非用户调整浏览器窗口的大小 否则图像根本不会显示 相关代码如下 d
  • 如何在使用 Python 运行 wkhtmltopdf.exe 时停止弹出窗口

    我正在使用 wkhtmltopdf exe 使用 python 将 html 转换为 pdf wkhtmltopdf exe 的弹出窗口使我在运行它时很难处理任何其他事情 我必须转换大约 200K 个文件 并且必须同时处理其他事情 但它确实
  • 是否可以将摘要式身份验证与 XMLHTTPRequest 一起使用?

    我有一个简单的问题 是否可以将摘要式身份验证与 XMLHTTPRequest 一起使用 如果答案是否定的 那么技术原因是什么 或者如果可能的话 我该怎么做 非常感谢 谷歌到目前为止还没有好的答案 EDIT 感谢您的回答 在收到随机数后修改标
  • 设置 WPF ScrollViewer 中何时滚动

    我有一个滚动查看器 其中包含一个网格 其中有一堆表单控件 文本框 复选框 组合框等 当我通过选项卡浏览控件时 滚动查看器将滚动 但仅在必要时滚动 我的意思是我通过选项卡浏览滚动查看器中的所有内容 并且仅当控件不可见时滚动查看器才会滚动 我想
  • 为什么这些线程不按顺序运行?

    当我运行这段代码时 include
  • 在 Laravel 中同步一对多关系

    如果我有一个多对多的关系 那么用它的关系更新关系是非常容易的sync method 但是我用什么来同步一对多关系呢 table posts id name table links id name post id 在这里 每一个Post可以有
  • Google OAuth:如何使用刷新令牌?

    我可以将 Android 设备上的一次性使用令牌换成访问令牌 and a 刷新令牌 我正在尝试弄清楚如何使用刷新令牌 I found this https developers google com accounts docs OAuth2
  • 在 R 中导入和分析非矩形 .csv 文件

    我将从 Mathematica 迁移到 R 在导入过程中我不需要预测数据结构 特别是我不需要在导入之前预测数据的矩形性 我有很多文件 csv文件格式如下 tasty chicken cinnamon not tasty butter pep
  • 如何在 android 中显示简单的通知? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何在 Android 的通知栏中显
  • 寻找一种优雅且非侵入性的方式来访问类的私有方法

    免责声明 这绝不意味着在生产代码中使用 这是对 C 边缘的探索 我的问题是一个后续问题 基于与 Johannes Schaub 的讨论 在c 中调用私有方法 https stackoverflow com questions 6873138
  • 强制 enum 为 unsigned long 类型

    是否可以强制枚举的基础类型为 unsigned long 类型 谢谢 在 C 11 及更高版本中 您可以明确提及您想要的类型 enum MyEnumeration unsigned long values go here 这将允许您显式控制
  • 如何从 AWS Codebuild 构建规范文件中排除文件夹?

    所以我需要从我的工件中排除一个文件夹 但谷歌搜索找不到任何信息 version 0 2 phases install runtime versions nodejs 10 build commands echo Build started
  • 计算计算着色器内帧缓冲区的颜色直方图

    正如标题所示 我正在将场景渲染到帧缓冲区上 并尝试从计算着色器内的帧缓冲区中提取颜色直方图 我对使用计算着色器完全陌生 并且缺乏教程 示例 关键字让我不知所措 特别是 我正在努力正确设置计算着色器的输入和输出图像 这是我所拥有的 compu
  • 如何加快Python中的字符串连接速度?

    在下面的代码中 串联是瓶颈 正如你所看到的 我尝试了一些复杂的方法来加快速度 但无论如何它都很慢 我想知道是否有什么我可以做的来使它更快 顺便说一句 普通和秘密都是从二进制文件读取的数据 它们都很大 大约 1mb x b if len pl
  • 在 Cocoa 程序中访问 Swift REPL

    我可以将 LLDB 附加到用 Swift 编写的程序并访问 REPL 无论是从 Xcode 内还是通过运行 lldb n ProcessName lldb repl 1 gt 但是 如果我将 LLDB 附加到没有 Swift 运行时的进程
  • Activity 生命周期 - 每次重新定向时都会调用 onCreate

    我有一个简单的活动 可以加载位图onCreate 我发现如果我旋转设备 我可以从日志中看到onCreate又打电话来了 事实上 因为所有实例变量都再次设置为默认值 所以我知道整个 Activity 已被重新实例化 旋转 2 次后 我得到 F
  • Django 国家/地区按翻译名称排序

    我开始使用 django countries 并向我的模型之一添加一个字段 country CountryField blank True 问题是用户的语言是西班牙语 当表格显示国家列表时 它们被正确翻译 但他们是按我猜的代码或英文名称排序
  • 如何使用 Django 进行 RDS IAM 身份验证?

    我希望我的 django 应用程序使用 IAM 身份验证连接到 RDS postgres 这意味着数据库密码每 15 分钟就会过期 应该重新生成 问题是如何在运行时更改数据库密码 或者我应该更新我的数据库 URL 环境 我们为此功能实现了一