如何用Terraform的Google Provider配置带双向TLS的GCP HTTP/2负载均衡器
Google Provider 双向TLS(Mutual TLS)配置指引
1. 证书资源代码正确性验证
你的这段google_certificate_manager_certificate代码本身是合法的,但需要明确几个关键点:
- 这个资源定义的是负载均衡器使用的服务器端证书,用于向客户端证明自身身份,是双向TLS的一部分(另一部分是验证客户端证书)。
- 确保
var.tcp_lb_cert和var.tcp_lb_private_key传入的是标准PEM格式的证书内容和私钥内容,不能有格式错误。 scope = "DEFAULT"表示证书在全局范围内可用,适合跨区域的负载均衡场景,这个配置没问题。
2. 网络安全Client TLS Policy配置
没错,实现客户端证书验证的核心Terraform资源就是google_network_security_client_tls_policy,以下是关键参数的配置说明和示例:
先创建TrustConfig资源
首先需要定义信任的客户端CA证书集合,对应文档里的「创建TrustConfig资源」步骤:
resource "google_network_security_trust_config" "grpc_client_ca" { count = local.create_grpc_load_balancer name = "${local.grpc_load_balancer_name}-client-ca-trust" description = "Trust config for gRPC client CA certificates" trust_store { certificates = [ # 填入客户端CA证书的PEM内容,也可引用Secret Manager中的存储资源 var.grpc_client_ca_pem ] } }
配置Client TLS Policy
接下来创建Client TLS Policy,设置客户端验证规则:
resource "google_network_security_client_tls_policy" "grpc_mtls" { count = local.create_grpc_load_balancer name = "${local.grpc_load_balancer_name}-mtls-policy" description = "Mutual TLS policy for gRPC endpoints" # 客户端验证模式:REQUIRE_AND_ENFORCE 强制要求客户端提供有效证书 client_validation_mode = "REQUIRE_AND_ENFORCE" # 关联上面创建的TrustConfig,指定信任的CA集合 client_validation_trust_config = google_network_security_trust_config.grpc_client_ca[count.index].self_link }
参数说明
clientValidationMode:REQUIRE_AND_ENFORCE:强制验证客户端证书,只有携带信任CA签发的有效证书的请求才会被放行,适合严格安全场景。ALLOW:允许客户端提供证书但不强制;若客户端提供证书则验证有效性,适合需要兼容无证书请求的场景。
clientValidationTrustConfig:必须指向google_network_security_trust_config资源的self_link,该资源定义了哪些CA签发的客户端证书是可信的。
3. 关联到HTTPS负载均衡器
最后需要将Client TLS Policy关联到你的HTTPS目标代理,让负载均衡器启用双向TLS验证:
resource "google_compute_target_https_proxy" "grpc_proxy" { count = local.create_grpc_load_balancer name = "${local.grpc_load_balancer_name}-proxy" url_map = google_compute_url_map.grpc_url_map[count.index].self_link ssl_certificates = [google_certificate_manager_certificate.default[count.index].self_link] # 附加Client TLS Policy client_tls_policy = google_network_security_client_tls_policy.grpc_mtls[count.index].self_link }
内容的提问来源于stack exchange,提问作者Josh G
相关产品推荐
相关产品推荐

