如何使用 terraform 使用 AWS IAM 身份验证预置 RDS postgres db 用户?
·
问题:如何使用 terraform 使用 AWS IAM 身份验证预置 RDS postgres db 用户?
通过查看此 AWS 博客:https://aws.amazon.com/premiumsupport/knowledge-center/users-connect-rds-iam/我注意到我需要在使用主用户名登录后创建一个 DB 用户和密码:
CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
我可以看到 terraform 有mysql_user
来配置 mysql db 用户:https://www.terraform.io/docs/providers/mysql/r/user.html
但是,我找不到postgres_user
。有没有办法为 postgres 用户提供 IAM 身份验证?
解答
在 Postgres 中,用户被称为“角色”。Postgres 文档说:
一个角色可以被认为是一个“用户”、一个“组”,或者两者兼而有之,这取决于它的使用方式
所以,要创建的 TF 资源是一个postgresql_role
resource "postgresql_role" "my_replication_role" {
name = "replication_role"
replication = true
login = true
connection_limit = 5
password = "md5c98cbfeb6a347a47eb8e96cfb4c4b890"
}
要让 IAM 用户代入该角色,遵循 AWS 文档中的步骤。
根据这些说明,您最终会得到类似于以下内容的 TF 代码:
module "db" {
source = "terraform-aws-modules/rds/aws"
// ...
}
provider "postgresql" {
// ...
}
resource "postgresql_role" "pguser" {
login = true
name = var.pg_username
password = var.pg_password
roles = ["rds_iam"]
}
resource "aws_iam_user" "pguser" {
name = var.pg_username
}
resource "aws_iam_user_policy" "pguser" {
name = var.pg_username
user = aws_iam_user.pguser.id
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:${var.region}:${data.aws_caller_identity.current.account_id}:dbuser:${module.db.this_db_instance_resource_id}/${var.pg_username}"
]
}
]
}
EOF
}
更多推荐
所有评论(0)