> ## Documentation Index
> Fetch the complete documentation index at: https://docs.snakysec.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Permissions graph

# Microsoft Graph Permissions

Scopes requis par l'app Entra utilisée pour l'audit MSSP (app-only, read-only).

## Principe

* **App-only** — Pas de permissions déléguées. L'auth se fait via OIDC Workload Identity Federation (GitLab CI) ou cert X.509 (hors CI).
* **Read-only strict** — Aucune permission `ReadWrite` nécessaire. Toute remédiation passe par le MSSP en sessions séparées.
* **Least privilege** — Un app registration dédié par environnement (dev / prod), jamais partagé avec d'autres outils.

## Permissions Graph (app role)

Base minimale pour les 220 contrôles évalués :

| Scope                                     | Utilisé par                                               |
| ----------------------------------------- | --------------------------------------------------------- |
| `Directory.Read.All`                      | Users, groups, organization settings                      |
| `Policy.Read.All`                         | Authorization policy, authentication methods, CA policies |
| `Policy.Read.ConditionalAccess`           | Évaluation détaillée CA (5.2.2.*, 5.2.3.*)                |
| `RoleManagement.Read.All`                 | Role assignments, PIM eligibility                         |
| `RoleManagement.Read.Directory`           | `roleManagementPolicies` (PIM rules)                      |
| `RoleEligibilitySchedule.Read.Directory`  | PIM eligibility schedules                                 |
| `PrivilegedAccess.Read.AzureAD`           | Legacy PIM, backward compat                               |
| `UserAuthenticationMethod.Read.All`       | Authentication method configurations                      |
| `IdentityRiskEvent.Read.All`              | Sign-in / user risk (CA risk-based)                       |
| `DeviceManagementConfiguration.Read.All`  | Intune device config                                      |
| `DeviceManagementManagedDevices.Read.All` | Intune device inventory                                   |
| `DeviceManagementRBAC.Read.All`           | Intune role assignments                                   |
| `DirectoryRecommendations.Read.All`       | Entra recommendations                                     |
| `Reports.Read.All`                        | Usage & audit reports                                     |
| `ReportSettings.Read.All`                 | Report retention & identifying user                       |
| `SharePointTenantSettings.Read.All`       | SharePoint tenant config                                  |
| `ThreatHunting.Read.All`                  | Defender hunting queries                                  |
| `OnPremDirectorySynchronization.Read.All` | `Test-MsspTenantHybrid` (détection AD Connect)            |

## Exchange Online + Security & Compliance PS

Pour les contrôles CIS-EXO et SCuBA EXO, le runner utilise cmdlets en + de Graph :

* **`Exchange.ManageAsApp`** (Graph app permission) + rôle Exchange Online `View-Only Configuration` assigné au service principal
* **S\&C PS (`Connect-IPPSSession`)** pour les contrôles DLP / Alerts / Audit retention (SCuBA EXO 8.*, 16.*, 17.3) — nécessite `Exchange.ManageAsApp` + rôle S\&C `View-Only Configuration`

## Teams + SharePoint + PnP

* **`MicrosoftTeams`** PowerShell — Auth app-only via cert X.509 (endpoint `MicrosoftTeams`)
* **`PnP.PowerShell`** — SharePoint Online cmdlets cross-platform, auth via cert app registration

## Grant workflow (client)

1. MSSP crée l'app registration dans son tenant cible (ou assiste le client).
2. Ajoute les app roles ci-dessus + **admin consent** global.
3. Assigne `View-Only Configuration` au SPN dans Exchange + S\&C.
4. MSSP installe cert X.509 → upload clé publique dans l'app registration.
5. MSSP stocke clé privée dans Vault (`mssp/data/clients/<slug>`).

Voir [onboarding-client runbook](runbooks/onboarding-client.md) pour le détail opérationnel.

## Détection permissions manquantes

`Test-MsspRequiredPermissions` (dans `Mssp.Auth.psm1`) fait un pre-flight au démarrage du runner. Si un scope manque, les contrôles qui en dépendent remontent `status: "insufficient_perms"` plutôt que `error` — l'artefact v3 est quand même produit et importé.

## Rotation

* **Cert X.509** : rotation annuelle. Les 2 certs (ancien + nouveau) peuvent coexister côté Entra pendant la bascule.
* **Secret client** (si jamais utilisé en dev) : expiration ≤ 90 j, rotation via Vault + redémarrage app.
* **GitLab OIDC** : pas de rotation (federated trust), renforcer le `sub_claim` matcher côté Entra federated credential.

Voir [runbooks/key-rotation.md](runbooks/key-rotation.md).
