Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何在通过STS令牌(IAM)向RDS进行身份验证时更新postgres密码_Django_Postgresql_Amazon Web Services_Amazon Rds_Amazon Iam - Fatal编程技术网

Django 如何在通过STS令牌(IAM)向RDS进行身份验证时更新postgres密码

Django 如何在通过STS令牌(IAM)向RDS进行身份验证时更新postgres密码,django,postgresql,amazon-web-services,amazon-rds,amazon-iam,Django,Postgresql,Amazon Web Services,Amazon Rds,Amazon Iam,Rds在postgres中支持基于IAM的身份验证已经有一段时间了,但我没有看到任何关于在django应用程序中使用它的讨论 这是一个足够简单的系统-您的应用程序运行时具有服务角色(或具有iam用户的访问密钥和密码),通过标准iam策略,已附加作为特定db用户连接的权限。每当应用程序需要连接到数据库时,它都会使用AWS SDK从STS请求令牌,该令牌通过服务角色授权,因此不需要任何凭据。连接到数据库时,它使用接收到的令牌作为密码,并且数据库必须有一个具有该名称的用户,该用户被配置为使用iam身份

Rds在postgres中支持基于IAM的身份验证已经有一段时间了,但我没有看到任何关于在django应用程序中使用它的讨论

这是一个足够简单的系统-您的应用程序运行时具有服务角色(或具有iam用户的访问密钥和密码),通过标准iam策略,已附加作为特定db用户连接的权限。每当应用程序需要连接到数据库时,它都会使用AWS SDK从STS请求令牌,该令牌通过服务角色授权,因此不需要任何凭据。连接到数据库时,它使用接收到的令牌作为密码,并且数据库必须有一个具有该名称的用户,该用户被配置为使用iam身份验证机制。但是代币只能使用15分钟。这意味着连接工厂需要为连接设置小于15分钟的最长期限,并且每次打开新连接时都需要请求新的令牌/密码。Django希望在应用程序初始化时设置密码,而不是在每次建立新连接时动态生成密码

这似乎是django应该本机支持的事情,而不是需要中间件(或对config dict的_getattr__方法的创造性攻击)。如此之多,以至于我讨厌在没有向更广泛的社区询问解决方案的情况下实施这样的黑客攻击。我不是django开发者。我是devops公司的人,试图让django应用程序在生产中运行。我在谷歌搜索关于凭证轮换或动态设置时运气不佳


显而易见的解决方案是允许将一个可调用的密码分配给密码,但如果不破解数据库配置命令的uu getattr_u_u________________________________________?我使用的是一个典型的nginx->gunicorn->django部署-都在同一个容器中。看起来应该比看起来容易些,所以我希望我只是错过了一些东西。

我不确定if有多大帮助,但是“连接工厂需要为连接设置一个不到15分钟的最长时间”似乎是一个错误的假设。一旦建立了连接,您就可以保持连接在该限制之外打开。15分钟的限制仅适用于临时令牌可用于建立连接的时间。此外,“它需要在每次打开新连接时请求一个新的令牌/密码”也不太正确。代币不是一次性使用的。可以使用同一个未过期的令牌打开多个连接。我不确定令牌过期后仍保持打开状态的连接是否正确-AWS文档根本没有明确说明这一点。如果它们在过期后没有保持身份验证,那么为每个连接刷新令牌并设置CONN_AX_AGE(连接时间略少于15分钟)可能比设置单独的执行线程(每次仅更新令牌)更容易。顺便说一句,在db配置中黑客攻击getattr不起作用,因为这些值是从该dict中检索的,并由设置系统存储在其他位置。到目前为止,我看到的最好的想法是从标准postgresql psycopg客户端继承,并重载get_connection_params()方法。我不确定这是否有帮助,但“连接工厂需要为连接设置一个不到15分钟的最长期限”似乎是一个错误的假设。一旦建立了连接,您就可以保持连接在该限制之外打开。15分钟的限制仅适用于临时令牌可用于建立连接的时间。此外,“它需要在每次打开新连接时请求一个新的令牌/密码”也不太正确。代币不是一次性使用的。可以使用同一个未过期的令牌打开多个连接。我不确定令牌过期后仍保持打开状态的连接是否正确-AWS文档根本没有明确说明这一点。如果它们在过期后没有保持身份验证,那么为每个连接刷新令牌并设置CONN_AX_AGE(连接时间略少于15分钟)可能比设置单独的执行线程(每次仅更新令牌)更容易。顺便说一句,在db配置中黑客攻击getattr不起作用,因为这些值是从该dict中检索的,并由设置系统存储在其他位置。到目前为止,我看到的最好的想法是从标准postgresql psycopg客户端继承并重载get_connection_params()方法。