Terraform RDS 安全组设置

问题描述 投票:0回答:1

我已经按照以下步骤创建了安全组和RDS实例:

resource "aws_security_group" "database" {
  name = "DB Host"
  ingress {
    from_port   = 5432
    to_port     = 5432
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}


resource "aws_db_instance" "arapbi" {
  identifier_prefix      = "arapbi"
  engine                 = "postgres"
  allocated_storage      = 10
  instance_class         = "db.t4g.micro"
  db_name                = "arapbi"
  username               = var.db_username
  password               = var.db_password
  vpc_security_group_ids = ["${aws_security_group.database.id}"]
  skip_final_snapshot    = true

  tags = {
    Name = "ARAPBI"
    Tag  = "Managed by Terraform"
  }
}

output "rds_endpoint" {
  description = "The endpoint of the RDS instance"
  value = aws_db_instance.arapbi.endpoint
}

至此,安全组和RDS实例创建成功,运行后返回RDS端点。

当我尝试使用 DBeaver 连接到 RDS 数据库时,连接超时。我不知道为什么。

我了解我正在通过此 SG 将此数据库公开到公共互联网;我打算在连接正常工作后进一步锁定 CIDR 组。我很困惑为什么我无法连接到给定我附加的安全组的实例。其他人也“建议”同样的解决方案,显然它对他们有用。鉴于我使用 Terraform 配置的内容,我不确定为什么无法连接到我的 RDS 实例。 有人遇到过这样的问题吗?您能分享一下您的解决方案吗?

amazon-web-services terraform amazon-rds
1个回答
0
投票
true

资源上的 publicly_accessible 属性设置为

aws_db_instance
。该设置控制数据库服务器是否获取公共 IP 地址。目前您的数据库没有公共IP地址,因此只能从VPC内部访问。
您还需要确保 VPC 子网是公有子网。您似乎没有指定任何子网,所以我猜它将使用默认 VPC,默认情况下仅具有公共子网。

© www.soinside.com 2019 - 2024. All rights reserved.