Collecter les journaux d'audit CircleCI

Compatible avec :

Cet analyseur extrait les champs des journaux d'audit CircleCI aux formats CSV et JSON, et les transforme en modèle de données unifié (UDM). Il gère les deux formats, effectue des transformations et des enrichissements de données, et mappe les champs extraits à leurs champs UDM correspondants dans l'objet event. Il se concentre sur les actions utilisateur, l'accès aux ressources et les événements de mise à jour, en les catégorisant et en renseignant les champs UDM pertinents tels que principal, target, network et metadata.

Avant de commencer

Assurez-vous de remplir les conditions préalables suivantes :

  • Instance Google SecOps.
  • Accès privilégié à CircleCI.

Configurer des flux

Il existe deux points d'entrée différents pour configurer les flux dans la plate-forme Google SecOps :

  • Paramètres SIEM> Flux
  • Plate-forme de contenu > Packs de contenu

Configurer des flux à partir de Paramètres SIEM > Flux

Pour configurer un flux, procédez comme suit :

  1. Accédez à Paramètres SIEM > Flux.
  2. Cliquez sur Add New Feed (Ajouter un flux).
  3. Sur la page suivante, cliquez sur Configurer un seul flux.
  4. Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux CircleCI).
  5. Sélectionnez Webhook comme type de source.
  6. Sélectionnez CircleCI comme Type de journal.
  7. Cliquez sur Suivant.
  8. Facultatif : Spécifiez les valeurs des paramètres d'entrée suivants :
    • Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que \n.
    • Espace de noms de l'élément : espace de noms de l'élément.
    • Libellés d'ingestion : libellé appliqué aux événements de ce flux.
  9. Cliquez sur Suivant.
  10. Vérifiez la configuration du flux sur l'écran Finaliser, puis cliquez sur Envoyer.
  11. Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.
  12. Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez générer une nouvelle clé secrète, mais l'ancienne deviendra obsolète.
  13. Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier cette URL de point de terminaison dans votre application cliente.
  14. Cliquez sur OK.

Configurer des flux depuis le Hub de contenu

Indiquez les valeurs des champs suivants :

  • Délimiteur de fractionnement : délimiteur utilisé pour séparer les lignes de journaux, tel que \n.

Options avancées

  • Nom du flux : valeur préremplie qui identifie le flux.
  • Type de source : méthode utilisée pour collecter les journaux dans Google SecOps.
  • Espace de noms de l'élément : espace de noms associé au flux.
  • Libellés d'ingestion : libellés appliqués à tous les événements de ce flux.

  • Cliquez sur Générer une clé secrète pour générer une clé secrète permettant d'authentifier ce flux.

  • Copiez et stockez la clé secrète. Vous ne pourrez plus afficher cette clé secrète. Si nécessaire, vous pouvez regénérer une clé secrète, mais cette action rend la clé secrète précédente obsolète.

  • Dans l'onglet Détails, copiez l'URL du point de terminaison du flux à partir du champ Informations sur le point de terminaison. Vous devez spécifier l'URL de ce point de terminaison dans votre application cliente.

Créer une clé API pour le flux de webhook

  1. Accédez à la consoleGoogle Cloud  > Identifiants.

    Accéder à "Identifiants"

  2. Cliquez sur Créer des identifiants, puis sélectionnez Clé API.

  3. Restreignez l'accès à la clé API à l'API Google Security Operations.

Spécifier l'URL du point de terminaison

  1. Dans votre application cliente, spécifiez l'URL du point de terminaison HTTPS fournie dans le flux de webhook.
  2. Activez l'authentification en spécifiant la clé API et la clé secrète dans l'en-tête personnalisé au format suivant :

    X-goog-api-key = API_KEY
    X-Webhook-Access-Key = SECRET
    

    Recommandation : Spécifiez la clé API en tant qu'en-tête au lieu de la spécifier dans l'URL.

  3. Si votre client de webhook n'accepte pas les en-têtes personnalisés, vous pouvez spécifier la clé API et la clé secrète à l'aide de paramètres de requête au format suivant :

    ENDPOINT_URL?key=API_KEY&secret=SECRET
    

    Remplacez les éléments suivants :

    • ENDPOINT_URL : URL du point de terminaison du flux.
    • API_KEY : clé API pour l'authentification auprès de Google SecOps.
    • SECRET : clé secrète que vous avez générée pour authentifier le flux.

Configurer un webhook dans CircleCI

  1. Connectez-vous à l'interface Web CircleCI.
  2. Sélectionnez le projet à partir duquel vous souhaitez ingérer les journaux.
  3. Cliquez sur Paramètres du projet.
  4. Sélectionnez Webhooks.
  5. Cliquez sur Add Webhook (Ajouter un Webhook).
  6. Spécifiez les valeurs des paramètres d'entrée suivants :

    • Nom du Webhook : indiquez un nom descriptif (par exemple, Google SecOps).
    • URL du point de terminaison : saisissez le <ENDPOINT_URL> du point de terminaison de l'API Google SecOps.
    • Événements : sélectionnez les événements CircleCI qui doivent déclencher le webhook (par exemple, sélectionnez workflow-completed pour envoyer des données une fois un workflow terminé).
  7. Cliquez sur Enregistrer pour créer le webhook.

Table de mappage UDM

Champ de journal Mappage UDM Logique
account.id read_only_udm.about.resource.attribute.labels.value La valeur de account.id du journal brut est attribuée au champ UDM read_only_udm.about.resource.attribute.labels.value où la clé correspondante est account_id.
action read_only_udm.metadata.product_event_type La valeur de action du journal brut est attribuée au champ UDM read_only_udm.metadata.product_event_type.
actor.id read_only_udm.principal.user.product_object_id La valeur de actor.id du journal brut est attribuée au champ UDM read_only_udm.principal.user.product_object_id.
actor.name read_only_udm.principal.user.userid Le préfixe "github: " est supprimé du champ actor.name dans le journal brut. La valeur restante est attribuée au champ UDM read_only_udm.principal.user.userid. Si actor.name existe dans le journal brut, la valeur USER_RESOURCE_UPDATE_CONTENT est attribuée à read_only_udm.metadata.event_type. Sinon, USER_RESOURCE_ACCESS est attribué.
id read_only_udm.metadata.product_log_id La valeur de id du journal brut est attribuée au champ UDM read_only_udm.metadata.product_log_id. L'analyseur définit read_only_udm.metadata.log_type sur CIRCLECI. L'analyseur définit read_only_udm.metadata.product_name sur CIRCLECI. L'analyseur définit read_only_udm.metadata.vendor_name sur CIRCLECI.
occurred_at read_only_udm.metadata.event_timestamp La valeur de occurred_at du journal brut est analysée en tant qu'horodatage et attribuée au champ UDM read_only_udm.metadata.event_timestamp.
organization.name read_only_udm.target.administrative_domain Le préfixe "github: " est supprimé du champ organization.name dans le journal brut. La valeur restante est attribuée au champ UDM read_only_udm.target.administrative_domain.
payload.job.id read_only_udm.about.resource.attribute.labels.value La valeur de payload.job.id du journal brut est attribuée au champ UDM read_only_udm.about.resource.attribute.labels.value, où la clé correspondante est job_id.
payload.job.job_name read_only_udm.about.resource.attribute.labels.value La valeur de payload.job.job_name du journal brut est attribuée au champ UDM read_only_udm.about.resource.attribute.labels.value, où la clé correspondante est job_name.
payload.job.job_status read_only_udm.about.resource.attribute.labels.value La valeur de payload.job.job_status du journal brut est attribuée au champ UDM read_only_udm.about.resource.attribute.labels.value, où la clé correspondante est job_status.
payload.workflow.id read_only_udm.about.resource.attribute.labels.value La valeur de payload.workflow.id du journal brut est attribuée au champ UDM read_only_udm.about.resource.attribute.labels.value, où la clé correspondante est workflow_id.
request.id read_only_udm.network.session_id La valeur de request.id du journal brut est attribuée au champ UDM read_only_udm.network.session_id.
scope.id read_only_udm.about.resource.attribute.labels.value La valeur de scope.id du journal brut est attribuée au champ UDM read_only_udm.about.resource.attribute.labels.value, où la clé correspondante est scope_id. L'analyseur définit initialement sec_action sur BLOCK. Si le champ success du journal brut est défini sur "true", sec_action est remplacé par ALLOW. La valeur de sec_action est ensuite attribuée au champ UDM read_only_udm.security_result.action.
target.id read_only_udm.target.resource.product_object_id La valeur de target.id du journal brut est attribuée au champ UDM read_only_udm.target.resource.product_object_id.
target.name read_only_udm.target.resource.name Le préfixe "github: " est supprimé du champ target.name dans le journal brut. La valeur restante est attribuée au champ UDM read_only_udm.target.resource.name. L'analyseur définit read_only_udm.target.resource.resource_type sur STORAGE_OBJECT.
version read_only_udm.target.resource.attribute.labels.value La valeur de version du journal brut est convertie en chaîne et attribuée au champ UDM read_only_udm.target.resource.attribute.labels.value, où la clé correspondante est version.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.