我正在从正在开发的rails
应用程序访问AWS
上的RDS PostgreSQL
数据库。目前,我正在使用AWS
根凭据访问数据库。
在我的database.yml
:中
pg_development:
<<: *pg_default
adapter: postgresql
database: myDatabase
username: myRootUsername
password: myRootPassword
host: myDatabase.1234.us-east-1.rds.amazonaws.com
在生产中,它们存储在Heroku
配置变量中。
这与我的root凭据非常配合。然后,我设置了一个IAM用户和组以提高安全性。我已经批准了我能想到的每一项政策。我紧随其后http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAM.html尽我所能。。。
在我的开发环境中,我看到一个rails错误PG::ConnectionBad FATAL: password authentication failed for user "myIAMuser"
在我的Heroku
日志中,它显示Completed 500 Internal Server Error in 59ms (ActiveRecord: 1.3ms)
和我在dev.中看到的相同致命错误
我以前从未使用过IAM
,我希望我只是犯了一个简单的错误,并且传递凭据的方法与IAM
不同。
我试着重新启动服务器,切换回root,以确保我没有把其他事情搞砸,从而导致错误,rake db:migrate
,想不出还有什么会导致这种情况。
您正在混合IAM用户和数据库用户。。。
IAM用户是AWS内的用户(例如,可以登录管理控制台,或使用SDK功能启动ec2实例、创建RDS数据库、将数据写入S3等)。
当您启动RDS实例时,必须指定admin/root用户名和密码。我的猜测是,这是有效的用户名和密码(注意,这个用户名和密码不能识别IAM用户)。
如果你想缩小应用程序的数据库访问权限,你需要在RDS PostgreSQL内部创建一个新的数据库用户(使用某种Postgre GUI,或者连接Postgre数据库并发出create user)。