Lesson 5 — Mise en œuvre de la note

Correspondance avec la note de sécurité Acme, mesure par mesure

8 min read

This content is not translated yet. Showing the original version.

Pour qui : tous, et l'audit. Pour chaque mesure : ce que la note demande (résumé), ce que nous mettons en place, en natif puis en Terraform, la preuve (test et journal), et ce qui reste.

La note est classée « Secret & Internal ». Ce document la résume sans la reproduire. Ne pas le diffuser hors de l'équipe projet.


1. Les 10 mesures

Mesure 1 : héberger les agents sur Agent Runtime (ex-Vertex AI Agent Engine)

DemandeAgents IA sur la plateforme gérée de Google plutôt que sur Cloud Run / GKE « maison »
NatifAgent Runtime (console Agent Platform → Déploiements) ; plancher Model Armor appliqué à Agent Platform
Terraform90_agents_registry.tf (agent, identité dédiée, sortie Agent Gateway), 30_ai_guardrails.tf (plancher AI_PLATFORM)
PreuveT08, T09, T10 ; verify_controls.sh ligne « Plancher étendu aux appels Gemini »
ResteMigrer les agents existants (inventaire : mesure 2). Exception encadrée pour les serveurs MCP sur Cloud Run (recommandés par Google pour GE) : privés, enregistrés, déployés par la CI

Pourquoi le plancher compte autant que l'hébergement : héberger sur Agent Runtime ne filtre rien en soi. Model Armor de Gemini Enterprise ne s'applique pas aux agents personnalisés. Deux protections complémentaires : le plugin dans l'agent (défense par conception) et le plancher du projet (filet de sécurité, même si un développeur oublie le plugin).

Mesure 2 : Shadow AI (quarantaine, inventaire, AI-SPM)

DemandeRepérer et mettre en quarantaine les IA non gouvernées ; posture de sécurité IA
NatifCloud Asset Inventory ; politiques d'organisation ; Security Command Center AI Protection
Terraform75_shadow_ai.tf : run.allowedIngress, iam.allowedPolicyMemberDomains, gcp.resourceLocations ; alerte « service public / agent créé »
Scriptshadow_ai_inventory.sh : ressources IA, ressources publiques, ressources sans propriétaire
PreuveT18, T19 ; inventaire mensuel archivé
ResteQuarantaine réseau et Wiz : décisions d'organisation, hors périmètre de l'app

Mesure 3 : Model Armor (Inspect & Block, URL malveillantes, données sensibles)

DemandeFiltrer prompts et réponses, bloquer, détecter les données sensibles
NatifTemplates Model Armor ; réglage Model Armor de l'app ; plancher
Terraform30_ai_guardrails.tf : 2 templates INSPECT_AND_BLOCK, injection/jailbreak, URL, IA responsable, DLP FR (NIR, CNI, passeport, IBAN…), multilingue ; 50_app.tf : FAIL_CLOSED
PreuveT01–T07 ; test_model_armor.sh
Écart avec la notePlus strict : sortie filtrée aussi, mode fermé, détecteurs français. Corrections : §2.1 à §2.5

Mesure 4 : journaux, Access Transparency, Access Approval, SIEM

DemandeJournaux d'accès aux données (dont Vertex AI), AxT, Access Approval, envoi au SIEM
NatifAudit Logs ; Access Transparency (org) ; Access Approval (couvre Gemini Enterprise, Agent Runtime, Model Armor, KMS) ; Log Router
Terraform70_detection.tf (audit + aiplatform, agentregistry), 80_logging.tf (buckets UE, 365 j, accès restreint), 85_siem_access.tf (Pub/Sub → SIEM, Access Approval)
Scriptdaily_report.sh
PreuveT21 ; verify_controls.sh ; journal quotidien
ResteAccess Transparency : activation organisation (support Enhanced/Premium)

Mesure 5 : filtrage de sortie (Secure Web Proxy)

DemandeContrôler les destinations Internet appelées par l'IA
NatifAgent Gateway (sortie gouvernée de GE et des agents, deny par défaut) ; IP fixes des connecteurs ; politiques d'org sur les destinations des connecteurs
Terraform60_advanced.tf (Agent Gateway), 90_agents_registry.tf (agent → gateway), 95_secure_web_proxy.tf (SWP, liste blanche)
PreuveT13 ; journaux Agent Gateway / SWP
CorrectionLe SWP ne voit pas le trafic de Gemini Enterprise : §2.6

Mesure 6 : RAG (droits et contenu indexé)

DemandeRespecter les droits des sources ; éviter l'empoisonnement des documents indexés
NatifConnecteurs fédérés par défaut : les droits de la source s'appliquent à chaque requête
Terraform40_connectors.tf
Scriptscan_before_ingest.py : Model Armor analyse PDF, Word, Excel, PowerPoint, CSV, texte ; quarantaine des fichiers suspects ; fail closed
PreuveT14, T15
LimiteLe script s'applique aux dépôts que l'on alimente (bucket, dossier de publication). Pour les sources fédérées (Drive, SharePoint), le contenu n'est pas copié : la protection repose sur les droits, le filtre de sortie et la confirmation humaine

Mesure 7 : VPC Service Controls

DemandePérimètre anti-exfiltration autour des services IA
NatifPérimètre en dry-run ; niveaux d'accès (Access Context Manager)
Terraform60_advanced.tf : discoveryengine, aiplatform, agentregistry, modelarmor, dlp, cloudkms, secretmanager ; niveau d'accès IP Acme
PreuveT22 ; requête VPC-SC
RestePassage dry-run → appliqué après 2 semaines d'observation ; niveau d'accès « appareil géré » si Endpoint Verification est déployé

Mesure 8 : identité, un projet par domaine, séparation des rôles

DemandeFédération d'identité (Entra/Okta), isolation par domaine, rôles séparés
NatifFournisseur d'identité de l'app ; groupes
Terraform10_identity_access.tf (identity_provider, groupes, séparation sécurité / admins) ; un tfvars par domaine (phase 2, fiche 06 §4)
PreuveT16, T17 ; contrôle « aucun utilisateur individuel »
Décision à prendre§2.7

Mesure 9 : validation humaine des actions

DemandeUn humain confirme toute action qui modifie des données
NatifGemini Enterprise demande confirmation pour les actions et les outils MCP marqués destructifs
CodeAgent exemple : FunctionTool(..., require_confirmation=needs_human) ; serveur MCP Sheets : annotations destructiveHint
PreuveT11, T12

Mesure 10 : Agent Registry et partage

DemandeCatalogue central des agents ; partage encadré
NatifAgent Registry ; partage d'agents désactivé ; partage des compétences sur approbation
Terraform90_agents_registry.tf (viewer / editor), 50_app.tf (fonctionnalités)
Preuveverify_controls.sh ; T19

2. Corrections à apporter à la note

2.1 L'exemple JSON de Model Armor n'est pas valide

Les noms de champs ne sont pas ceux de l'API (enforcement au lieu de filterEnforcement ; raiSettings.hateSpeech au lieu d'une liste raiFilters de {filterType, confidenceLevel}). Copié tel quel, il est refusé. Forme correcte (extrait) :

{
  "filterConfig": {
    "piAndJailbreakFilterSettings": { "filterEnforcement": "ENABLED", "confidenceLevel": "MEDIUM_AND_ABOVE" },
    "maliciousUriFilterSettings":   { "filterEnforcement": "ENABLED" },
    "raiSettings": { "raiFilters": [
      { "filterType": "HATE_SPEECH", "confidenceLevel": "MEDIUM_AND_ABOVE" },
      { "filterType": "DANGEROUS",   "confidenceLevel": "MEDIUM_AND_ABOVE" } ] },
    "sdpSettings": { "advancedConfig": {
      "inspectTemplate": "projects/P/locations/europe/inspectTemplates/ge-donnees-sensibles-fr" } }
  },
  "templateMetadata": { "enforcementType": "INSPECT_AND_BLOCK" }
}

2.2 La configuration « de base » ne voit pas les données françaises

sdpSettings.basicConfig utilise des détecteurs génériques orientés États-Unis (cartes, numéro de sécurité sociale US, identifiants cloud). Ni IBAN, ni NIR, ni CNI. → configuration avancée avec un modèle DLP.

2.3 Pas de masquage dans Gemini Enterprise

Model Armor ne renvoie pas de texte masqué à Gemini Enterprise : une détection bloque l'échange. Formulation à corriger : « détecter et bloquer ».

2.4 Le filtre d'URL ne couvre qu'une partie d'« Echo Leak »

Il bloque les URL connues comme malveillantes (listes Google). Un domaine d'attaquant tout neuf passe. Compléments : test T13 sur l'affichage des images externes, contrôle de sortie (mesure 5), confirmation humaine (mesure 9).

2.5 Model Armor ne protège pas « tous les modèles » automatiquement

Dans Gemini Enterprise, il protège l'assistant, pas les agents personnalisés (ADK, A2A). → plugin dans l'agent + plancher Agent Platform (mesure 1).

2.6 Le Secure Web Proxy ne s'applique pas à Gemini Enterprise

Gemini Enterprise est un service géré par Google : ses connecteurs et son moteur ne sortent pas par le VPC Acme. Le SWP filtre vos charges (agents reliés au VPC, Cloud Run, VM). Pour Gemini Enterprise : Agent Gateway, politiques d'organisation sur les destinations, IP fixes des connecteurs.

2.7 Point de décision : fournisseur d'identité

Avec un fournisseur tiers (Entra ID / Okta via Workforce Identity Federation), les connecteurs Google Workspace (Drive, Gmail, Agenda) ne sont pas pris en charge. Changer de fournisseur plus tard efface l'historique des conversations. → Décision à prendre avant la production, par l'architecture et la sécurité.

2.8 Injection indirecte (documents piégés)

Model Armor filtre la question et la réponse, pas le contenu des documents récupérés au moment de la réponse. D'où l'analyse avant indexation (mesure 6), le filtre de sortie et la confirmation humaine : aucune des trois ne suffit seule.


3. Sources Google

Next