Terraform Client VPN-ruter med flere CIDR-er enn subnett
Tilknytning, rute og autorisasjon er separate objekter. Knytt hvert destinasjons-CIDR til et tilknyttet subnett i stedet for å indeksere en kortere subnettliste.
En bærbar PC kobler til Client VPN-endepunktet, og terraform apply feiler fortsatt på en ruteressurs. Konfigurasjonen har vanligvis flere destinasjons-CIDR-er enn tilknyttede subnett, og ruteblokken velger et mål med en indeks. Det forutsetter at de to samlingene er parallelle. Det er de ikke, og feilen viser seg ved brukstid i stedet for ved gjennomgang.
Navngi objektet som feiler
Tre ressurser er involvert, og hver svarer på et forskjellig spørsmål. Tilknytningen plasserer endepunktets nettverksgrensesnitt i et subnett. Ruten sier hvilket destinasjonsprefiks som leveres til et målsubnett. Autorisasjonsregelen sier hvilke brukere som kan nå hvilket prefiks. En rute som peker på et subnett som aldri ble tilknyttet, feiler selv om begge objektene finnes, fordi målet må tilhøre dette endepunktet.
List tilknytningene først: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.
Husk den lokale ruten til VPC-en
Den første tilknytningen legger til en lokal rute for hele VPC-en, så hvert subnett i den VPC-en er allerede tilgjengelig uten en ruteressurs. Ekstra ruter finnes for peered VPC-er, Transit Gateway-tilkoblinger og on-premises-prefikser som VPC-en ikke eier. Derfor kan et endepunkt med tre tilknytninger legitimt bære sju destinasjonsoppføringer.
Tell destinasjonene utenfor VPC-en før du legger til ruter. Hvis det tallet er mindre enn CIDR-listen, beskriver listen subnett som ikke trenger noen rute i det hele tatt.
Erstatt indeksen med et kart
Å pakke indeksen inn i en modulo-operator demper feilen og beholder modelleringsfeilen. En destinasjon som ikke kan nås gjennom det valgte målet, bærer fortsatt ingen trafikk, uansett hvor rent planen brukes. Lagre forholdet i stedet, og la Terraform kontrollere det før noe opprettes. Blokken nedenfor er illustrativ og bruker leverandørens endepunkt-ruteargumenter.
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 siden av tilknytningslisten, tvinger tilføying av en destinasjon fram en beslutning om hvilket subnett som bærer den. Det er samtalen indeksen skjulte.
En annen feil gir meningsløse verdier i stedet for en indeksfeil. Å sende en lavnivå-konstruksjon der et grensesnitt på høyere nivå forventes, lar feltene API-et leser stå ufylte, og det resulterende CIDR-et er ubrukelig. Terraform viser samme form når en streng ankommer der et objekt forventes. Kontroller leverandørens skjema for argumenttypen.
Bevis det fra en klient
Kjør terraform validate og en plan mot ekte tilstand før du bruker. Sammenlign deretter endepunktets målnettverksliste med kartet i stedet for å stole på et vellykket apply.
Aksepttesten er en tilkoblet klient som når hvert tiltenkte prefiks.
Autorisasjonsregelen er der mange oppsett stopper tidlig. Den er begrenset til et destinasjons-CIDR og en gruppe, og en rute uten en samsvarende autorisasjon gir en tilkoblet klient som ikke kan nå prefikset. Kontroller begge objektene for hvert prefiks, fordi et apply som oppretter ruten og glemmer regelen ser komplett ut. Test med én bruker innenfor gruppen og én utenfor.
Når ett prefiks feiler, sammenlign ruteoppføringen med autorisasjonsregelen. En manglende autorisasjon og en manglende rute ser like ut i klientloggen og rettes i forskjellige ressurser.