Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何使用terraform为RDS postgres db用户提供AWS IAM auth?_Postgresql_Terraform_Amazon Rds_Amazon Iam - Fatal编程技术网

Postgresql 如何使用terraform为RDS postgres db用户提供AWS IAM auth?

Postgresql 如何使用terraform为RDS postgres db用户提供AWS IAM auth?,postgresql,terraform,amazon-rds,amazon-iam,Postgresql,Terraform,Amazon Rds,Amazon Iam,通过查看这个AWS博客:我注意到我需要在使用主用户名和密码登录后创建一个DB用户: CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS'; 我可以看到terraform有mysql\u user来配置mysql数据库用户: 但是,我找不到postgres\u用户。有没有办法为postgres用户提供IAM auth 在Postgres中,用户被称为“角色”。他们说: 角色可以被视为“用户”、“组”或两

通过查看这个AWS博客:我注意到我需要在使用主用户名和密码登录后创建一个DB用户:

CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
我可以看到terraform有
mysql\u user
来配置mysql数据库用户:


但是,我找不到
postgres\u用户
。有没有办法为postgres用户提供IAM auth

在Postgres中,用户被称为“角色”。他们说:

角色可以被视为“用户”、“组”或两者,具体取决于其使用方式

因此,要创建的TF资源是

要使IAM用户能够担任此角色,请执行以下操作

根据这些说明,最终的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
}
模块“db”{
source=“地形aws模块/rds/aws”
// ...
}
提供程序“postgresql”{
// ...
}
资源“postgresql_角色”“pguser”{
login=true
name=var.pg\u用户名
密码=var.pg_密码
角色=[“rds_iam”]
}
资源“aws\U iam\U用户”“pguser”{
name=var.pg\u用户名
}
资源“aws\U iam\U用户策略”“pguser”{
name=var.pg\u用户名
user=aws\u iam\u user.pguser.id
政策=
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
}