RDS Postgres DB IAM generate_db_auth_token不起作用

时间:2019-05-08 10:24:32

标签: postgresql amazon-web-services amazon-rds amazon-iam

AWS 中,我有一个 RDS Postgres数据库。数据库中的用户可以通过 IAM 进行连接(他们具有 IAM_USER 角色)。通过 Python Boto3 以编程方式实现连接,例如:

RDS客户端设置

self.rds = boto3.client(
    'rds',
    region_name = rds_region,
    aws_access_key_id = aws_access_key_id,
    aws_secret_access_key = aws_secret_access_key,
)

生成令牌

return self.rds.generate_db_auth_token(
    self.db_hostname,
    self.port,
    self.db_username,
    Region=self.region
)

当我使用几乎可以访问AWS中所有内容的IAM用户的AWS密钥时,将生成一个有效的令牌,该令牌可以启用Postgres登录。

但是,当我使用仅具有 AmazonRDSFullAccess AmazonRDSDataFullAccess 的用户的AWS密钥时,会生成类似于有效令牌但不会被接受为令牌的令牌尝试登录Postgres时输入的密码,例如:

OperationalError: (psycopg2.OperationalError) FATAL:  PAM authentication failed for user "test_iam_user"

据我所知,此用户可以正确访问我的所有RDS资源,只是不会生成有效的令牌。

如果有人能说出缺少的权限和/或我做错了什么,我将不胜感激。

最好了解解决AWS中此类权限问题的最佳方法,以找到阻止访问的特定权限。

干杯!

1 个答案:

答案 0 :(得分:0)

我的工程师Jun解决了这个问题!

我所缺少的是以下权限:

df %>%
 group_by(Groups) %>%
 summarise(Value = as.integer(max(Value, na.rm = TRUE) > 0))

将此权限与AmazonRDSFullAccess或AmazonRDSDataFullAccess一起添加到IAM用户后,便会生成一个有效的令牌,可以将其用作登录RDS数据库的密码。