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角色,需完成两步配置:
- 创建角色,信任策略允许
rds.amazonaws.com服务扮演该角色 - 为角色附加AWS托管策略
AmazonRDSDirectoryServiceAccess(该策略包含RDS与AD交互的必要权限) - 在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
相关产品推荐
相关产品推荐

