您可以在「Observability Analytics」頁面執行 BigQuery 標準 SQL 查詢,匯總及分析 Cloud Logging 稽核記錄。分析稽核記錄有助於監控管理活動、追蹤資料存取情形,以及找出Google Cloud 資源中違反政策或可疑的活動。
關於稽核記錄
Google Cloud服務可寫入四種稽核記錄:
管理員活動稽核記錄:管理員活動稽核記錄會記錄 API 呼叫,或修改資源設定或中繼資料的其他動作。系統一律會寫入這些記錄,您無法設定、排除或停用。
資料存取稽核記錄:資料存取稽核記錄會記載讀取資源設定或中繼資料的 API 呼叫,以及建立、修改或讀取使用者所提供資源資料的使用者驅動 API 呼叫。由於存取資料是常見的 API 作業,因此這些記錄預設為停用 (BigQuery 除外)。
系統事件稽核記錄:系統事件稽核記錄包含Google Cloud 動作的記錄項目,這些動作會修改資源設定。這些記錄是由 Google 系統產生,而非由使用者動作產生。您無法設定、排除或停用系統事件稽核記錄。
政策遭拒稽核記錄:當 Google Cloud 服務因違反安全性政策而拒絕使用者或服務帳戶的存取要求時,系統會記錄這類事件。這些記錄無法停用,但您可以使用排除篩選器,防止這些記錄儲存在 Logging 中。
如要進一步瞭解稽核記錄,請參閱「稽核記錄總覽」。如要查看與稽核記錄整合的服務清單,請參閱「Google Cloud 具備稽核記錄的服務」。
使用稽核記錄找出違反政策或可疑活動
您可以使用稽核記錄找出違反政策或可疑的活動:
如要找出可能透過 Identity and Access Management (IAM) 提權,或停用 Logging 來規避防禦措施的行為,請使用管理員活動稽核記錄。如需識別這種情況的查詢範例,請參閱「Logging 設定變更」。
如要找出可能濫用 API 的行為,或託管於 Cloud Storage 或 BigQuery 等服務中的資料,請使用資料存取稽核記錄。如需找出這種情況的查詢範例,請參閱「找出 API 使用量偏高的主體」。
如要找出資料存取頻率和存取者,請查詢所有稽核記錄。如需找出這種情況的查詢範例,請參閱「判斷過去一個月內最常執行的動作」。
事前準備
確認您有會產生稽核記錄的 Google Cloud 專案、資料夾或組織。
請確認您有權存取稽核記錄轉送至的記錄檔 bucket 檢視畫面。必須升級記錄檔 bucket,才能使用 Observability Analytics。如要瞭解如何建立升級為使用 Observability Analytics 的記錄檔 bucket,請參閱「設定記錄檔 bucket」。
-
如要取得建立接收器和查看記錄檔所需的權限,請要求管理員授予您下列 IAM 角色:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
視您要查看的稽核記錄而定,您可能需要不同的角色或權限。如要瞭解如何設定 IAM 角色,請參閱 Logging 的「使用 IAM 存取控管」說明文件。
如要在「Observability Analytics」頁面使用本文中的查詢,請按照下列步驟操作:
-
在 Google Cloud 控制台中,前往 manage_search「Observability Analytics」(觀測能力分析) 頁面:
前往「Observability Analytics」(觀測能力分析) 頁面
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
找出要查詢的記錄檢視表名稱。
如要找出這個名稱,請前往「Log views」(記錄檔檢視表) 清單,找到記錄檔檢視表,然後選取「Query」(查詢)。「Query」(查詢) 窗格會填入預設查詢,其中包含查詢的記錄檢視表資料表名稱。資料表名稱的格式為
project_ID.region.bucket_ID.view_ID。如要進一步瞭解如何存取預設查詢,請參閱「查詢記錄檢視表」。
將 VIEW 替換為要查詢的記錄檢視表名稱,然後複製查詢。
在「查詢」窗格中貼上查詢,然後點選「執行查詢」。
-
查詢範例
本節提供查詢稽核記錄的 SQL 查詢範例。
記錄設定變更
如要找出稽核記錄停用的時間,或預設 Logging 設定變更的時間,請查詢管理員活動稽核記錄:
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
`VIEW`
WHERE
proto_payload.audit_log.service_name = "logging.googleapis.com"
AND log_id = "cloudaudit.googleapis.com/activity"
判斷過去一個月最常執行的動作
如要找出過去 30 天內最常執行的動作,請查詢所有稽核記錄:
SELECT
proto_payload.audit_log.method_name,
proto_payload.audit_log.service_name,
resource.type,
COUNT(*) AS counter
FROM
`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
上述查詢會搜尋過去 30 天內的所有稽核記錄,並傳回 100 項最常執行的動作,以及 method_name、service_name、資源類型和執行動作計數器的相關資訊。
偵測授予服務帳戶的角色
如要找出服務帳戶模擬,或授予服務帳戶的角色,請查詢管理員活動稽核記錄:
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
`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
上述查詢會搜尋稽核記錄,找出將角色授予服務帳戶主體的記錄。服務帳戶權杖建立者角色可讓主體模擬服務帳戶。查詢也會指定過去七天的時間範圍,並排除已核准的被授權者 (%@example.com)。
找出 API 用量偏高的主體
如要找出 API 使用量異常偏高的主體,請查詢所有稽核記錄:
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 `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
針對指定的主體 principal_email,查詢會計算每天的平均 API 呼叫次數,以及這些 API 呼叫的標準差。如果 API 呼叫的平均數量大於移動平均值加上標準差的三倍,查詢就會顯示下列資訊:
- 執行動作的計數器。
- 計算出的每日平均動作次數。
- 執行的特定動作。
後續步驟
如需 Observability Analytics 總覽,請參閱「Observability Analytics」。
如需更多查詢範例,請參閱「SQL 查詢範例」。
如需更多用於從記錄檔產生安全性深入分析資訊的查詢範例,請參閱社群安全性分析存放區。
如要瞭解如何使用 Observability Analytics 啟用、匯總及分析記錄,請參閱「 Google Cloud中的安全性記錄分析」。