我想从我自己的计算机连接到 dev 中的 aws rds POSTGRESQL。
我按照一堆文章中的所有步骤进行操作: https://aws.amazon.com/premiumsupport/knowledge-center/rds-postgresql-connect-using-iam/
问题是,如果我在 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,则会收到错误消息。 另外,我尝试从我的终端或 ssh 连接到 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 访问策略附加到我的用户,但仍然收到此错误。
我现在不知道该怎么做,因为我浏览了每一篇文章,但找不到解决方案。
我遇到了类似的问题,在使用 psql 实用程序后,我找到了这些错误的原因。您应将临时数据库密码/令牌导出到将启动连接的机器/服务等的外壳。
因此,如果 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 应该立即连接,而不提示输入任何其他密码
也可能是因为您使用的 AWS cli 凭证没有足够的权限来对数据库所在的账户进行操作
这些答案涵盖了更多可能导致此问题的选项
与此错误相关的问题是:
此外,指出上述所有内容可能都已到位,您仍然会得到 generate-db-auth-token CLI 命令来生成“类似令牌”的字符串,但它可能仍然是有用的如果承担角色的过程不正确,那就错了。
我终于找到了解决办法。因此,如果有人遇到同样的问题并且对此感到疯狂,那么解决方案如下:
如果一切正常,正如我上面描述的那样,并且您得到的唯一错误是 PAM.. 那么:
您的配置文件未正确设置。它没有您尝试连接的用户名、区域和密钥。
~/.aws/config
[profile PROFILE_NAME]
output=json
region=us-west-1
aws_access_key_id=foo
aws_secret_access_key=bar
以下是有关如何设置问题的链接: