psql:FATAL:用户““aws rds PostgreSQL的PAM身份验证失败

qfe3c7zg  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(3)|浏览(175)

我想从我自己的计算机连接到开发中的aws rds POSTGRESQL。
我遵循了一堆文章中关于如何做到这一点的所有步骤:https://aws.amazon.com/premiumsupport/knowledge-center/rds-postgresql-connect-using-iam/
https://aws.amazon.com/blogs/database/using-iam-authentication-to-connect-with-pgadmin-amazon-aurora-postgresql-or-amazon-rds-for-postgresql/
问题是,如果我在AWS控制台界面中创建数据库,我只能登录一次。

psql -h database.xxxxxxxx.us-west-2.rds.amazonaws.com -U user_name -d database

其他时候我尝试使用相同的任何其他命令登录,我得到

psql: FATAL:  PAM authentication failed for user "user_name"

第一次也是唯一一次登录时,我创建了一个用户

CREATE USER user_name WITH LOGIN; 
GRANT rds_iam TO user_name;

所有其他尝试,包括使用iam令牌等进行日志记录的其他步骤,我都得到一个错误:

psql: FATAL:  PAM authentication failed for user "user_name"

如果我从AWS控制台界面删除数据库,然后创建一个全新的数据库,我只能登录一次,然后无论我做什么都得到错误。
nc命令在我运行它的任何时候都显示连接成功:

nc -zv DB-instance-endpoint port

我使用的命令:

export RDSHOST="database.xxxxxxxx.us-west-2.rds.amazonaws.com"
export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username user_name)"

如果我在pgAdmin窗口中使用PGPASSWORD,我会收到错误。另外,我试图从终端连接到ec2,我使用这个命令:

psql "host=$RDSHOST port=5432 sslmode=verify-full sslrootcert=./rds-combined-ca-bundle.pem dbname=database user=user_name"

我还是会得到同样的错误

psql: FATAL:  PAM authentication failed for user "user_name"

或者如果我使用其他命令,而不使用.pem证书

psql --host=database.xxxxxxxx.us-west-2.rds.amazonaws.com --port=5432 --username=user_name --password --dbname=database

然后它要求我输入密码,然后我得到这个错误

psql: error: FATAL:  PAM authentication failed for user "user_name"
FATAL:  pg_hba.conf rejects connection for host "222.22.22.22", user "user_name", database "database", SSL off

“222.22.22.22”是我的IP,我当然改变了它。
我附加了所有必需的和所有的RDS访问策略到我的用户,仍然得到这个错误。
我只是不知道在这一点上该怎么做,因为我读了每一篇文章,找不到解决方案。

htzpubme

htzpubme1#

我也遇到过类似的问题,在使用了psql实用程序之后,我找到了这些错误的原因。您应将临时数据库密码/令牌导出到机器/服务等的 shell ,连接将从那里启动。
因此,如果psql连接是从Bastion发起的,下面的命令也应该在同一个Bastion服务器上运行。

export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region us-west-2 --username user_name)"

或在别处生产并输出其价值

export PGPASSWORD="temporary_token_generated_for_user_name"

有了这个导出的$PGPASSWORD变量,它psql应该立即连接,而不需要提示任何额外的密码

vsnjm48y

vsnjm48y2#

也可能是因为您使用的AWS cli凭据没有足够的权限来操作数据库所在的帐户

zpqajqem

zpqajqem3#

我终于找到了解决办法。所以,如果有人有同样的问题,并为此疯狂,这里是解决方案:
如果一切都像我上面描述的那样工作,并且你得到的唯一错误是PAM。然后:
您的配置文件没有正确设置。它没有您尝试连接的用户名、区域和密钥。

~/.aws/config 

[profile PROFILE_NAME]
 output=json
 region=us-west-1
 aws_access_key_id=foo
 aws_secret_access_key=bar

下面是关于如何设置它的问题的链接:
AWS : The config profile (MyName) could not be found

相关问题