Ce document explique comment analyser les journaux d'audit Cloud Logging à l'aide de des requêtes SQL standard BigQuery Analyse de journaux. Les requêtes SQL vous permettent d'agréger et d'analyser vos les journaux d'audit qui fournissent des informations sur les activités d'administration dans vos ressources Google Cloud.
À propos des journaux d'audit
Google Cloud peut écrire quatre types de journaux d'audit services:
Journaux d'audit des activités d'administration : les journaux d'audit des activités d'administration enregistrent les appels d'API et les autres opérations qui modifient la configuration ou les métadonnées des ressources. Ces les journaux sont toujours écrits. vous ne pouvez pas les configurer, les exclure ni les désactiver.
Journaux d'audit des accès aux données: les journaux d'audit des accès aux données enregistrent les appels d'API qui lire la configuration ou les métadonnées des ressources, ainsi que l'API pilotée par l'utilisateur qui créent, modifient ou lisent des données de ressources fournies par l'utilisateur. En effet, l'accès aux données est une opération API fréquente, ces journaux sont sont désactivées par défaut (sauf dans BigQuery).
Journaux d'audit des événements système: ces journaux contiennent des entrées pour Actions Google Cloud qui modifient la configuration des ressources Ces journaux sont générés par les systèmes Google. Ils ne sont pas générés par les actions des utilisateurs. Vous ne pouvez pas configurer, exclure ni désactiver les journaux d'audit pour les événements système.
Journaux d'audit des refus de règles: ces journaux sont enregistrés lorsque un service Google Cloud refuse l'accès à un utilisateur ou à un compte de service en raison d'un non-respect des règles de sécurité. Vous ne pouvez pas désactiver ces journaux, mais vous pouvez utiliser des filtres d'exclusion pour empêcher leur stockage dans Logging.
Pour en savoir plus sur les journaux d'audit, consultez la page Présentation des journaux d'audit. Pour obtenir la liste des services intégrés aux journaux d'audit, consultez Services Google Cloud avec journaux d'audit :
Utiliser les journaux d'audit pour identifier les cas de non-respect des règles ou les activités suspectes
Vous pouvez utiliser les journaux d'audit pour identifier les cas de non-respect des règles ou les activités suspectes:
Pour identifier une éventuelle élévation des privilèges en utilisant Identity and Access Management (IAM) ou le contournement des défenses en désactivant Logging, utilisez les journaux d'audit des activités d'administration. Pour obtenir un exemple de requête qui identifie ce scénario, consultez la section Modifications apportées aux paramètres de journalisation.
Pour identifier l'usage abusif potentiel des API ou des données hébergées dans des services tels que Cloud Storage ou BigQuery, utilisez les journaux d'audit des accès aux données. Pour un exemple de requête qui identifie ce scénario, consultez Identifiez l'utilisation élevée des API par un compte principal.
Pour déterminer à quelle fréquence et par quels utilisateurs les données sont consultées, interrogez tous les journaux d'audit. Pour obtenir un exemple de requête qui identifie ce scénario, consultez Identifier les actions les plus courantes effectuées au cours du mois écoulé
Avant de commencer
Assurez-vous de disposer d'un projet, dossier ou organisation Google Cloud qui génère les journaux d'audit.
Assurez-vous d'avoir accès à une vue du bucket de journaux dans laquelle les journaux d'audit sont acheminées. Le bucket de journaux doit être mis à niveau pour utiliser l'Analyse de journaux. Pour savoir comment créer un bucket de journaux mis à niveau pour utiliser l'Analyse de journaux, consultez Configurer les buckets de journaux.
-
Pour obtenir les autorisations dont vous avez besoin pour créer des récepteurs et afficher les journaux, demandez à votre administrateur de vous accorder le rôles IAM suivants:
-
Rédacteur de configuration des journaux (
roles/logging.configWriter
) sur votre projet -
Lecteur de journaux (
roles/logging.viewer
) sur votre projet
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Selon les journaux d'audit que vous souhaitez afficher, vous aurez peut-être besoin de services des rôles ni des autorisations. Pour en savoir plus sur la définition des rôles IAM, Consultez la section Contrôle des accès avec IAM de Logging. dans la documentation Google Cloud.
-
Rédacteur de configuration des journaux (
Pour utiliser les requêtes de ce document sur la page Analyse de journaux, procédez comme suit : suivantes:
-
Dans la console Google Cloud, accédez à la page Analyse de journaux:
Accéder à l'Analyse de journaux
Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Logging.
Identifiez le nom de la table pour la vue de journal que vous souhaitez interroger.
Pour identifier ce nom, accédez à la liste Vues de journaux. localisez la vue de journal, puis sélectionnez Requête. Le volet Requête contient une requête par défaut, qui inclut le nom de la table de la vue de journal interrogée. Le nom de la table a le le format
project_ID.region.bucket_ID.view_ID
.Pour savoir comment accéder à la requête par défaut, consultez Interroger une vue de journal
Remplacez TABLE_NAME_OF_LOG_VIEW par le nom de la table pour la vue de journal. que vous voulez interroger, puis copiez-la.
Collez la requête dans le volet Requête, puis cliquez sur Exécuter la requête.
-
Exemples de requêtes
Cette section fournit des exemples de requêtes SQL pour interroger les journaux d'audit.
Modifications apportées aux paramètres de journalisation
Pour déterminer quand les journaux d'audit sont désactivés ou lorsque des modifications sont apportées aux valeurs par défaut Paramètres de journalisation, interrogez les journaux d'audit des activités d'administration:
SELECT
receive_timestamp, timestamp AS eventTimestamp,
proto_payload.audit_log.request_metadata.caller_ip,
proto_payload.audit_log.authentication_info.principal_email,
proto_payload.audit_log.resource_name,
proto_payload.audit_log.method_name
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
proto_payload.audit_log.service_name = "logging.googleapis.com"
AND log_id = "cloudaudit.googleapis.com/activity"
Déterminer les actions les plus courantes effectuées au cours du mois dernier
Pour identifier les actions les plus couramment effectuées au cours des 30 derniers jours, Interrogez tous les journaux d'audit:
SELECT
proto_payload.audit_log.method_name,
proto_payload.audit_log.service_name,
resource.type,
COUNT(*) AS counter
FROM
`TABLE_NAME_OF_LOG_VIEW`
WHERE
timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND log_id="cloudaudit.googleapis.com/data_access"
GROUP BY
proto_payload.audit_log.method_name,
proto_payload.audit_log.service_name,
resource.type
ORDER BY
counter DESC
LIMIT 100
La requête précédente recherche tous les journaux d'audit des 30 derniers jours et renvoie les 100 actions les plus fréquentes, avec des informations sur les method_name
, les service_name
, le type de ressource et un compteur des actions effectuées.
Détecter les rôles attribués sur un compte de service
Pour identifier l'usurpation d'identité d'un compte de service ou les rôles attribués à des comptes de service, interrogez les journaux d'audit des activités d'administration :
SELECT
timestamp,
proto_payload.audit_log.authentication_info.principal_email as grantor,
JSON_VALUE(bindingDelta.member) as grantee,
JSON_VALUE(bindingDelta.role) as role,
proto_payload.audit_log.resource_name,
proto_payload.audit_log.method_name
FROM
`TABLE_NAME_OF_LOG_VIEW`,
UNNEST(JSON_QUERY_ARRAY(proto_payload.audit_log.service_data.policyDelta.bindingDeltas)) AS bindingDelta
WHERE
timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND log_id = "cloudaudit.googleapis.com/activity"
AND (
(resource.type = "service_account"
AND proto_payload.audit_log.method_name LIKE "google.iam.admin.%.SetIAMPolicy")
OR
(resource.type IN ("project", "folder", "organization")
AND proto_payload.audit_log.method_name = "SetIamPolicy"
AND JSON_VALUE(bindingDelta.role) LIKE "roles/iam.serviceAccount%")
)
AND JSON_VALUE(bindingDelta.action) = "ADD"
-- Principal (grantee) exclusions
AND JSON_VALUE(bindingDelta.member) NOT LIKE "%@example.com"
ORDER BY
timestamp DESC
La requête précédente recherche les journaux d'audit qui capturent les rôles attribués à un principal sur un compte de service. Le rôle de créateur de jetons du compte de service permet
empruntent l'identité du compte de service. La requête spécifie également une heure
période de 7 jours et exclut les bénéficiaires approuvés (%@example.com
).
Identifier l'utilisation élevée des API par un compte principal
Pour identifier l'utilisation anormalement élevée des API par un compte principal, interrogez tous les journaux d'audit:
SELECT
*
FROM (
SELECT
*,
AVG(counter) OVER (
PARTITION BY principal_email
ORDER BY day
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS avg,
STDDEV(counter) OVER (
PARTITION BY principal_email
ORDER BY day
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS stddev,
COUNT(*) OVER (
PARTITION BY principal_email
RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS numSamples
FROM (
SELECT
proto_payload.audit_log.authentication_info.principal_email,
EXTRACT(DATE FROM timestamp) AS day,
ARRAY_AGG(DISTINCT proto_payload.audit_log.method_name IGNORE NULLS) AS actions,
COUNT(*) AS counter
FROM `TABLE_NAME_OF_LOG_VIEW`
WHERE
timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 60 DAY)
AND proto_payload.audit_log.authentication_info.principal_email IS NOT NULL
AND proto_payload.audit_log.method_name NOT LIKE "storage.%.get"
AND proto_payload.audit_log.method_name NOT LIKE "v1.compute.%.list"
AND proto_payload.audit_log.method_name NOT LIKE "beta.compute.%.list"
GROUP BY
proto_payload.audit_log.authentication_info.principal_email,
day
)
)
WHERE
counter > avg + 3 * stddev
AND day >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
ORDER BY
counter DESC
Pour le compte principal spécifié, principal_email
, la requête calcule la moyenne
le nombre d'appels d'API par jour et l'écart type de ces appels.
Lorsque le nombre moyen d'appels d'API est supérieur à la moyenne cumulée plus
trois fois l'écart type, la requête affiche les éléments suivants :
informations:
- Compteur des actions effectuées.
- Nombre moyen d'actions effectuées par jour.
- Les actions spécifiques effectuées.
Étape suivante
Pour en savoir plus sur l'Analyse de journaux, consultez Analyse de journaux.
Pour obtenir d'autres exemples de requêtes, consultez la page Exemples de requêtes SQL.
Pour découvrir d'autres exemples de requêtes permettant de générer des insights sur la sécurité à partir de vos journaux, consultez le dépôt Community Security Analytics.
Pour savoir comment activer, agréger et analyser vos journaux à l'aide de dans l'Analyse de journaux, consultez Analyse des journaux de sécurité dans Google Cloud