Trasy Terraform Client VPN s viac CIDR ako podsietí
Priradenie, trasa a autorizácia sú samostatné objekty. Namapujte každý cieľový CIDR na priradenú podsieť namiesto indexovania kratšieho zoznamu podsietí.
Notebook sa pripojí ku koncovému bodu Client VPN a terraform apply stále zlyháva na prostriedku trasy. Konfigurácia zvyčajne obsahuje viac cieľových CIDR než priradených podsietí a blok trasy vyberá cieľ pomocou indexu. To predpokladá, že obe kolekcie sú paralelné. Nie sú a zlyhanie sa prejaví pri aplikácii, nie pri revízii.
Pomenujte objekt, ktorý zlyháva
Zúčastňujú sa tri prostriedky a každý odpovedá na inú otázku. Priradenie umiestňuje sieťové rozhranie koncového bodu do podsiete. Trasa hovorí, ktorý cieľový prefix sa doručuje cieľovej podsieti. Pravidlo autorizácie hovorí, ktorí používatelia môžu dosiahnuť ktorý prefix. Trasa ukazujúca na podsieť, ktorá nebola nikdy priradená, zlyhá aj vtedy, keď oba objekty existujú, pretože cieľ musí patriť tomuto koncovému bodu.
Najprv vypíšte priradenia: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.
Pamätajte na lokálnu trasu VPC
Prvé priradenie pridá lokálnu trasu pre celé VPC, takže každá podsieť v tomto VPC je už dostupná bez prostriedku trasy. Ďalšie trasy existujú pre prepnuté VPC, pripojenia Transit Gateway a on-premises prefixy, ktoré VPC nevlastní. Preto koncový bod s tromi priradeniami môže legitímne niesť sedem cieľových záznamov.
Pred pridaním trás spočítajte ciele, ktoré ležia mimo VPC. Ak je tento počet menší ako zoznam CIDR, zoznam opisuje podsiete, ktoré nepotrebujú žiadnu trasu.
Nahraďte index mapou
Zabalenie indexu do operátora modulo utíši chybu a zachová chybu modelovania. Cieľ, ku ktorému sa nedá dostať cez zvolený cieľ, stále nenesie žiadnu prevádzku, nech sa plán aplikuje akokoľvek čisto. Namiesto toho uložte vzťah a nechajte Terraform, aby ho skontroloval skôr, než sa čokoľvek vytvorí. Blok nižšie je ilustratívny a používa argumenty trasy koncového bodu od poskytovateľa.
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."
}
}
}
Keď je mapa vedľa zoznamu priradení, pridanie cieľa vynúti rozhodnutie, ktorá podsieť ho nesie. To je rozhovor, ktorý index skrýval.
Iná porucha vytvára nezmyselné hodnoty namiesto chyby indexu. Odovzdanie nízkoúrovňovej konštrukcie tam, kde sa očakáva rozhranie vyššej úrovne, nechá polia, ktoré API čítanie, nevyplnené a výsledný CIDR je nepoužiteľný. Terraform ukazuje rovnaký tvar, keď reťazec dorazí tam, kde sa očakáva objekt. Skontrolujte schému poskytovateľa pre typ argumentu.
Dokážte to z klienta
Pred aplikovaním spustite terraform validate a plán proti skutočnému stavu. Potom porovnajte zoznam cieľových sietí koncového bodu s mapou namiesto dôvery v úspešný apply.
Prijímací test je pripojený klient, ktorý dosiahne každý zamýšľaný prefix.
Pravidlo autorizácie je miesto, kde sa mnohé nastavenia zastavia skoro. Je obmedzené na cieľový CIDR a skupinu a trasa bez zodpovedajúcej autorizácie vytvorí pripojeného klienta, ktorý sa k prefixu nedostane. Pre každý prefix skontrolujte oba objekty, pretože apply, ktorý vytvorí trasu a zabudne pravidlo, vyzerá hotový. Otestujte s jedným používateľom v skupine a jedným mimo nej.
Keď jeden prefix zlyhá, porovnajte jeho záznam trasy s pravidlom autorizácie. Chýbajúca autorizácia a chýbajúca trasa vyzerajú v klientskom logu podobne a opravujú sa v rôznych prostriedkoch.