问题:如何使用 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
}
Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐