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

Terraform创建SQL Server RDS实例并启用自管AD Windows身份认证

在Terraform中配置SQL Server RDS实例加入自管AD实现Windows身份认证

1. 需补充的三个参数说明及配置方案

你已明确domain_fqdn和domain_ou,剩余三个必填参数为domain_domain_admin_user、domain_domain_admin_password、domain_iam_role_name,具体配置如下:

- domain_domain_admin_user

自管AD中具备将计算机加入域权限的管理员账号,支持两种格式:

  • 域\用户名:例如 CORP\ad_join_admin
  • 用户主体名称(UPN):例如 ad_join_admin@corp.example.com

- domain_domain_admin_password

对应上述管理员账号的密码,绝对禁止硬编码在代码中,推荐安全传入方式:

  • 定义Terraform敏感变量:variable "domain_admin_pwd" { type = string sensitive = true },部署时通过命令行或环境变量传入
  • 存储在AWS Secrets Manager/HashiCorp Vault,通过Terraform数据源动态拉取

- domain_iam_role_name

授予RDS服务访问AD权限的IAM角色,需完成两步配置:

  1. 创建角色,信任策略允许rds.amazonaws.com服务扮演该角色
  2. 为角色附加AWS托管策略AmazonRDSDirectoryServiceAccess(该策略包含RDS与AD交互的必要权限)
  3. 在Terraform中指定该角色的名称(或ARN,部分Terraform版本支持ARN)

2. 完整Terraform代码示例

# 定义核心变量(敏感数据标记为sensitive)
variable "domain_fqdn" {
  type        = string
  description = "自管AD的FQDN,如 corp.example.com"
}

variable "domain_ou" {
  type        = string
  description = "AD中存放RDS实例的OU路径,如 OU=RDS,DC=corp,DC=example,DC=com"
}

variable "domain_admin_user" {
  type        = string
  description = "AD域管理员账号"
}

variable "domain_admin_pwd" {
  type        = string
  sensitive   = true
  description = "AD域管理员密码"
}

variable "rds_ad_role_name" {
  type        = string
  description = "授权RDS访问AD的IAM角色名称"
}

# 创建RDS访问AD的IAM角色
resource "aws_iam_role" "rds_ad_access" {
  name = var.rds_ad_role_name

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          Service = "rds.amazonaws.com"
        }
      }
    ]
  })
}

# 附加AD访问权限策略
resource "aws_iam_role_policy_attachment" "rds_ad_policy" {
  role       = aws_iam_role.rds_ad_access.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonRDSDirectoryServiceAccess"
}

# 创建带AD集成的SQL Server RDS实例
resource "aws_db_instance" "sqlserver_ad" {
  identifier             = "sqlserver-ad-demo"
  engine                 = "sqlserver-se" # 支持AD集成的SQL Server版本(SE/EE/Express均可)
  engine_version         = "15.00.4298.1.v1"
  instance_class         = "db.m5.large"
  allocated_storage      = 100
  storage_type           = "gp2"
  username               = "local_admin" # 保留本地管理员账号用于应急登录
  password               = var.local_db_pwd # 本地密码同样需安全存储
  vpc_security_group_ids = [aws_security_group.rds_sg.id]
  db_subnet_group_name   = aws_db_subnet_group.rds_subnet.name
  publicly_accessible    = false

  # 配置AD集成启用Windows身份认证
  domain {
    domain_fqdn                = var.domain_fqdn
    domain_ou                  = var.domain_ou
    domain_domain_admin_user   = var.domain_admin_user
    domain_domain_admin_password = var.domain_admin_pwd
    domain_iam_role_name       = aws_iam_role.rds_ad_access.name
  }

  # 基础运维配置
  backup_retention_period = 7
  preferred_backup_window = "03:00-04:00"
  preferred_maintenance_window = "mon:04:00-mon:05:00"
}

3. 关键注意事项

  • 确保RDS实例所在VPC与自管AD的VPC连通(对等连接/同一VPC),且RDS能访问AD的DNS服务器和域控制器
  • 域管理员账号需具备创建计算机对象和加入域的权限
  • 部署完成后,可通过SSMS使用AD账号登录验证身份认证功能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:02:39