psql:致命:用户“” aws rds Postgresql 的 PAM 身份验证失败

问题描述 投票:0回答:4

我想从我自己的计算机连接到 dev 中的 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,则会收到错误消息。 另外,我尝试从我的终端或 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 访问策略附加到我的用户,但仍然收到此错误。

我现在不知道该怎么做,因为我浏览了每一篇文章,但找不到解决方案。

postgresql amazon-web-services amazon-rds amazon-iam psql
4个回答
1
投票

我遇到了类似的问题,在使用 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 应该立即连接,而不提示输入任何其他密码


0
投票

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


0
投票

这些答案涵盖了更多可能导致此问题的选项

与此错误相关的问题是:

  • 缺乏
    rds-db:connect
    的权限(ref
  • SCP 政策限制/缺乏
    rds-db:*
    权限
  • 在数据库中错误创建
    user_name
    ref

此外,指出上述所有内容可能都已到位,您仍然会得到 generate-db-auth-token CLI 命令来生成“类似令牌”的字符串,但它可能仍然是有用的如果承担角色的过程不正确,那就错了。


-2
投票

我终于找到了解决办法。因此,如果有人遇到同样的问题并且对此感到疯狂,那么解决方案如下:

如果一切正常,正如我上面描述的那样,并且您得到的唯一错误是 PAM.. 那么:

您的配置文件未正确设置。它没有您尝试连接的用户名、区域和密钥。

~/.aws/config 

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

以下是有关如何设置问题的链接:

AWS:找不到配置文件(MyName)

© www.soinside.com 2019 - 2024. All rights reserved.