在 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
)
生成有效的令牌,当我使用IAM用户的AWS键时,可以启用Postgres登录,该键几乎可以访问AWS中的所有内容。
但是,当我使用仅具有 amazonrdsfullaccess 和 AmazonRdsDataFullAccess 的用户的AWS密钥时当我尝试登录到Postgres时,密码,例如:
OperationalError: (psycopg2.OperationalError) FATAL: PAM authentication failed for user "test_iam_user"
据我所知,该用户可以正确访问我的所有RDS资源,它不会生成有效的令牌。
如果有人能说出缺少的许可和/或我做错了什么,我会很感激。
在AWS中了解此类权限问题以找到阻止访问权限的特定许可。
也将是一件好方法。欢呼!!
我的工程师Jun解决了这个问题!
我缺少的是以下权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:eu-west-1:<aws_account_number>:dbuser:<rds_db_resource_id>/<postgres_user>"
]
}
]
}
一旦将此许可与AmazonRdsfullaccess或Amazonrdsdatafullaccess一起添加到IAM用户,则生成了有效的令牌,可以将其用作密码以登录RDS数据库。