Ein berbar PC koplar til Client VPN-endepunktet, og terraform apply feilar framleis på ein ruteressurs. Konfigurasjonen har vanlegvis fleire mål-CIDR-ar enn tilknytte subnett, og ruteblokka vel eit mål med ein indeks. Det føreset at dei to samlingane er parallelle. Det er dei ikkje, og feilen viser seg ved brukstid i staden for ved gjennomgang.

Namngi objektet som feilar

Tre ressursar er involverte, og kvar svarar på eit ulikt spørsmål. Tilknytinga plasserer nettverksgrensesnittet til endepunktet i eit subnett. Ruta seier kva målprefiks som vert levert til eit målsubnett. Autorisasjonsregelen seier kva brukarar som kan nå kva prefiks. Ei rute som peikar på eit subnett som aldri vart tilknytt, feilar sjølv om begge objekta finst, fordi målet må høyre til dette endepunktet.

List tilknytingane først: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.

Hugs den lokale ruta til VPC-en

Den første tilknytinga legg til ei lokal rute for heile VPC-en, så kvart subnett i den VPC-en er allereie tilgjengeleg utan ein ruteressurs. Ekstra ruter finst for peira VPC-ar, Transit Gateway-tilkoplingar og on-premises-prefiks som VPC-en ikkje eig. Difor kan eit endepunkt med tre tilknytingar legitimt bera sju målpostar.

Tel måla utanfor VPC-en før du legg til ruter. Viss talet er mindre enn CIDR-lista, skildrar lista subnett som ikkje treng noka rute i det heile.

Byt ut indeksen med eit kart

Å pakke indeksen inn i ein modulo-operator dempar feilen og held på modelleringsfeilen. Eit mål som ikkje kan nåast gjennom det valde målet, ber framleis ingen trafikk, uansett kor reint planet vert brukt. Lagre heller tilhøvet, og lat Terraform kontrollere det før noko vert oppretta. Blokka nedanfor er illustrativ og brukar endepunkt-ruteargumenta til leverandøren.

variable "client_vpn_destinations" {
  description = "Destination CIDR mapped to an associated subnet key"
  type        = map(string)
}

resource "aws_ec2_client_vpn_route" "this" {
  for_each               = var.client_vpn_destinations
  client_vpn_endpoint_id = aws_ec2_client_vpn_endpoint.this.id
  destination_cidr_block = each.key
  target_vpc_subnet_id   = aws_subnet.private[each.value].id

  lifecycle {
    precondition {
      condition     = contains(keys(aws_subnet.private), each.value)
      error_message = "Route target must be a subnet key in the associated map."
    }
  }
}

Når kartet står ved sida av tilknytingslista, tvingar tilføying av eit mål fram ei avgjerd om kva subnett som ber det. Det er samtalen indeksen gøymde.

Ein annan feil gjev meiningslause verdiar i staden for ein indeksfeil. Å senda ein konstruksjon på lågt nivå der ein grensesnitt på høgare nivå er venta, lèt felta API-et les stå ufylte, og det resulterande CIDR-et er ubrukeleg. Terraform viser same forma når ein streng kjem der eit objekt er venta. Kontroller skjemaet til leverandøren for argumenttypen.

Prov det frå ein klient

Køyr terraform validate og eit plan mot ekte tilstand før du brukar. Samanlikn deretter målnettverkslista til endepunktet med kartet i staden for å stole på eit vellukka apply.

Aksepttesten er ein tilkopla klient som når kvart tiltenkte prefiks.

Autorisasjonsregelen er der mange oppsett stoppar tidleg. Han er avgrensa til eit mål-CIDR og ei gruppe, og ei rute utan ei samsvarande autorisasjon gjev ein tilkopla klient som ikkje kan nå prefikset. Kontroller begge objekta for kvart prefiks, fordi eit apply som opprettar ruta og gløymer regelen ser komplett ut. Test med ein brukar innanfor gruppa og ein utanfor.

Når eitt prefiks feilar, samanlikn ruteposten med autorisasjonsregelen. Ein manglande autorisasjon og ei manglande rute ser like ut i klientloggen og vert retta i ulike ressursar.

Relaterte artiklar