Collecter les journaux AWS Control Tower
Ce document explique comment ingérer les journaux AWS Control Tower dans Google Security Operations. AWS Control Tower permet de surveiller la gouvernance, la conformité et la sécurité de plusieurs comptes AWS. Cette intégration vous permet d'analyser les journaux d'AWS Control Tower pour améliorer la visibilité et le niveau de sécurité.
Avant de commencer
- Assurez-vous de disposer d'une instance Google SecOps.
- Assurez-vous de disposer d'un accès privilégié à AWS.
Configurer le bucket Amazon S3
- 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 une utilisation ultérieure.
- Créez un utilisateur en suivant le 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 Download CSV file (Télécharger le fichier CSV) pour enregistrer la clé d'accès et la clé d'accès secrète pour les utiliser ultérieurement.
- Cliquez sur OK.
- Sélectionnez l'onglet Autorisations.
- Cliquez sur Ajouter des autorisations dans la section Règles d'autorisation.
- Sélectionnez Ajouter des autorisations.
- Sélectionnez Joindre directement des règles.
- Recherchez et sélectionnez les règles AmazonS3FullAccess et CloudWatchLogsFullAccess.
- Cliquez sur Suivant.
- Cliquez sur Ajouter des autorisations.
Configurer CloudTrail dans AWS Control Tower
- Connectez-vous à l'AWS Management Console.
- Accédez à AWS Control Tower.
- Dans la barre de recherche, saisissez CloudTrail, puis sélectionnez-le dans la liste des services.
Cliquez sur Créer un parcours pour créer un parcours.
Spécifiez les paramètres de la piste:
- Nom du parcours: attribuez un nom significatif au parcours (par exemple, ControlTowerTrail).
- Appliquer la trace à toutes les régions: assurez-vous de sélectionner Oui pour Appliquer la trace à toutes les régions.
- Événements de gestion: assurez-vous que les événements Lecture/Écriture sont définis sur Tous.
- Facultatif: Événements de données: activez les événements de données S3 et les événements de données Lambda pour capturer l'activité des données de manière détaillée.
- Facultatif: Validation des fichiers journaux: activez cette option pour vous assurer que les fichiers journaux ne sont pas altérés une fois stockés.
Dans le sélecteur Événement, choisissez d'enregistrer les événements de gestion et les événements de données.
Configurer CloudTrail pour envoyer des journaux à un bucket S3
- Accédez à la console IAM AWS.
- Cliquez sur Rôles.
- Recherchez le rôle que CloudTrail utilise
AWSServiceRoleForCloudTrail
(le rôle est créé automatiquement lorsque vous configurez CloudTrail). - Dans l'onglet Autorisations du rôle, cliquez sur Attacher des stratégies.
- Recherchez
CloudTrailS3DeliveryPolicy
. - Cochez la case située à côté de la règle
CloudTrailS3DeliveryPolicy
. - Cliquez sur Attach policy (Attacher la stratégie).
- Accédez à la console CloudTrail d'AWS.
- Dans la section Storage location (Emplacement de stockage), sélectionnez S3 comme destination des fichiers journaux.
- Sélectionnez le bucket S3 que vous avez créé précédemment.
- Cliquez sur Allow (Autoriser) lorsque vous êtes invité à accorder à CloudTrail l'autorisation d'écrire des journaux dans le bucket de votre choix.
- Vérifiez vos paramètres, puis cliquez sur Créer (ou sur Enregistrer les modifications si vous modifiez un parcours existant).
Configurer un flux dans Google SecOps pour ingérer les journaux AWS Control Tower
- Accédez à SIEM Settings > Feeds (Paramètres du SIEM > Flux).
- Cliquez sur Ajouter.
- Dans le champ Nom du flux, saisissez un nom pour le flux (par exemple, Journaux AWS Control Tower).
- Sélectionnez Amazon S3 comme Type de source.
- Sélectionnez AWS Control Tower comme Type de journal.
- Cliquez sur Suivant.
Spécifiez les valeurs des paramètres d'entrée suivants:
- Region (Région) : région dans laquelle se trouve le bucket Amazon S3.
- URI S3: URI du bucket.
s3://your-log-bucket-name/
- Remplacez
your-log-bucket-name
par le nom réel du bucket.
- Remplacez
- Un URI est: sélectionnez Répertoire ou Répertoire incluant des sous-répertoires.
Options de suppression de la source: sélectionnez l'option de suppression en fonction de vos préférences.
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 des éléments: espace de noms des éléments.
Libellés d'ingestion: libellé à appliquer aux événements de ce flux.
Cliquez sur Suivant.
Vérifiez la configuration de votre nouveau flux dans l'écran Finaliser, puis cliquez sur Envoyer.
Tableau de mappage UDM
Champ du journal | Mappage UDM | Logique |
---|---|---|
awsAccountId | target.user.group_identifiers | ID du compte AWS associé à l'événement. |
digestPublicKeyFingerprint | target.file.sha1 | Empreinte de la clé publique utilisée pour signer le récapitulatif. |
digestPublicKeyFingerprint | target.resource.attribute.labels.value | Empreinte de la clé publique utilisée pour signer le récapitulatif. |
digestS3Bucket | target.resource.name | Nom du bucket S3 dans lequel le récapitulatif est stocké. |
digestS3Object | target.file.full_path | Chemin d'accès à l'objet récapitulatif dans le bucket S3. |
digestSignatureAlgorithm | network.tls.cipher | Algorithme utilisé pour signer le condensé. |
digestSignatureAlgorithm | target.resource.attribute.labels.value | Algorithme utilisé pour signer le condensé. |
digestStartTime | metadata.event_timestamp | Heure de début de la période du récapitulatif. Utilisé comme heure de l'événement si eventTime n'est pas disponible. |
eventCategory | security_result.category_details | Catégorie de l'événement. |
eventID | metadata.product_log_id | ID unique de l'événement. |
eventName | metadata.product_event_type | Nom de l'événement. |
eventName | security_result.summary | Nom de l'événement, utilisé pour générer le résumé des résultats de sécurité. |
eventSource | target.application | Source de l'événement. |
eventTime | metadata.event_timestamp | Heure à laquelle l'événement s'est produit. |
eventType | additional.fields.value.string_value | Le type d'événement. |
logFiles.hashValue | about.file.sha256 | Hachage SHA-256 du fichier journal. |
logFiles.s3Bucket | about.resource.name | Nom du bucket S3 dans lequel le fichier journal est stocké. |
logFiles.s3Object | about.file.full_path | Chemin d'accès à l'objet de fichier journal dans le bucket S3. |
previousDigestHashValue | target.file.sha256 | Hachage SHA-256 du condensé précédent. |
recipientAccountId | target.resource.attribute.labels.value | ID du compte AWS du destinataire de l'événement. |
Records.awsRegion | principal.location.name | Région AWS dans laquelle l'événement s'est produit. |
Records.errorCode | security_result.rule_id | Code d'erreur (le cas échéant) associé à la requête. |
Records.errorMessage | security_result.description | Message d'erreur, le cas échéant, associé à la requête. |
Records.eventCategory | security_result.category_details | Catégorie de l'événement. |
Records.eventID | metadata.product_log_id | ID unique de l'événement. |
Records.eventName | metadata.product_event_type | Nom de l'événement. |
Records.eventName | security_result.summary | Nom de l'événement, utilisé pour générer le résumé des résultats de sécurité. |
Records.eventSource | target.application | Source de l'événement. |
Records.eventTime | metadata.event_timestamp | Heure à laquelle l'événement s'est produit. |
Records.eventType | additional.fields.value.string_value | Le type d'événement. |
Records.requestID | target.resource.attribute.labels.value | ID de la requête. |
Records.requestParameters.groupName | target.group.group_display_name | Nom du groupe, le cas échéant, associé à la requête. |
Records.requestParameters.userName | src.user.userid | Nom de l'utilisateur, le cas échéant, associé à la requête. |
Records.requestParameters.userName | src.user.user_display_name | Nom de l'utilisateur, le cas échéant, associé à la requête. |
Records.responseElements.ConsoleLogin | security_action | Résultat de la tentative de connexion à la console. |
Records.responseElements.ConsoleLogin | security_result.summary | Résultat de la tentative de connexion à la console, utilisé pour générer le résumé des résultats de sécurité. |
Records.sourceIPAddress | principal.hostname | Adresse IP du principal. Utilisé comme nom d'hôte si l'adresse IP n'est pas valide. |
Records.sourceIPAddress | principal.ip | Adresse IP du principal. |
Records.tlsDetails.cipherSuite | network.tls.cipher | Suite de chiffrement utilisée pour la connexion TLS. |
Records.tlsDetails.tlsVersion | network.tls.version | Version TLS utilisée pour la connexion. |
Records.userAgent | network.http.user_agent | User-agent de la requête. |
Records.userIdentity.accessKeyId | additional.fields.value.string_value | ID de clé d'accès utilisé pour la requête. |
Records.userIdentity.accountId | principal.user.group_identifiers | ID de compte AWS de l'utilisateur. |
Records.userIdentity.arn | principal.user.attribute.labels.value | ARN de l'utilisateur. |
Records.userIdentity.arn | target.user.userid | ARN de l'utilisateur. Utilisé comme ID utilisateur si le nom d'utilisateur n'est pas disponible. |
Records.userIdentity.principalId | principal.user.product_object_id | ID principal de l'utilisateur. |
Records.userIdentity.sessionContext.attributes.mfaAuthenticated | principal.user.attribute.labels.value | Indique si l'authentification multifacteur a été utilisée pour la requête. |
Records.userIdentity.sessionContext.sessionIssuer.userName | principal.user.userid | Nom d'utilisateur de l'utilisateur qui a lancé la session. |
Records.userIdentity.type | principal.resource.type | Type d'identité utilisé pour la requête. |
Records.userIdentity.userName | target.user.userid | Le nom d'utilisateur de l'utilisateur. |
- | extensions.auth.mechanism | Définissez-le sur "REMOTE". |
- | metadata.event_type | Définissez cette valeur sur "STATUS_UPDATE", "USER_RESOURCE_ACCESS", "USER_LOGIN" ou "GENERIC_EVENT" en fonction du nom de l'événement. |
- | metadata.log_type | Définissez-le sur "AWS_CONTROL_TOWER". |
- | metadata.product_name | Défini sur "AWS Control Tower". |
- | metadata.vendor_name | Définissez cette valeur sur "AWS". |
- | principal.asset.attribute.cloud.environment | Définissez-le sur "AMAZON_WEB_SERVICES". |
- | security_result.action | Définissez cette valeur sur "ALLOW" ou "BLOCK" en fonction du code d'erreur. |
- | security_result.severity | Définissez-le sur "INFORMATIONAL". |
Modifications
2024-03-17
- Amélioration:
- Mappage de "req.userIdentity.arn" et "req.userIdentity.userName" sur "target.user.userid".
2023-01-04
- Amélioration:
- Initialisation des variables pour éviter la réplication des données dans la boucle For.
2022-12-15
- Amélioration:
- Mappage de "metadata.vendor_name" sur "AWS".
- Mappage de "metadata.product_name" sur "AWS Control Tower".
- Mappage de "metadata.event_type" sur "USER_LOGIN" lorsque "eventName" est "ConsoleLogin".
- Mappage de "security_result.severity" sur "INFORMATIONAL" lorsque "eventName" est "ConsoleLogin".
2022-11-17
- Amélioration:
- Mappage de "req.userIdentity.userName" et "req.userIdentity.sessionContext.sessionIssuer.userName" sur "target.user.id".
- Mappage de "ConsoleLogin:Success" sur "security_result.action".
- Informations sur le port mappées de "sourceIPAddress" à "principal.port".
2022-10-31
- Analyseur nouvellement créé.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.