Collecter les journaux MuleSoft Anypoint
Ce document explique comment ingérer des événements de piste d'audit à partir des journaux de la plate-forme MuleSoft Anypoint vers Google Security Operations à l'aide d'AWS S3.
Avant de commencer
Assurez-vous de remplir les conditions suivantes :
- Instance Google SecOps
- Accès privilégié à MuleSoft
- Accès privilégié à AWS
Obtenir l'ID d'organisation MuleSoft
- Connectez-vous à la plate-forme Anypoint.
- Accédez à Menu > Gestion des accès.
- Dans le tableau Groupes d'entreprises, cliquez sur le nom de votre organisation.
- Copiez l'ID de l'organisation (par exemple,
0a12b3c4-d5e6-789f-1021-1a2b34cd5e6f
).
- Vous pouvez également accéder à MuleSoft Business Groups et copier l'ID depuis l'URL.
Configurer un bucket AWS S3 et IAM pour Google SecOps
- Créez un bucket Amazon S3 en suivant ce guide de l'utilisateur : Créer un bucket.
- Enregistrez le Nom et la Région du bucket pour référence ultérieure (par exemple,
mulesoft-audit-logs
). - Créez un utilisateur en suivant ce guide de l'utilisateur : Créer un utilisateur IAM.
- Sélectionnez l'utilisateur créé.
- Sélectionnez l'onglet Informations d'identification de sécurité.
- Cliquez sur Créer une clé d'accès dans la section Clés d'accès.
- Sélectionnez Service tiers comme Cas d'utilisation.
- Cliquez sur Suivant.
- Facultatif : Ajoutez une balise de description.
- Cliquez sur Créer une clé d'accès.
- Cliquez sur Télécharger le fichier CSV pour enregistrer la clé d'accès et la clé d'accès secrète pour référence ultérieure.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles relatives aux autorisations.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez et sélectionnez la règle AmazonS3FullAccess.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Créer l'application connectée MuleSoft
- Connectez-vous à la plate-forme Anypoint.
- Accédez à Gestion des accès > Applications connectées > Créer une application.
- Fournissez les informations de configuration suivantes :
- Nom de l'application : saisissez un nom unique (par exemple,
Google SecOps export
). - Sélectionnez L'application agit en son propre nom (identifiants client).
- Cliquez sur Ajouter des champs d'application → Visionneuse du journal d'audit → Suivant.
- Sélectionnez tous les groupes d'établissements dont vous avez besoin des journaux.
- Cliquez sur Suivant > Ajouter des autorisations.
- Nom de l'application : saisissez un nom unique (par exemple,
- Cliquez sur Save (Enregistrer), puis copiez l'ID client et le code secret du client.
Configurer une stratégie et un rôle IAM pour les importations S3
JSON de la règle (remplacez
mulesoft-audit-logs
par le nom de votre bucket) :{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutAuditObjects", "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": "arn:aws:s3:::mulesoft-audit-logs/*" } ] }
Accédez à la console AWS> IAM> Policies> Create policy> onglet JSON.
Copiez et collez le règlement.
Cliquez sur Suivant > Créer une règle.
Accédez à IAM > Rôles > Créer un rôle > Service AWS > Lambda.
Associez la règle que vous venez de créer.
Nommez le rôle
WriteMulesoftToS3Role
, puis cliquez sur Créer un rôle.
Créer la fonction Lambda
Paramètre | Valeur |
---|---|
Nom | mulesoft_audit_to_s3 |
Durée d'exécution | Python 3.13 |
Architecture | x86_64 |
Rôle d'exécution | Utiliser un routeur existant > WriteMulesoftToS3Role |
Une fois la fonction créée, ouvrez l'onglet Code, supprimez le stub et saisissez le code suivant (
mulesoft_audit_to_s3.py
).#!/usr/bin/env python3 import os, json, gzip, io, uuid, datetime as dt, urllib.request, urllib.error, urllib.parse import boto3 ORG_ID = os.environ["MULE_ORG_ID"] CLIENT_ID = os.environ["CLIENT_ID"] CLIENT_SECRET = os.environ["CLIENT_SECRET"] S3_BUCKET = os.environ["S3_BUCKET_NAME"] TOKEN_URL = "https://anypoint.mulesoft.com/accounts/api/v2/oauth2/token" QUERY_URL = f"https://anypoint.mulesoft.com/audit/v2/organizations/{ORG_ID}/query" def http_post(url, data, headers=None): raw = json.dumps(data).encode() if headers else urllib.parse.urlencode(data).encode() req = urllib.request.Request(url, raw, headers or {}) try: with urllib.request.urlopen(req, timeout=30) as r: return json.loads(r.read()) except urllib.error.HTTPError as e: print("MuleSoft error body →", e.read().decode()) raise def get_token(): return http_post(TOKEN_URL, { "grant_type": "client_credentials", "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET })["access_token"] def fetch_audit(token, start, end): headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } body = { "startDate": f"{start.isoformat(timespec='milliseconds')}Z", "endDate": f"{end.isoformat(timespec='milliseconds')}Z", "limit": 200, "offset": 0, "ascending": False } while True: data = http_post(QUERY_URL, body, headers) if not data.get("data"): break yield from data["data"] body["offset"] += body["limit"] def upload(events, ts): key = f"{ts:%Y/%m/%d}/mulesoft-audit-{uuid.uuid4()}.json.gz" buf = io.BytesIO() with gzip.GzipFile(fileobj=buf, mode="w") as gz: for ev in events: gz.write((json.dumps(ev) + "\n").encode()) buf.seek(0) boto3.client("s3").upload_fileobj(buf, S3_BUCKET, key) def lambda_handler(event=None, context=None): now = dt.datetime.utcnow().replace(microsecond=0) start = now - dt.timedelta(days=1) token = get_token() events = list(fetch_audit(token, start, now)) if events: upload(events, start) print(f"Uploaded {len(events)} events") else: print("No events in the last 24 h") # For local testing if __name__ == "__main__": lambda_handler()
Accédez à Configuration> Variables d'environnement> Modifier> Ajouter une variable d'environnement.
Saisissez les variables d'environnement fournies, en remplaçant par votre valeur.
Clé Exemple de valeur MULE_ORG_ID
your_org_id
CLIENT_ID
your_client_id
CLIENT_SECRET
your_client_secret
S3_BUCKET_NAME
mulesoft-audit-logs
Planifier la fonction Lambda (EventBridge Scheduler)
- Accédez à Configuration> Déclencheurs> Ajouter un déclencheur> EventBridge Scheduler> Créer une règle.
- Fournissez les informations de configuration suivantes :
- Nom :
daily-mulesoft-audit export
. - Modèle de programmation : expression Cron.
- Expression :
0 2 * * *
(s'exécute tous les jours à 02h00 UTC).
- Nom :
- Conservez les autres valeurs par défaut, puis cliquez sur Créer.
Configurer un flux dans Google SecOps pour ingérer les journaux MuleSoft
- Accédez à Paramètres SIEM> Flux.
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple,
MuleSoft Logs
). - Sélectionnez Amazon S3 V2 comme type de source.
- Sélectionnez Mulesoft comme Type de journal.
- Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants :
- URI S3 : URI du bucket
s3://mulesoft-audit-logs/
- Remplacez
mulesoft-audit-logs
par le nom réel du bucket.
- Remplacez
Options de suppression de la source : sélectionnez l'option de suppression de votre choix.
Âge maximal des fichiers : incluez les fichiers modifiés au cours des derniers jours. La valeur par défaut est de 180 jours.
ID de clé d'accès : clé d'accès utilisateur ayant accès au bucket S3.
Clé d'accès secrète : clé secrète de l'utilisateur ayant accès au bucket S3.
Espace de noms de l'élément : espace de noms de l'élément.
Libellés d'ingestion : libellé à appliquer aux événements de ce flux.
- URI S3 : URI du bucket
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux sur l'écran Finaliser, puis cliquez sur Envoyer.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.