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

Terraform中如何限制aws_directory_service_directory自动创建的安全组规则

修复方案

方案1:自定义安全组传入DS服务,禁用自动创建安全组(最稳妥,推荐)

aws_directory_service_directory 资源本身支持传入 security_group_id 参数,你可以提前自行定义符合CIS要求的安全组,把该安全组ID传给DS资源,这样AWS就不会自动创建默认的宽松安全组,规则完全可控。
示例代码如下:

# 预定义符合CIS合规的DS专用安全组
resource "aws_security_group" "ds_sg" {
  name        = "directory-service-compliant-sg"
  description = "CIS compliant SG for AWS Directory Service"
  vpc_id      = aws_vpc.your_vpc.id

  # 仅开放必要端口,禁止3389对公网开放,按需限制入站源
  ingress {
    from_port   = 53
    to_port     = 53
    protocol    = "udp"
    cidr_blocks = [aws_vpc.your_vpc.cidr_block] # 仅VPC内部访问DNS
  }

  ingress {
    from_port   = 389
    to_port     = 389
    protocol    = "tcp"
    cidr_blocks = [aws_vpc.your_vpc.cidr_block] # 仅VPC内部访问LDAP
  }

  # 按需添加其他DS必需端口,3389端口不添加0.0.0.0/0规则
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  tags = {
    Name = "directory-service-compliant-sg"
  }
}

# 目录服务资源,传入自定义安全组,避免自动生成宽松SG
resource "aws_directory_service_directory" "main" {
  name     = "your-domain.com"
  password = "your-admin-password"
  size     = "Small"

  vpc_settings {
    vpc_id     = aws_vpc.your_vpc.id
    subnet_ids = [aws_subnet.private1.id, aws_subnet.private2.id]
    security_group_id = aws_security_group.ds_sg.id # 显式指定自定义SG
  }
}

该方案优势是所有安全规则都是显式定义,完全符合合规要求,没有隐式资源,Terraform状态管理一致性高。

方案2:修改自动生成的安全组规则(适合已部署DS不想重建的场景)

如果你已经部署了DS实例,不想重建,可以通过Terraform的aws_security_group_rule资源,直接引用DS资源返回的自动生成安全组ID,覆盖原有宽松规则,或添加优先级更高的拒绝规则。
示例代码如下:

# 删除原有默认的1024-65535对公网开放的入站规则
resource "aws_security_group_rule" "remove_default_wide_ingress" {
  type                     = "ingress"
  from_port                = 1024
  to_port                  = 65535
  protocol                 = "tcp"
  cidr_blocks              = ["0.0.0.0/0"]
  security_group_id        = aws_directory_service_directory.main.security_group_id
  lifecycle {
    ignore_changes = [cidr_blocks, from_port, to_port]
  }
}

# 按需添加合规的入站规则,3389仅允许信任源访问
resource "aws_security_group_rule" "allow_rdp_from_trusted" {
  type                     = "ingress"
  from_port                = 3389
  to_port                  = 3389
  protocol                 = "tcp"
  cidr_blocks              = ["192.168.1.0/24"] # 替换为你的信任IP段
  security_group_id        = aws_directory_service_directory.main.security_group_id
}

注意:如果原有默认规则和你定义的移除规则完全匹配,Terraform会执行删除操作,执行计划时会显示destroy 1 security group rule,确认无误后再执行apply即可。

合规性验证

部署完成后可做如下检查:

  • 到EC2控制台安全组页面,查看DS关联的安全组入站规则,确认无0.0.0.0/0对3389端口的允许规则
  • 触发Security Hub重新扫描,确认对应不合规项消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:51:03