Pour qui : DevOps + équipe réseau, sécurité (liste blanche). Mesure : §5.
1. D'abord, la bonne question : qui sort vers Internet, et par où ?
| Qui appelle Internet | Par où ça sort | Le bon contrôle |
|---|---|---|
| Gemini Enterprise (connecteurs, recherche web, appels d'agents) | Infrastructure Google (SaaS), pas le VPC Acme | Agent Gateway + politiques d'org sur les destinations + IP fixes des connecteurs |
| Agents sur Agent Runtime (géré) | Infrastructure Google | Agent Gateway (agent_to_anywhere_config) |
| Agents Agent Runtime reliés au VPC (interface PSC), Cloud Run avec sortie VPC, VM | VPC Acme | Secure Web Proxy |
C'est la correction 2.6 de la note : un Secure Web Proxy ne voit pas le trafic de Gemini Enterprise. Les deux outils sont complémentaires, pas concurrents.
2. Agent Gateway (recommandé dès qu'il y a des agents ou des outils MCP)
Ce que c'est. Un point de passage géré par Google pour les appels des agents et de Gemini Enterprise vers d'autres agents, outils MCP et API. Refus par défaut : seuls les éléments enregistrés dans Agent Registry sont joignables.
Variables.
enable_agent_gateway = trueCode (60_advanced.tf, déjà dans le socle 06) :
resource "google_network_services_agent_gateway" "egress" {
count = var.enable_agent_gateway ? 1 : 0
name = "${var.app_id}-egress"
location = var.region # app 'eu' -> europe-west1
google_managed {
governed_access_path = "AGENT_TO_ANYWHERE"
}
registries = ["//agentregistry.googleapis.com/projects/${var.project_id}/locations/global"]
}L'app Gemini Enterprise y est reliée par agentGatewaySetting (50_app.tf), et l'agent exemple par
(90_agents_registry.tf) :
dynamic "agent_gateway_config" {
for_each = var.enable_agent_gateway ? [1] : []
content {
agent_to_anywhere_config {
agent_gateway = google_network_services_agent_gateway.egress[0].id
}
}
}Vérifier. Un agent tente d'appeler un outil non enregistré → refusé ; enregistré → accepté.
3. Secure Web Proxy (seulement si des charges sortent par votre VPC)
Ce que c'est. Un proxy HTTPS géré, placé dans votre VPC : les charges l'utilisent comme HTTPS_PROXY, il ne laisse
passer que les domaines de la liste blanche.
Variables.
swp = {
network = "projects/acme-ge-prod/global/networks/agents"
subnetwork = "projects/acme-ge-prod/regions/europe-west1/subnetworks/agents"
proxy_only_cidr = "10.129.0.0/23" # plage libre, réservée au proxy (demande à l'équipe réseau)
address = "10.128.0.99" # IP du proxy dans le sous-réseau des charges
allowed_hosts = ["*.googleapis.com", "api.github.com", "*.acme.example"]
}Code (95_secure_web_proxy.tf), 5 ressources :
| Ressource | Rôle |
|---|---|
google_compute_subnetwork.swp_proxy_only | Sous-réseau réservé au proxy (purpose = "REGIONAL_MANAGED_PROXY"), exigé par Google |
google_network_security_url_lists.allowed | La liste blanche |
google_network_security_gateway_security_policy.swp | La politique (refus implicite de tout le reste) |
google_network_security_gateway_security_policy_rule.allow_listed | session_matcher = "inUrlList(host(), '<liste>')" → ALLOW |
google_network_services_gateway.swp | Le proxy (type = "SECURE_WEB_GATEWAY", routing_mode = "EXPLICIT_ROUTING_MODE", port 443) |
Côté charges. Variables d'environnement HTTPS_PROXY=https://10.128.0.99:443 (valeur : terraform output swp_proxy),
et une règle de pare-feu qui interdit la sortie directe vers Internet (sinon le proxy est contournable).
Vérifier.
curl -x https://10.128.0.99:443 --proxy-insecure https://api.github.com # autorisé -> 200
curl -x https://10.128.0.99:443 --proxy-insecure https://example.org # refusé -> 403Limites assumées.
- Filtrage par nom d'hôte seulement : pas d'inspection TLS (elle exige une autorité de certification, CA Service).
- À valider au premier déploiement : si l'API exige un certificat même sans inspection TLS, ajouter
certificate_urls(Certificate Manager).
Gouvernance de la liste blanche. Ajouter un domaine = une PR validée par la sécurité ; revue trimestrielle.
4. Appliquer et revenir en arrière
terraform plan -out=tfplan # + 5 ressources SWP, + éventuellement Agent GatewayRetour arrière : swp = null / enable_agent_gateway = false. Attention : retirer le proxy coupe les charges qui
l'utilisent ; retirer Agent Gateway rouvre la sortie des agents.