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

# Google Cloud SCC

> Ingérez les findings de Google Cloud Security Command Center dans CaseBender par interrogation automatique (pull) ou webhook de notification (push).

## Présentation

L'intégration Google Cloud Security Command Center (SCC) (**INT-009**) ingère les findings SCC
dans CaseBender et les convertit en alertes (et éventuellement en cas).

<CardGroup cols={2}>
  <Card title="Interrogation automatique (pull)" icon="arrow-right-to-bracket">
    CaseBender extrait de nouveaux findings directement de SCC de façon planifiée
    à l'aide d'un compte de service — sans notification Pub/Sub.
  </Card>

  <Card title="Webhook de notification (push)" icon="bolt">
    En alternative, une notification SCC (via Pub/Sub + Cloud Function) transfère
    les findings vers l'endpoint d'ingestion de CaseBender.
  </Card>
</CardGroup>

<Tip>
  **Recommandé : activez l'interrogation automatique.** Elle ne nécessite qu'un
  compte de service en lecture seule et aucun endpoint entrant. Voir
  [Interrogation automatique](#entrant-interrogation-automatique).
</Tip>

<Note>
  L'interrogation utilise le **SDK Google Cloud officiel**
  (`@google-cloud/security-center`) pour énumérer les findings via l'API v1 de SCC.
</Note>

## Fonctionnalités

| Fonctionnalité                        | Sens    | Description                                                                              |
| ------------------------------------- | ------- | ---------------------------------------------------------------------------------------- |
| **Interrogation des findings (pull)** | Entrant | CaseBender interroge l'API SCC de façon planifiée et ingère les nouveaux findings ACTIVE |
| Ingestion des findings (push)         | Entrant | La notification Pub/Sub transfère les findings vers l'endpoint d'ingestion               |
| Extraction d'observables              | Entrant | IP et domaines issus des indicateurs du finding                                          |
| Étiquetage par catégorie              | Entrant | La catégorie, la classe et le type de ressource du finding deviennent des tags           |

## Prérequis

<Steps>
  <Step title="Créer un compte de service">
    Dans IAM de Google Cloud, créez un compte de service et téléchargez une **clé JSON**.
    Accordez-lui le rôle **Security Center Findings Viewer**
    (`roles/securitycenter.findingsViewer`) au niveau de l'organisation ou du projet.
  </Step>

  <Step title="Recueillir l'ID d'organisation ou de projet">
    Notez votre **ID d'organisation** numérique (recommandé) ou un **ID de projet**.
  </Step>

  <Step title="Sortie réseau">
    L'interrogateur de CaseBender doit atteindre `securitycenter.googleapis.com` et
    `oauth2.googleapis.com`.
  </Step>
</Steps>

## Configurer l'intégration dans CaseBender

<Steps>
  <Step title="Ouvrir le catalogue d'intégrations">
    Allez dans **Settings → Integrations → Create**, puis choisissez **Google Cloud SCC** dans la
    catégorie **Cloud Security**.
  </Step>

  <Step title="Saisir les identifiants GCP">
    | Champ                      | Description                                                                |
    | -------------------------- | -------------------------------------------------------------------------- |
    | Organization ID            | ID d'organisation GCP numérique                                            |
    | Project ID (facultatif)    | Retombe sur les findings au niveau du projet s'il n'y a pas d'organisation |
    | Service Account Key (JSON) | Collez la clé JSON complète                                                |
  </Step>

  <Step title="Activer l'interrogation automatique (recommandé)">
    | Option                        | Effet                                                                                    |
    | ----------------------------- | ---------------------------------------------------------------------------------------- |
    | `pollingEnabled`              | Active l'extraction planifiée des findings                                               |
    | `pollingIntervalMinutes`      | Fréquence d'interrogation (par défaut `5`)                                               |
    | `pollingInitialLookbackHours` | Au premier passage, importe les findings mis à jour dans cette fenêtre (par défaut `24`) |
    | `pollMaxItemsPerRun`          | Limite de sécurité d'éléments par passage (par défaut `500`)                             |
  </Step>

  <Step title="Configurer la création automatique de cas">
    | Option               | Effet                                                             |
    | -------------------- | ----------------------------------------------------------------- |
    | `autoCreateCases`    | Promeut chaque finding en **Cas** (dédupliqué par nom de finding) |
    | `minSeverityForCase` | Ne crée automatiquement des cas qu'à partir de cette sévérité     |
  </Step>
</Steps>

## Entrant (interrogation automatique)

<Steps>
  <Step title="Extraction planifiée">
    À chaque intervalle, CaseBender énumère les findings ACTIVE dont `eventTime` est égal ou
    postérieur au dernier curseur, triés par heure d'événement. Au premier passage, les findings
    dans `pollingInitialLookbackHours` sont importés.
  </Step>

  <Step title="Curseur + déduplication">
    CaseBender avance le curseur jusqu'au `eventTime` le plus récent. Les findings sont
    **dédupliqués par nom de finding**, de sorte que les fenêtres qui se chevauchent ne créent
    jamais de doublons.
  </Step>

  <Step title="Normalisation">
    Chaque finding est normalisé en alerte CaseBender avec observables et tags de catégorie.
  </Step>
</Steps>

<Info>
  L'interrogation s'exécute dans le service d'interrogation en arrière-plan de CaseBender.
  Assurez-vous qu'il peut atteindre `securitycenter.googleapis.com` (directement ou via votre
  proxy).
</Info>

## Entrant (webhook de notification / push)

En alternative, une configuration de notification SCC (Pub/Sub → Cloud Function) peut faire un
POST des findings vers :

```
POST https://<your-casebender-domain>/api/v1/ingest/gcpscc
```

Les requêtes sont authentifiées avec l'**API key** d'intégration dans l'en-tête `x-api-key`. La
forme de charge `{ "finding": { ... }, "resource": { ... } }` est attendue.

## Considérations de sécurité

* **Moindre privilège** — n'accordez que **Security Center Findings Viewer**.
* **Gestion des secrets** — la clé JSON du compte de service est stockée dans les paramètres de
  l'intégration ; faites-la tourner selon la politique de votre organisation et préférez un compte
  de service d'intégration dédié.
* **Réseau** — restreignez la sortie à `securitycenter.googleapis.com` et `oauth2.googleapis.com`.

## Dépannage

<AccordionGroup>
  <Accordion title="La clé du compte de service n'est pas un JSON valide">
    Collez l'intégralité du contenu du fichier de clé JSON, y compris les accolades qui
    l'entourent.
  </Accordion>

  <Accordion title="L'interrogation est activée mais aucun finding n'apparaît">
    Confirmez que le compte de service a le rôle Findings Viewer sur l'organisation/le projet
    configuré et qu'il existe des findings ACTIVE plus récents que le curseur. Au premier passage,
    seuls les findings dans `pollingInitialLookbackHours` sont importés.

    **Assurez-vous que tous les services CaseBender fonctionnent** — avec Docker,
    `docker compose ps` doit afficher les services `worker` et `misp-processor` en `Up`.
  </Accordion>

  <Accordion title="Erreurs PermissionDenied">
    Le compte de service ne dispose pas de `securitycenter.findings.list` sur la portée demandée,
    ou l'ID d'organisation/projet est incorrect.
  </Accordion>
</AccordionGroup>

## Documentation connexe

* [Présentation des intégrations](./introduction.mdx)
* [Documentation Security Command Center](https://cloud.google.com/security-command-center/docs)
