Terraform Client VPN marsruudid, kus CIDR-e on rohkem kui alamvõrke
Seostamine, marsruut ja autoriseerimine on eraldi objektid. Seostage iga sihtkoha CIDR seotud alamvõrguga, selle asemel et indekseerida lühemat alamvõrkude loendit.
Sülearvuti ühendub Client VPN-i lõpp-punktiga ja terraform apply nurjub endiselt marsruudi ressursil. Konfiguratsioonis on tavaliselt rohkem sihtkoha CIDR-e kui seotud alamvõrke ning marsruudiplokk valib sihtmärgi indeksi abil. See eeldab, et kaks kogumit on paralleelsed. Need ei ole, ja viga ilmneb rakendamise ajal, mitte ülevaatamise ajal.
Nimetage objekt, mis nurjub
Kaasatud on kolm ressurssi ja igaüks vastab erinevale küsimusele. Seostamine paigutab lõpp-punkti võrguliidese alamvõrku. Marsruut ütleb, milline sihtkoha eesliide toimetatakse sihtalamvõrku. Autoriseerimisreegel ütleb, millised kasutajad pääsevad millisele eesliitele. Marsruut, mis osutab alamvõrgule, mida kunagi ei seostatud, nurjub isegi siis, kui mõlemad objektid on olemas, sest sihtmärk peab kuuluma sellele lõpp-punktile.
Esmalt loetlege seostamised: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.
Pidage meeles VPC kohalikku marsruuti
Esimene seostamine lisab kohaliku marsruudi kogu VPC jaoks, seega on iga alamvõrk selles VPC-s juba kättesaadav ilma marsruudi ressursita. Lisamarsruudid on olemas peered VPC-de, Transit Gateway ühenduste ja on-premises eesliidete jaoks, mida VPC ei oma. Seetõttu võib kolme seostamisega lõpp-punkt õiguspäraselt kanda seitset sihtkoha kirjet.
Loendage enne marsruutide lisamist sihtkohad, mis jäävad VPC-st välja. Kui see arv on väiksem kui CIDR-ide loend, kirjeldab loend alamvõrke, mis ei vaja üldse marsruuti.
Asendage indeks kaardiga
Indeksi mähkimine moodulioperaatorisse vaigistab vea ja säilitab modelleerimisvea. Sihtkoht, kuhu valitud sihtmärgi kaudu ei pääse, ei kanna endiselt liiklust, ükskõik kui puhtalt plaan rakendub. Säilitage selle asemel seos ja laske Terraformil see enne millegi loomist kontrollida. Allolev plokk on illustratiivne ja kasutab pakkuja lõpp-punkti marsruudi argumente.
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."
}
}
}
Kui kaart on seostamiste loendi kõrval, sunnib sihtkoha lisamine otsustama, milline alamvõrk seda kannab. See on vestlus, mille indeks peitis.
Teistsugune tõrge tekitab indeksivea asemel mõttetuid väärtusi. Madalatasemelise konstruktsiooni edastamine sinna, kus oodatakse kõrgema taseme liidest, jätab API loetavad väljad täitmata ja tulemuseks olev CIDR on kasutuskõlbmatu. Terraform näitab sama kuju, kui string saabub sinna, kus oodatakse objekti. Kontrollige pakkuja skeemi argumendi tüübi jaoks.
Tõestage seda kliendist
Enne rakendamist käivitage terraform validate ja plaan tegeliku oleku vastu. Seejärel võrrelge lõpp-punkti sihtvõrkude loendit kaardiga, selle asemel et usaldada õnnestunud apply-t.
Vastuvõtutest on ühendatud klient, mis jõuab igasse kavatsetud eesliitesse.
Autoriseerimisreegel on koht, kus paljud seadistused varakult lõpevad. See on piiratud sihtkoha CIDR-i ja rühmaga ning marsruut ilma vastava autoriseerimiseta tekitab ühendatud kliendi, mis ei jõua eesliitesse. Kontrollige mõlemat objekti iga eesliite jaoks, sest apply, mis loob marsruudi ja unustab reegli, näib täielik. Testige ühe kasutajaga rühma sees ja ühega väljaspool.
Kui üks eesliide nurjub, võrrelge selle marsruudikirjet autoriseerimisreegliga. Puuduv autoriseerimine ja puuduv marsruut näevad kliendilogis sarnased välja ning neid parandatakse erinevates ressurssides.