Auto-generated
This page is generated by terraform-docs at build time from the infra/ repo. Do not edit manually.
Client VPN (SSO / SAML-federated)¶
AWS Client VPN endpoint authenticated against an external SAML identity
provider (Entra ID) with group-scoped authorization rules. Each user signs
in with their own IdP account via the AWS-provided VPN client; the groups
in the SAML memberOf claim decide which destination CIDRs they may reach.
Authorization rules use longest-prefix matching per destination: a rule for a specific CIDR shadows any broader rule, so every specific CIDR must carry a rule for EVERY group that may reach it (the caller builds this matrix).
The endpoint security group is created by the caller and passed in, so an existing certificate-auth endpoint can share it during migration.
Requirements¶
No requirements.
Providers¶
| Name | Version |
|---|---|
| aws | n/a |
Modules¶
No modules.
Resources¶
| Name | Type |
|---|---|
| aws_cloudwatch_log_group.vpn | resource |
| aws_ec2_client_vpn_authorization_rule.this | resource |
| aws_ec2_client_vpn_endpoint.this | resource |
| aws_ec2_client_vpn_network_association.this | resource |
Inputs¶
| Name | Description | Type | Default | Required |
|---|---|---|---|---|
| association_subnet_ids | Subnets to associate the endpoint with (one per AZ; each association is billed hourly) | list(string) |
n/a | yes |
| authorization_rules | Authorization rule matrix: key => { cidr, group_id (IdP group object ID from the memberOf claim; null authorizes all groups), description } | map(object({ |
n/a | yes |
| base_tags | Base tags applied to all resources | map(string) |
n/a | yes |
| client_cidr | CIDR range assigned to VPN clients (must not overlap the VPC CIDR) | string |
n/a | yes |
| dns_servers | DNS servers pushed to clients (the VPC resolver, so private zones resolve) | list(string) |
n/a | yes |
| name_prefix | Resource name prefix, e.g. stage-euc1-core | string |
n/a | yes |
| saml_provider_arn | IAM SAML provider ARN for the VPN enterprise app (federated authentication) | string |
n/a | yes |
| security_group_ids | Security groups applied to the endpoint ENIs (pass the shared vpn_endpoint SG so downstream rules keep working) | list(string) |
n/a | yes |
| self_service_saml_provider_arn | IAM SAML provider ARN for the self-service portal (usually the same app); null disables the portal | string |
null |
no |
| server_certificate_arn | ACM ARN of the VPN server certificate | string |
n/a | yes |
| session_timeout_hours | Maximum VPN session duration in hours (valid: 8, 10, 12, 24) | number |
8 |
no |
| vpc_id | VPC the endpoint attaches to | string |
n/a | yes |
Outputs¶
| Name | Description |
|---|---|
| endpoint_dns_name | DNS name clients connect to |
| endpoint_id | Client VPN endpoint ID — use to download the .ovpn client config |
| log_group_name | CloudWatch log group receiving connection logs (usernames included with SAML auth) |
| self_service_portal_url | Self-service portal URL where users download their VPN client configuration |