[英]AWS RDS PostgreSQL connection using IAM Role is not working if dbi-resource-id specified
我正在尝试使用 IAM 凭证向 IAM 用户授予对 AWS RDS PostgreSQL 的访问权限,但如果在 IAM 策略中指定了DbiResourceId
,则出现错误PAM authentication failed for user
。
1. 我按照文档中的描述创建了 IAM 策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:us-west-2:<My_account_id>:dbuser:<My_DbiResourceId>/readwrite_user"
]
}
]
}
2.创建数据库用户:
CREATE USER readwrite_user WITH LOGIN;
GRANT rds_iam TO readwrite_user;
GRANT CONNECT ON DATABASE database_iam_test TO readwrite_user;
3.尝试连接
export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region $REGION --username $DBUSERNAME)"
psql -h $RDSHOST -p 5432 "dbname=database_iam_test user=$DBUSERNAME sslrootcert=./rds-combined-ca-bundle.pem sslmode=verify-ca"
在这种情况下我有错误:
psql: error: could not connect to server: FATAL: PAM authentication failed for user "readwrite_user"
但是,如果我使用 * 而不是 DbiResourceId — 它正在运行,那么:此策略正在运行:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:us-west-2:<My_account_id>:dbuser:*/readwrite_user"
]
}
]
}
我只有一个数据库资源,而且我确信我使用了正确的 DbiResourceId,它在我的设置中由命令返回:
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier,DbiResourceId]" --region $REGION
谁能解释为什么在这种情况下指定DbiResourceId
会导致错误?
我正在尝试使用 IAM 凭证授予 IAM 用户对 AWS RDS PostgreSQL 的访问权限,如果在 IAM 策略中指定了DbiResourceId
,则PAM authentication failed for user
。
1. 我按照文档中的描述创建了 IAM 策略。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:us-west-2:<My_account_id>:dbuser:<My_DbiResourceId>/readwrite_user"
]
}
]
}
2.创建数据库用户:
CREATE USER readwrite_user WITH LOGIN;
GRANT rds_iam TO readwrite_user;
GRANT CONNECT ON DATABASE database_iam_test TO readwrite_user;
3.尝试连接
export PGPASSWORD="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 5432 --region $REGION --username $DBUSERNAME)"
psql -h $RDSHOST -p 5432 "dbname=database_iam_test user=$DBUSERNAME sslrootcert=./rds-combined-ca-bundle.pem sslmode=verify-ca"
在这种情况下我有错误:
psql: error: could not connect to server: FATAL: PAM authentication failed for user "readwrite_user"
但是如果我使用 * 而不是 DbiResourceId - 它正在工作,所以:这个策略正在工作:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:us-west-2:<My_account_id>:dbuser:*/readwrite_user"
]
}
]
}
我只有一个数据库资源,我确定我使用了正确的 DbiResourceId,它在我的设置中并由命令返回:
aws rds describe-db-instances --query "DBInstances[*].[DBInstanceIdentifier,DbiResourceId]" --region $REGION
谁能解释为什么在这种情况下指定DbiResourceId
会导致错误?
只是为了澄清@vadim-yangunaev 的回答——这是resource_id而不是cluster_id ,这有点令人困惑。 出于某种原因,我脑子里想着文档说集群 ID,而实际上它正在寻找资源 ID。 事后看来很明显,但我很少需要使用资源 ID 指定任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.