Chapitre 5

Niveau 10 — Conformité | Automatisation | CIS Benchmark | Annexes

Conformité RGPD article par article, NIS2, CIS Benchmark Google Workspace. Framework d'automatisation Python, structure du rapport, matrice de priorisation et annexes techniques complètes.

Niveau 10, Outillage & Conformité
RGPD, NIS2, CIS Benchmark, automatisation et rapport final
N10 — Conformité RGPD/NIS2 CIS Benchmark Automatisation Rapport & Annexes

13. Niveau 10 — Conformité Réglementaire

13.1 Conformité RGPD

Le RGPD impose des obligations précises sur la gestion des données personnelles. Un audit Google Workspace doit évaluer la conformité article par article.

Articles RGPD directement impactés par la configuration Workspace :
ArticlePrincipeCe qu'on vérifie
Art. 5(1)(e)Limitation de la conservationFichiers anciens > 3 ans sans politique de purge
Art. 5(1)(f)Intégrité et confidentialitéFichiers publics, partages non contrôlés
Art. 9 & 32Données sensiblesBulletins de paie, données médicales, RH dans Drive non chiffré
Art. 17Droit à l'effacementProcédure offboarding documentée
Art. 25Privacy by designParamètres de partage par défaut restrictifs
Art. 28Sous-traitantsDPA avec Google, Zendesk, Ivalua et autres SaaS
Art. 32Sécurité du traitement2FA, chiffrement, transferts email
Art. 33 & 34Notification de violationProcédure de réponse aux incidents documentée
Art. 35DPIATraitements à risque élevé identifiés
Art. 44-49Transferts internationauxSaaS US — Privacy Shield remplacé, clauses contractuelles
def calculate_gdpr_score(findings):
    """Calcule un score de conformité RGPD basé sur les findings."""
    score = 100
    violations = []

    # Art. 5(1)(e) — Vieux fichiers
    old_ratio = findings.get("drive", {}).get("old_files_ratio", 0)
    if old_ratio > 0.3:
        score -= 10
        violations.append(("Art. 5(1)(e)", "MOYEN", f"{old_ratio:.0%} de fichiers > 3 ans"))

    # Art. 5(1)(f) — Fichiers publics
    public_files = findings.get("drive", {}).get("public_files_count", 0)
    if public_files > 0:
        score -= 15
        violations.append(("Art. 5(1)(f)", "ÉLEVÉ", f"{public_files} fichiers publics"))

    # Art. 32 — Transfert email
    if findings.get("gmail", {}).get("has_forwarding"):
        score -= 20
        violations.append(("Art. 32", "CRITIQUE", "Transfert automatique email vers tiers"))

    # Art. 9 & 32 — Données RH
    sensitive_files = findings.get("drive", {}).get("sensitive_files_count", 0)
    if sensitive_files > 100:
        score -= 20
        violations.append(("Art. 9 & 32", "CRITIQUE", f"{sensitive_files} fichiers sensibles non chiffrés"))

    return max(0, score), violations

13.2 Conformité NIS2

La directive NIS2 s'applique aux entités importantes et essentielles, notamment les ESN/prestataires IT. Les obligations clés à auditer :

Obligation NIS2Vérification WorkspaceOutil d'audit
Politique de sécurité des SIPSSI documentée et appliquéeRevue documentaire
Gestion des incidents (72h)Alert Center + procédure d'escaladeAlert Center API
Continuité d'activitéPCA/PRA documentéRevue documentaire
Sécurité chaîne d'approvisionnementApps OAuth validées, sous-traitants DPAOAuth audit
Contrôle d'accès MFA résistant phishingFIDO2 pour adminsDirectory API
ChiffrementDonnées sensibles isolées et chiffréesDrive API
Journalisation et surveillanceSIEM + rétention logsReports API

13.3 CIS Benchmark Google Workspace

Le Center for Internet Security publie un benchmark de sécurité spécifique à Google Workspace. Voir la Section 16 pour le détail complet.

Score CIS = nombre de contrôles conformes / total des contrôles évalués

Un score < 50% indique une posture de sécurité insuffisante.

---

14. Automatisation et Outillage

14.1 Architecture du framework d'audit

audit-workspace/
├── config.py              # Configuration centralisée
├── auth.py                # Authentification Service Account
├── main.py                # Orchestrateur principal
├── run_full_audit.py      # Exécution de tous les modules
│
├── audit_users.py         # Niveau 1 — IAM
├── audit_gmail.py         # Niveau 2 — Gmail
├── audit_drive.py         # Niveau 3 — Drive (partages)
├── audit_drive_files.py   # Niveau 3 — Drive (fichiers)
├── audit_dns.py           # Niveau 4 — DNS
├── audit_oauth_apps.py    # Niveau 5 — OAuth
├── audit_less_secure.py   # Niveau 1 — Tokens + Recovery
├── audit_devices.py       # Niveau 6 — MDM
├── audit_groups.py        # Niveau 7 — Groupes
├── audit_alerts.py        # Niveau 8 — Alert Center
├── audit_admin_logs.py    # Niveau 8 — Logs admin
├── audit_login.py         # Niveau 8 — Logs connexion
├── audit_calendar.py      # Niveau 2 — Calendar
├── audit_recon.py         # Niveau 9 — Recon passive
├── audit_hibp.py          # Niveau 9 — HIBP
├── audit_darkweb.py       # Niveau 9 — Dark web
├── audit_compliance.py    # Niveau 10 — RGPD/NIS2
│
└── reports/
    ├── AUDIT_SECURITE_YYYYMMDD.md
    ├── extra_modules.json
    ├── levels_1_4.json
    ├── login_audit.json
    ├── calendar_audit.json
    └── drive_files_analysis.json

14.2 Orchestrateur principal

# run_full_audit.py
import os, sys, json
os.environ["PYTHONUTF8"] = "1"

from auth import get_directory_service, get_reports_service
from audit_users import audit_all_users
from audit_gmail import audit_gmail_all_users
from audit_drive import audit_drive_shares
from audit_drive_files import audit_drive_files_deep
from audit_dns import check_all_dns
from audit_oauth_apps import audit_oauth_apps
from audit_less_secure import audit_user_security_settings, audit_user_recovery_info
from audit_devices import audit_mobile_devices
from audit_groups import audit_groups
from audit_alerts import audit_alert_center
from audit_admin_logs import audit_admin_logs
from audit_login import audit_login_activity
from audit_calendar import audit_all_calendars
from audit_recon import check_certificate_transparency, check_mx_blacklists
from audit_compliance import assess_rgpd_compliance, assess_nis2_compliance

def run_full_audit():
    """Exécute l'audit complet en lecture seule."""
    print("[*] Démarrage de l'audit Google Workspace...")

    service = get_directory_service()
    reports_service = get_reports_service()

    # Récupération de la liste des utilisateurs
    users = get_all_users(service)
    emails = [u["primaryEmail"] for u in users]
    print(f"[*] {len(emails)} utilisateurs trouvés")

    results = {}

    # Niveaux 1-8 : APIs Google
    results["users"] = audit_all_users(service)
    results["gmail"] = audit_gmail_all_users(emails)
    results["drive"] = audit_drive_shares(emails)
    results["drive_files"] = audit_drive_files_deep(emails[:10])  # Limiter pour les premiers
    results["dns"] = check_all_dns(DOMAIN)
    results["oauth"] = audit_oauth_apps()
    results["security"] = audit_user_security_settings(emails)
    results["recovery"] = audit_user_recovery_info(emails)
    results["devices"] = audit_mobile_devices(service)
    results["groups"] = audit_groups(service)
    results["alerts"] = audit_alert_center(alert_service)
    results["admin_logs"] = audit_admin_logs(reports_service)
    results["logins"] = audit_login_activity(reports_service)
    results["calendar"] = audit_all_calendars(emails)

    # Niveau 9 : Recon et Threat Intel
    results["recon"] = {
        "crt": check_certificate_transparency(DOMAIN),
        "blacklists": check_mx_blacklists(DOMAIN),
    }

    # Niveau 10 : Conformité
    results["rgpd"] = assess_rgpd_compliance(results)
    results["nis2"] = assess_nis2_compliance()

    # Sauvegarde
    with open(f"reports/audit_{DOMAIN}_{datetime.now().strftime('%Y%m%d')}.json", "w") as f:
        json.dump(results, f, ensure_ascii=False, indent=2, default=str)

    print("[+] Audit terminé.")
    return results

14.3 Gestion des erreurs courantes

ErreurCauseSolution
invalid_grantHorloge désynchroniséeResynchroniser NTP
unauthorized_clientScope absent de la délégationAjouter le scope dans admin.google.com
insufficientPermissionsAPI non activée dans GCPActiver l'API dans Cloud Console
notACalendarUserUtilisateur sans CalendarIgnorer — pas une erreur de sécurité
UnicodeEncodeErrorTerminal Windows cp1252Utiliser python -X utf8 ou PYTHONUTF8=1
403 ForbiddenService Account sans impersonationVérifier la Domain-Wide Delegation

15. Rapport et Feuille de Route

15.1 Structure du rapport

Un rapport d'audit Google Workspace complet doit contenir :

1. Synthèse Exécutive (1 page)
   - Score global de sécurité
   - Top 5 risques immédiats
   - Métriques clés

2. Findings par niveau de sévérité
   - CRITIQUE : action sous 48h
   - ÉLEVÉ : action sous 7 jours
   - MOYEN : action sous 30 jours
   - INFORMATIF : à planifier

3. Audits détaillés par domaine
   - IAM, Gmail, Drive, DNS, OAuth, MDM, Groupes, Logs

4. Conformité
   - RGPD (score + violations par article)
   - NIS2 (matrice d'obligations)
   - CIS Benchmark (score détaillé)

5. Chemins d'attaque (Kill Chains)
   - Scénarios réalistes basés sur les findings

6. Feuille de route de sécurisation
   - Matrice priorité / effort / impact
   - Planning par semaine/mois

7. Annexes
   - Données brutes
   - Méthodologie
   - Outils utilisés

15.2 Scoring de sécurité

def calculate_security_score(findings):
    """Calcule un score de sécurité global de 0 à 100."""
    score = 100
    deductions = {
        "no_2fa_users": (-5, "par utilisateur sans 2FA"),
        "public_files": (-10, "par fichier public"),
        "active_forwarding": (-20, "transfert email actif"),
        "external_sa_writer": (-15, "service account externe WRITER"),
        "super_admin_external_recovery": (-10, "par Super Admin avec récup externe"),
        "php_eol_server": (-8, "serveur PHP EOL exposé"),
    }
    # ... calcul basé sur les findings
    return max(0, score)
Grille d'interprétation du score :
ScoreNiveauSignification
90-100✅ ExcellentPosture mature, risques résiduels mineurs
75-89🟡 BonBonne base, quelques gaps à combler
60-74🟠 AcceptableRisques notables — roadmap requise
40-59🔴 InsuffisantVulnérabilités significatives — actions urgentes
< 40🔴 CritiquePosture dangereuse — intervention immédiate

15.3 Matrice de priorisation

Priorité = f(Impact, Probabilité, Effort de correction)

P1 (Immédiat) : Impact CRITIQUE + Probabilité HAUTE + Effort FAIBLE
P2 (J+7)      : Impact ÉLEVÉ  + Probabilité MOYENNE + Effort MOYEN
P3 (J+30)     : Impact MOYEN  + Probabilité BASSE   + Effort ÉLEVÉ
P4 (J+90)     : Gouvernance, processus, formation

15.4 Chemins d'attaque types

Kill Chain 1 — Exfiltration via forwarding Gmail
Phishing ou insider malveillant
→ Activation d'un transfert automatique Gmail
→ Copie en temps réel de tous les emails vers un tiers
→ Fuite continue de données confidentielles
→ Impact : RGPD, concurrentiel, contractuel
Kill Chain 2 — Account Takeover via email de récupération
Email de récupération présent dans un stealer log
→ Attaquant accède au compte Gmail/Yahoo de récupération
→ Procédure "mot de passe oublié" sur le compte Workspace
→ Bypass de la 2FA via le code envoyé sur l'email compromis
→ Accès complet au compte (emails, Drive, calendrier)
→ Escalade si compte Super Admin
Kill Chain 3 — OAuth Consent Phishing
Email malveillant : "Autorisez cette app pour accéder à votre planning"
→ Utilisateur clique et autorise l'app OAuth
→ L'app obtient les scopes accordés (Gmail, Drive)
→ Exfiltration silencieuse continue
→ Aucune trace dans les logs Gmail standards
→ Persiste même après changement de mot de passe
Kill Chain 4 — Compromission via service account externe
Clé de service account externe volée ou fuitée
→ Accès aux fichiers Drive partagés avec ce SA
→ Lecture de données confidentielles
→ Injection de code malveillant dans des scripts partagés
→ Exécution par un employé → RCE sur son poste
→ Pivot vers le réseau interne

---

16. Référentiel CIS Benchmark Google Workspace

Le CIS Benchmark for Google Workspace définit 40+ contrôles de sécurité. Voici les contrôles les plus critiques avec leur méthode de vérification :

Section 1 — Gestion des Identités et des Accès

CIS IDContrôleMéthode de vérificationCriticité
1.1.1≤ 4 Super Adminsusers.list + filtre isAdmin=trueHaute
1.1.2Comptes admin dédiésVérifier si les admins ont des emails dédiés non-quotidiensHaute
1.1.32FA obligatoire (enforced)Attribut isEnforcedIn2Sv sur tous les comptesHaute
1.1.4Clés FIDO2 pour Super AdminsAbsence de clé hardware = non conformeHaute
1.1.5Email récupération internerecoveryEmail doit se terminer par @domaine.comHaute
1.1.6Politique mot de passe min. 12 car.admin.google.com → Sécurité → Mots de passeMoyenne
1.1.7Expiration mots de passe désactivée si MFA fortDépend de la politique de mot de passeFaible
1.2.1Context-Aware Access pour adminsadmin.google.com → Sécurité → Context-Aware AccessHaute

Section 2 — Google Drive

CIS IDContrôleMéthode de vérificationCriticité
2.1Restreindre partage hors domaineParamètres Drive dans admin.google.comHaute
2.2Désactiver "Anyone with link"API Drive, permissions type=anyoneHaute
2.3Avertissement avant partage externeParamètre admin.google.comMoyenne
2.4Expiration automatique des liensParamètre global DriveMoyenne
2.5Audit Drive régulier documentéProcessus organisationnelFaible
2.6DLP sur données sensiblesGoogle DLP ou solution tierceHaute

Section 3 — Gmail

CIS IDContrôleMéthode de vérificationCriticité
3.1Désactiver transfert automatiqueAPI Gmail, getAutoForwarding()Critique
3.2Désactiver délégation de boîteAPI Gmail, delegates().list()Haute
3.3Anti-spam/phishing renforcéParamètres Gmail avancésHaute
3.4SMTP relay authentifiéadmin.google.com → Gmail → RoutingMoyenne
3.5Désactiver Less Secure AppsAPI, asps().list()Haute

Section 4 — Sécurité Email DNS

CIS IDContrôleMéthodeCriticité
4.1SPF -all (hard fail)dns.resolver.resolve(domain, "TXT")Haute
4.2DKIM configuré (2048 bits)dns.resolver.resolve("google._domainkey.domain", "TXT")Haute
4.3DMARC p=rejectdns.resolver.resolve("_dmarc.domain", "TXT")Critique
4.4DMARC reporting (rua)Présence rua= dans l'enregistrementMoyenne
4.5MX uniquement GoogleVérifier qu'aucun MX parasite n'existeHaute

Section 5 — Applications Tierces

CIS IDContrôleMéthodeCriticité
5.1Liste blanche d'applicationsadmin.google.com → Sécurité → API ControlsHaute
5.2Bloquer apps non vérifiéesParamètre admin.google.comHaute
5.3Revue trimestrielle des OAuthProcessus organisationnelMoyenne
5.4Alertes nouvelles autorisations OAuthAlert Center configHaute

Section 6 — Appareils Mobiles

CIS IDContrôleMéthodeCriticité
6.1MDM activé et enforcedmobiledevices().list()Haute
6.2Chiffrement obligatoireAttribut deviceCompromisedStatusHaute
6.3PIN biométrique obligatoirePolitique MDMHaute
6.4Remote wipe disponibleFonctionnalité MDM WorkspaceMoyenne

Section 7 — Groupes

CIS IDContrôleMéthodeCriticité
7.1Pas de membres externes non justifiésmembers().list() par groupeHaute
7.2Chaque groupe a un ownerVérifier role=OWNER dans membresMoyenne
7.3Restriction création groupes aux adminsParamètre admin.google.comFaible

Section 8 — Journalisation

CIS IDContrôleMéthodeCriticité
8.1Logs d'audit activésReports API accessibleHaute
8.2Rétention ≥ 1 anGoogle Vault ou export SIEMHaute
8.3Alertes sur événements critiquesAlert Center configurationHaute
8.4Export logs vers SIEMBigQuery, Chronicle, SplunkHaute
8.5Procédure réponse incidentsProcessus organisationnel documentéHaute

17. Annexes Techniques

Annexe A — Scopes OAuth par module d'audit

ModuleScopes requis
Utilisateurs & IAMadmin.directory.user.readonly, admin.directory.rolemanagement.readonly
Gmail forwarding/delegationgmail.settings.basic (par utilisateur impersonifié)
Google Drivedrive.readonly
Tokens OAuthadmin.directory.user.security
Appareils MDMadmin.directory.device.mobile.readonly
Groupesadmin.directory.group.readonly, apps.groups.settings
Logs admin/connexionadmin.reports.audit.readonly
Alert Centerapps.alerts
Calendrierscalendar.readonly (par utilisateur impersonifié)

Annexe B — Commandes de référence rapide

# Lancer l'audit complet
python -X utf8 run_full_audit.py

# Lancer un module spécifique
python -X utf8 -c "from audit_users import *; print(audit_all_users())"

# Synchroniser l'horloge (Windows)
w32tm /resync /force

# Vérifier DNS manuellement
python -c "import dns.resolver; print(dns.resolver.resolve('cyrias.com','TXT'))"

# Lister les fichiers publics Drive d'un utilisateur
python -X utf8 -c "
from audit_drive import audit_public_files
from auth import get_drive_service
service = get_drive_service('user@domain.com')
print(audit_public_files(service, 'user@domain.com'))
"

Annexe C — Checklist d'audit condensée

Avant l'audit : Pendant l'audit — Module IAM : Pendant l'audit — Module Gmail : Pendant l'audit — Module Drive : Pendant l'audit — Module DNS : Pendant l'audit — Module OAuth : Pendant l'audit — Module Recon : Post-audit :

Annexe D — Audit Google Chat et Meet

Google Chat est souvent négligé dans les audits alors qu'il constitue un canal de communication sensible et un vecteur de partage de données non maîtrisé.

D.1 Risques spécifiques à Google Chat

RisqueDescriptionGravité
Espaces publicsUn espace Google Chat ouvert à tous les utilisateurs peut contenir des informations sensibles🟠 ÉLEVÉ
Bots non autorisésDes bots OAuth peuvent accéder aux messages et répondre automatiquement🔴 CRITIQUE
Partage de fichiers hors DLPLes pièces jointes partagées dans Chat contournent les règles DLP Drive🟠 ÉLEVÉ
Historique non maîtriséPar défaut, l'historique des messages est conservé indéfiniment🟡 MOYEN
Espaces avec membres externesDes espaces peuvent être partagés avec des utilisateurs hors domaine🟠 ÉLEVÉ

D.2 Vérifications Chat via admin.google.com

Admin Console → Apps → Google Workspace → Chat
→ Paramètres Chat :
   - Autoriser les utilisateurs externes dans les espaces : À restreindre
   - Historique par défaut : Configurer la rétention
   - Bots : Vérifier la liste des bots autorisés
   - Imports de fichiers : Vérifier les types autorisés

D.3 Audit Google Meet

ContrôleParamètreRisque si non configuré
Réunions externesQui peut rejoindre sans authentificationParticipants non autorisés
EnregistrementOù sont stockés les enregistrementsFuites de réunions confidentielles
TranscriptionsQui peut activer les transcriptionsDonnées sensibles transcrites et stockées
Partage d'écranRestrictionsDonnées affichées par erreur enregistrées
Lobby (salle d'attente)Activé ou nonAccès direct sans validation hôte
Recommandation : Activer systématiquement le lobby pour les réunions avec des participants externes. Restreindre l'enregistrement aux utilisateurs authentifiés du domaine.

---

Annexe E — Intégration SIEM et Monitoring Continu

Un audit ponctuel fournit une photographie de la posture de sécurité à un instant T. Pour une protection continue, il est essentiel d'exporter les logs Google Workspace vers un SIEM.

E.1 Options d'export des logs

SolutionMécanismeAvantagesInconvénients
Google ChronicleExport natif WorkspaceIntégration native, UEBA inclusCoût Chronicle
BigQueryExport via Cloud LoggingFlexible, SQLPas d'alertes natives
SplunkApp Google Workspace for SplunkÉcosystème SplunkComplexité configuration
Microsoft SentinelConnecteur Google WorkspaceUnifié si hybridLatence
Elastic SIEMLogstash Google WorkspaceOpen sourceMaintenance
Script Python customReports API en pollingGratuit, flexiblePas temps réel

E.2 Logs prioritaires à collecter

# Applications prioritaires dans l'API Reports
LOG_APPLICATIONS = [
    "login",          # Connexions : succès, échecs, suspicions
    "admin",          # Actions admin : droits, configurations
    "drive",          # Accès fichiers : téléchargements, partages
    "gmail",          # Actions Gmail : forwarding, délégation
    "token",          # Autorisations OAuth
    "groups_enterprise",  # Modifications de groupes
    "meet",           # Réunions enregistrées, participants externes
    "chat",           # Messages (si activé)
    "calendar",       # Partages calendriers, événements sensibles
]

E.3 Règles de détection recommandées

# Exemples de règles SIEM pour Google Workspace

Rule: Super Admin Login Outside Business Hours
  Source: login logs
  Condition: actor.isAdmin = true AND hour(timestamp) NOT IN (8..20)
  Severity: HIGH

Rule: New OAuth Grant with Sensitive Scope
  Source: token logs
  Condition: scope CONTAINS "mail.google.com" OR scope CONTAINS "auth/drive"
  Severity: HIGH

Rule: Gmail Forwarding Activation
  Source: admin logs
  Condition: eventName = "CHANGE_MAIL_FORWARDING_SETTING"
  Severity: CRITICAL

Rule: Multiple Failed Logins
  Source: login logs
  Condition: eventName = "login_failure" AND COUNT > 5 WITHIN 1 hour
  Severity: MEDIUM

Rule: File Shared Publicly
  Source: drive logs
  Condition: eventName = "change_user_access" AND visibility = "people_with_link"
  Severity: HIGH

Rule: Super Admin Role Grant
  Source: admin logs
  Condition: eventName = "ASSIGN_ROLE" AND role = "SUPER_ADMIN"
  Severity: CRITICAL

Rule: Login from New Country
  Source: login logs
  Condition: country NOT IN user_historical_countries AND eventName = "login_success"
  Severity: MEDIUM

E.4 Métriques de maturité SOC pour Workspace

MaturitéCapacitésIndicateurs
Niveau 0Aucune surveillancePas de SIEM, alertes manuelles
Niveau 1Logs collectésRétention > 1 an, accès ponctuel
Niveau 2Alertes basiquesAlert Center + quelques règles SIEM
Niveau 3Détection activeRègles UEBA, corrélation inter-sources
Niveau 4SOC matureSOAR, réponse automatisée, Threat Hunting

Annexe F — Politique de Mots de Passe et Authentification Avancée

F.1 Vérification de la politique de mots de passe

La politique de mots de passe Workspace se configure dans admin.google.com → Sécurité → Authentification → Politique de mots de passe. Elle n'est pas accessible via API, mais les paramètres à vérifier manuellement sont :

ParamètreValeur recommandéeCIS
Longueur minimale12 caractèresCIS 1.1.6
ComplexitéActivée (majuscule, chiffre, symbole)Bonne pratique
RéutilisationBloquer les 10 derniersBonne pratique
ExpirationDésactivée si MFA fort en placeCIS 1.1.7
Force du mot de passeIndicateur activéInformationnel
Pourquoi désactiver l'expiration avec MFA fort ? Les recherches du NIST (SP 800-63B) montrent que l'expiration forcée des mots de passe conduit les utilisateurs à choisir des mots de passe prévisibles (ex: MotDePasse2025!MotDePasse2026!). Avec un MFA résistant au phishing (FIDO2), la résilience vient du second facteur, pas de la rotation du premier.

F.2 Context-Aware Access

Context-Aware Access permet de conditionner l'accès aux services Google à des critères contextuels (localisation géographique, appareil géré, plage horaire).

Cas d'usage recommandés :
Politique 1 : Accès admin depuis appareils gérés uniquement
  Condition : isAdminUser = true
  Exigence : deviceManagementLevel = MANAGED
  Action si non conforme : Bloquer

Politique 2 : Restriction géographique
  Condition : ALL users
  Exigence : country IN [FR, BE, LU, CH, ...pays_autorisés]
  Action si non conforme : Bloquer ou MFA supplémentaire

Politique 3 : Accès données sensibles depuis IP de confiance
  Condition : Access to Vault or Admin Console
  Exigence : ipRange IN [IP_bureau, IP_VPN]
  Action si non conforme : Bloquer

Politique 4 : Horaires de bureau pour accès admin
  Condition : isAdminUser = true
  Exigence : time IN [08:00-20:00 CET] AND dayOfWeek IN [MON-FRI]
  Action : MFA supplémentaire hors plage

F.3 Passkeys et FIDO2

Les passkeys remplacent le mot de passe par une paire de clés cryptographiques stockées sur l'appareil. Elles sont résistantes au phishing car liées au domaine lors de la création.

Déploiement progressif recommandé :
Phase 1 : Déployer les clés physiques FIDO2 (YubiKey 5 NFC) pour les Super Admins
          → Blocage complet de toute connexion sans clé physique

Phase 2 : Activer les passkeys pour les utilisateurs à haut risque
          → Dirigeants, équipes financières, équipes IT

Phase 3 : Déployer les passkeys à l'ensemble des utilisateurs
          → Migration progressive, support utilisateurs
          → Conserver SMS OTP comme fallback temporaire uniquement

Phase 4 : Désactiver SMS OTP et backup codes comme facteurs principaux
          → Uniquement FIDO2, TOTP app, ou passkey

---

Annexe G — Gestion des Incidents liés à Workspace

G.1 Procédure d'urgence — Compte compromis

DÉTECTION
└── Alerte Google, signalement utilisateur, ou détection SOC
        ↓
CONFINEMENT IMMÉDIAT (< 15 minutes)
└── 1. Révoquer toutes les sessions actives
       Admin Console → Utilisateurs → [compte] → Réinitialiser l'authentification
    2. Désactiver le compte temporairement
    3. Révoquer tous les tokens OAuth du compte
    4. Si Super Admin : retirer les privilèges admin temporairement
        ↓
INVESTIGATION (< 2 heures)
└── 1. Analyser les logs Login sur 30 jours
    2. Identifier les IPs, heures, pays de connexion
    3. Vérifier si un forwarding a été activé
    4. Vérifier les nouveaux partages Drive créés
    5. Vérifier les OAuth grants créés
    6. Identifier le vecteur initial (phishing ? credential stuffing ?)
        ↓
REMEDIATION
└── 1. Réinitialiser le mot de passe via canal sécurisé hors-bande
    2. Forcer la reconfiguration de la 2FA
    3. Révoquer définitivement les tokens OAuth suspects
    4. Supprimer les forwardings créés
    5. Vérifier et corriger les partages Drive créés pendant l'incident
        ↓
NOTIFICATION (si violation RGPD avérée)
└── 1. Évaluer si des données personnelles ont été compromises
    2. Si oui : notification CNIL dans les 72h (Art. 33 RGPD)
    3. Si risque élevé pour les personnes : notification individuelle (Art. 34)
    4. Documenter : nature, volume, catégories de données affectées
        ↓
RETOUR D'EXPÉRIENCE
└── 1. Rapport post-incident
    2. Identification de la cause racine
    3. Mesures préventives pour éviter la récurrence
    4. Mise à jour de la politique de sécurité

G.2 Indicateurs de Compromission (IoC) spécifiques Workspace

IoCSignalPriorité
Forwarding Gmail activé vers domaine externeLog admin CHANGE_MAIL_FORWARDING_SETTING🔴 Critique
Connexion depuis pays jamais vuLog login + geoloc🔴 Critique
Token OAuth accordé à app inconnueLog token avec clientId inconnu🔴 Critique
Téléchargement massif DriveLogs Drive > N fichiers en < 1h🔴 Critique
Nouveau Super Admin ajouté sans ticketLog admin ASSIGN_ROLE🔴 Critique
Réinitialisation 2FA sur compte adminAlert Center + log admin🟠 Élevé
Partage "anyone" sur fichier sensibleLog Drive permission change🟠 Élevé
Service account ajouté au DrivePermissions Drive type=serviceAccount🟠 Élevé
Connexion depuis IP Tor ou VPN connuLog login + threat intel🟠 Élevé
Volume anormal d'emails envoyésReports usage API🟡 Moyen

G.3 Commandes d'urgence — Réponse rapide

# Révoquer toutes les sessions d'un utilisateur (lecture + écriture requise)
def revoke_all_sessions(service, user_email):
    """ATTENTION : Action d'écriture — à utiliser en cas d'incident confirmé."""
    service.users().signOut(userKey=user_email).execute()

# Lister les tokens actifs d'un utilisateur (lecture seule)
def list_active_tokens(security_service, user_email):
    tokens = security_service.tokens().list(userKey=user_email).execute()
    return tokens.get("items", [])

# Vérifier le forwarding actif (lecture seule)
def check_active_forwarding(gmail_service, user_email):
    result = gmail_service.users().settings().getAutoForwarding(
        userId=user_email
    ).execute()
    return result if result.get("enabled") else None

---

Annexe H — Scoring et Benchmarking

H.1 Grille de scoring détaillée

La pondération ci-dessous reflète l'impact réel des contrôles sur la posture de sécurité :

ContrôlePoidsRaison
2FA enforced sur tous les comptes15 ptsPrévention account takeover massive
Aucun transfert Gmail actif15 ptsExfiltration en temps réel
Emails récup Super Admins internes12 ptsVecteur takeover compte le plus élevé
DMARC p=reject10 ptsProtection usurpation identité email
Aucun fichier public ("anyone")10 ptsDonnées exposées sans contrôle
Gouvernance OAuth (whitelist)8 ptsConsent phishing
SPF hard fail (-all)7 ptsComplémentaire DMARC
DKIM 2048 bits5 ptsIntégrité emails
Groupes sans membres externes5 ptsFuite d'information via groupes
Logs 1 an + SIEM5 ptsForensics et détection
MDM actif et enforced4 ptsAppareils non gérés
Context-Aware Access4 ptsContrôle contextuel

H.2 Comparaison sectorielle

SecteurScore moyen observéMaturité typique
Finance / Banque72/100Élevée — régulation stricte
Santé58/100Moyenne — effort RGPD récent
ESN / IT61/100Variable — souvent focalisé technique mais pas gouvernance
Industrie49/100Faible — Workspace outil récent
Associations / ONG35/100Très faible — ressources limitées
Startups (< 50 pers.)42/100Faible — croissance rapide, sécurité en retard

H.3 Évolution et suivi dans le temps

Un audit unique n'a que peu de valeur sans suivi. Les indicateurs à suivre trimestriellement :

Tableau de bord trimestriel Google Workspace
┌─────────────────────────────────────────────┐
│ Score global de sécurité         : [  /100] │
│ Conformité CIS Benchmark         : [  %   ] │
│ Emails compromis HIBP (domaine)  : [  /55 ] │
│ Tokens OAuth non revus (> 90j)   : [  #   ] │
│ Partages externes actifs         : [  #   ] │
│ Utilisateurs sans 2FA            : [  #   ] │
│ Super Admins                     : [  #   ] │
│ Alertes Alert Center (30j)       : [  #   ] │
│ Fichiers publics ("anyone")      : [  #   ] │
└─────────────────────────────────────────────┘

Annexe D — Ressources et Références

RessourceURLUsage
CIS Benchmark Google Workspacecisecurity.orgRéférentiel de contrôles
MITRE ATT&CK for Enterpriseattack.mitre.orgTechniques d'attaque
Google Admin SDK Docsdevelopers.google.comDocumentation API
HIBP APIhaveibeenpwned.com/APIVérification breaches
Have I Been Pwned Domainhaveibeenpwned.com/DomainSearchVérification par domaine
crt.shcrt.shCertificate Transparency
Shodan InternetDBinternetdb.shodan.ioExposition Internet (gratuit)
IntelligenceXintelx.ioDarknet/leaks
ANSSI — Guide sécurité GSuitessi.gouv.frRecommandations françaises
Google Workspace Security Checklistworkspace.google.com/securityChecklist officielle Google

Annexe E — Modèle de feuille de route

IDActionPrioritéEffortImpactResponsableDélai
R-01Désactiver transfert Gmail actif🔴 P1FaibleCritiqueAdmin ITJ+0
R-02Retirer emails récup externes (stealer logs)🔴 P1FaibleCritiqueAdmin ITJ+0
R-03Révoquer service accounts Drive externes🔴 P1MoyenCritiqueDSIJ+2
R-04Supprimer fichiers publics🔴 P1FaibleÉlevéAdmin ITJ+3
R-05Désactiver forwarding Gmail globalement🔴 P1FaibleCritiqueAdmin ITJ+3
R-06Réduire Super Admins à 3 max🟠 P2MoyenÉlevéRSSI + DSIJ+7
R-07SPF -all (hard fail)🟠 P2FaibleÉlevéAdmin ITJ+7
R-08Créer comptes admin dédiés🟠 P2MoyenÉlevéDSIJ+14
R-09Activer approbation OAuth🟠 P2MoyenÉlevéAdmin ITJ+14
R-10Révoquer tokens AI sur comptes sensibles🟠 P2FaibleÉlevéAdmin ITJ+7
R-11Assigner owners aux groupes orphelins🟡 P3FaibleMoyenAdmin ITJ+14
R-12Procédure offboarding documentée🟡 P3MoyenMoyenRH + DSIJ+30
R-13Déployer YubiKeys pour Super Admins🟡 P3ÉlevéCritiqueRSSIJ+45
R-14Context-Aware Access (restriction géo)🟡 P3ÉlevéÉlevéAdmin ITJ+45
R-15Activer Google Vault🔵 P4ÉlevéMoyenDSIJ+60
R-16Configurer export logs SIEM🔵 P4ÉlevéÉlevéSOCJ+90
R-17Règles DLP sur données sensibles🔵 P4ÉlevéÉlevéRSSIJ+90
R-18Formation sécurité utilisateurs🔵 P4MoyenÉlevéRSSI + RHJ+60
R-19Revue trimestrielle OAuth🔵 P4FaibleMoyenAdmin ITRécurrent
R-20Audit Drive annuel documenté🔵 P4MoyenMoyenDSIRécurrent

---

Conclusion — Vers une Sécurité Google Workspace Durable

L'audit Google Workspace n'est pas une fin en soi : c'est le point de départ d'un programme de sécurité continu. Les organisations qui traitent cet exercice comme une vérification annuelle ponctuelle resteront exposées entre deux audits. Celles qui intègrent les contrôles automatisés, le monitoring continu et la culture de sécurité dans leur ADN réduiront durablement leur surface d'attaque.

Les cinq leviers de la maturité Workspace

1. L'identité comme périmètre de sécurité Dans un monde où les données résident dans le cloud, le périmètre réseau traditionnel n'existe plus. L'identité — et sa protection via 2FA résistant au phishing, Context-Aware Access, et gestion rigoureuse des comptes — est le nouveau périmètre. Investir prioritairement sur l'IAM est le levier à plus fort retour sur investissement. 2. La gouvernance des données avant la technologie Les technologies de protection (DLP, CASB, SIEM) sont efficaces uniquement si la gouvernance des données est en place : qui a accès à quoi, pour quels usages, pour quelle durée. Un Drive mal gouverné avec 200 000 fichiers partagés ne sera pas sécurisé par un outil — il faut d'abord définir et appliquer des politiques. 3. La détection comme complément à la prévention Aucun contrôle préventif n'est infaillible. La capacité à détecter rapidement une compromission — via des logs centralisés, des alertes bien configurées, et des procédures de réponse testées — réduit considérablement l'impact d'un incident. Le délai moyen de détection d'une compromission est encore de plusieurs semaines dans la majorité des organisations. 4. La sensibilisation des utilisateurs La grande majorité des incidents Workspace commence par une action humaine : cliquer sur un lien de phishing, autoriser une app OAuth malveillante, partager un document par erreur. Les contrôles techniques réduisent la surface d'attaque, mais la sensibilisation régulière des utilisateurs — notamment aux simulations de phishing, aux bonnes pratiques de partage Drive et à la reconnaissance des apps OAuth suspectes — reste indispensable. 5. La continuité de l'amélioration La sécurité n'est pas un état stable : le tenant évolue, de nouveaux utilisateurs arrivent, de nouvelles apps sont autorisées, de nouvelles vulnérabilités sont découvertes. Un audit annuel minimum, un monitoring continu des indicateurs clés, et une revue trimestrielle des accès (OAuth, partages Drive, Super Admins) constituent le rythme minimal d'un programme de sécurité Workspace sérieux.

Priorités universelles — Quel que soit le tenant

Quelle que soit la taille de l'organisation ou son niveau de maturité initial, trois actions produisent le plus grand effet de protection en un minimum de temps :

1. Enforcer la 2FA sur tous les comptes, sans exception
   → Réduit de 99% le risque d'account takeover par credential stuffing

2. Supprimer ou remplacer par des emails internes
   tous les emails de récupération externes sur les comptes admins
   → Élimine le bypass 2FA via récupération de compte

3. Désactiver le transfert automatique de messagerie
   et activer une alerte sur toute future activation
   → Stoppe l'exfiltration silencieuse en temps réel

Ces trois contrôles, appliqués en moins d'une heure par un Super Admin, ferment les trois vecteurs d'attaque les plus fréquents et les plus dommageables sur Google Workspace.

---

Guide d'Audit Google Workspace — Version 1.0 — Mars 2026 Rédigé pour les équipes Sécurité et GRC — Reproduction autorisée à des fins internes