使用AWS CDK部署Client VPN提示缺失双向认证参数的问题求解
问题定位
当前报错与IAM权限配置无关,核心为两处配置错误:
- 向CloudFormation低层资源传递字典参数时,未适配CloudFormation的键名规则。CDK中以
Cfn开头的低层资源类,会将传入的字典直接透传至最终合成的CloudFormation模板,不会自动将Python习惯的snake_case键名转换为CloudFormation要求的小驼峰(camelCase)格式。你代码中使用的mutual_authentication、client_root_certificate_chain_arn键名,与CloudFormation定义的参数名不匹配,会被服务端直接忽略,导致实际发送的创建请求中缺失双向认证的核心配置,最终触发MissingParameter报错。 - 证书变量的命名与实际赋值逻辑错位,易引发后续配置混淆。
为什么执行
cdk diff没有返回错误?因为CDK的diff阶段仅做基础结构校验,不会对透传字典的内部键名做CloudFormation Schema匹配校验,直到deploy阶段CloudFormation收到API请求、解析参数时才会检测到必填配置缺失。
配置调整步骤
- 重构证书变量命名,避免用途与值错位:
# 服务端证书:用于VPN端点向连接客户端证明自身身份 vpn_server_cert = certificate_manager.Certificate.from_certificate_arn( self, "VpnServerCert", self.cert_arn, # 你的ACM中存储的服务端证书ARN ) # 客户端根CA证书:用于双向认证阶段校验客户端提交的证书合法性 vpn_client_root_cert = certificate_manager.Certificate.from_certificate_arn( self, "VpnClientRootCert", self.client_arn, # 你的ACM中导入的客户端根CA证书ARN ) - 修正认证选项的键名,完全匹配CloudFormation资源Schema:
原错误配置:
修正后正确配置:authentication_options=[{ "type": "certificate-authentication", "mutual_authentication": { "client_root_certificate_chain_arn": client_cert.certificate_arn } }]authentication_options=[{ "type": "certificate-authentication", "mutualAuthentication": { "clientRootCertificateChainArn": vpn_client_root_cert.certificate_arn } }] - 同步修正Endpoint的服务端证书参数,匹配重命名后的变量:
server_certificate_arn=vpn_server_cert.certificate_arn, - 前置校验要求:双向认证场景下使用的客户端根证书,必须是导入到ACM的自签CA根证书,不可使用公有CA自动签发的服务器证书,否则后续客户端连接时会触发证书校验失败。
补充注意事项
- 所有传递给
Cfn类低层资源的字典参数,键名必须严格参考CloudFormation的资源Schema定义,不可使用Python习惯的snake_case命名,否则会出现配置被静默忽略、deploy阶段才触发报错的问题。 - 当
splitTunnel配置为False时,所有客户端流量都会经VPN端点转发,需确保关联的目标子网具备公网路由能力,否则会出现VPN连通但无法访问互联网的问题。
内容的提问来源于stack exchange,提问作者Paul Jurczyk
相关产品推荐
相关产品推荐

