You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform为Redshift配置安全组报无法使用集群安全组错误

错误原因

报错核心原因是安全组资源类型用错了:

  • aws_redshift_security_group是早年EC2-Classic非VPC网络环境下的遗留Redshift专属安全组资源,当前所有开通了默认VPC的AWS账号都不再支持EC2-Classic架构,VPC内部署的Redshift集群只能绑定标准VPC安全组,无法使用旧版集群安全组,因此触发报错。
  • 你贴的代码里还有两处语法问题:一是skip_final_snapshot = true terraform destroy行多写了无效的terraform destroy内容,该参数仅接受布尔值,多余内容必须删除;二是publicly_accessible参数传了字符串"true",该参数应为布尔类型,不需要加引号。
修正方案
  1. 删除原有aws_redshift_security_group资源,改用VPC标准安全组资源aws_security_group,配置你需要的入站规则
  2. 移除Redshift集群配置中的cluster_security_groups参数,替换为vpc_security_group_ids参数,关联新建的VPC安全组ID即可。

修正后的完整配置参考如下:

# 捞取账号下的默认VPC,如果你使用自定义VPC可以直接替换为对应VPC ID
data "aws_vpc" "default" {
  default = true
}

resource "aws_security_group" "redshift_sg" {
  name        = "redshift-sg"
  description = "Redshift test security group"
  vpc_id      = data.aws_vpc.default.id

  # 配置全流量入站允许0.0.0.0/0,仅个人测试使用
  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    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_redshift_cluster" "redshift" {
  cluster_identifier     = "redshift-cluster-pipeline"
  skip_final_snapshot    = true
  master_username        = "awsuser"
  master_password        = var.db_password
  node_type              = "dc2.large"
  cluster_type           = "single-node"
  publicly_accessible    = true
  iam_roles              = [aws_iam_role.redshift_role.arn]
  vpc_security_group_ids = [aws_security_group.redshift_sg.id]
}

注意:publicly_accessible = true加0.0.0.0/0全通规则会把Redshift集群完全暴露在公网,仅适合个人本地测试场景,生产环境必须严格限制入站源IP段,同时避免使用弱密码。

内容的提问来源于stack exchange,提问作者user14380579

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:51:20