本頁面詳細說明 Cloud 稽核記錄項目的結構、讀取方式,以及如何解讀這些記錄。
Cloud 稽核記錄會為每個 Google Cloud 專案、資料夾和機構提供下列稽核記錄:
- 管理員活動稽核記錄
- 資料存取稽核記錄
- 系統事件稽核記錄
- 政策遭拒的稽核記錄
如需 Cloud 稽核記錄的概要總覽,請參閱 Cloud 稽核記錄。
稽核記錄項目的格式
稽核記錄項目是一種 Cloud Logging 記錄項目的類型。與所有 Logging 記錄項目相同,稽核記錄項目會儲存在 LogEntry
物件中。稽核記錄項目與其他記錄項目的區別在於 protoPayload
欄位。在稽核記錄項目中,記錄項目的 protoPayload
欄位具有儲存稽核記錄資料的 AuditLog
物件。
簡而言之,每個稽核記錄項目都包含下列資訊:
- 擁有記錄項目的專案、資料夾或機構。
- 套用記錄項目的資源。這項資訊包括受控資源清單中的資源類型,以及其他表示特定執行個體的值。例如,您可以從單一 Compute Engine VM 執行個體,或從所有 VM 執行個體查看稽核記錄項目。
- 時間戳記。
服務:服務是個別的 Google Cloud 產品,例如 Compute Engine、Cloud SQL 或 Pub/Sub。每項服務均由名稱識別:Compute Engine 是
compute.googleapis.com
,Cloud SQL 是cloudsql.googleapis.com
,依此類推。這項資訊會列在稽核記錄項目的protoPayload.serviceName
欄位中。多種資源類型屬於單一服務,但一項服務可以擁有多種資源類型。如需服務和資源清單,請參閱服務與資源之間的對應關係一節。
酬載,屬於
protoPayload
類型。每個稽核記錄項目的酬載都是AuditLog
類型的物件,定義了 Cloud Audit Logs 專屬的一系列欄位,例如serviceName
和authenticationInfo
。該類型也有選用欄位metadata
, Google Cloud 服務會使用該欄位,在稽核記錄項目中列出服務專屬資訊。部分 Google Cloud 服務仍使用舊版serviceData
欄位列出服務專屬資訊。如需使用serviceData
欄位的服務清單,請參閱服務專屬稽核資料。記錄名稱:稽核記錄項目屬於帳單帳戶、專案、資料夾和機構內的記錄。下表列出記錄名稱:
projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Factivity billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fdata_access billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com%2Fpolicy organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy
在帳單帳戶、專案、資料夾或機構中,這些記錄名稱通常縮寫為「activity」、「data_access」、「system_event」和「policy」。
稽核記錄項目範例
本節會使用稽核記錄項目範例,說明如何找出稽核記錄項目中最重要的資訊。
以下範例是由 App Engine 寫入的管理員活動稽核記錄項目,用來記錄使用 PROJECT_ID my-gcp-project-id
對身分與存取權管理 (IAM) 政策所做的變更。為求簡潔,我們省略了記錄項目的某些部分,並將某些欄位醒目顯示。
{ protoPayload: { @type: "type.googleapis.com/google.cloud.audit.AuditLog", status: {}, authenticationInfo: { principalEmail: "[email protected]" }, serviceName: "appengine.googleapis.com", methodName: "SetIamPolicy", authorizationInfo: [...], serviceData: { @type: "type.googleapis.com/google.appengine.legacy.AuditData", policyDelta: { bindingDeltas: [ action: "ADD", role: "roles/logging.privateLogViewer", member: "user:[email protected]" ], } }, request: { resource: "my-gcp-project-id", policy: { bindings: [...], } }, response: { bindings: [ { role: "roles/logging.privateLogViewer", members: [ "user:[email protected]" ] } ], } }, insertId: "53179D9A9B559.AD6ACC7.B40604EF", resource: { type: "gae_app", labels: { project_id: "my-gcp-project-id" } }, timestamp: "2019-05-27T16:24:56.135Z", severity: "NOTICE", logName: "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity", }
以下是用來選取上述稽核記錄項目範例的查詢。您可以在 Logs Explorer、Logging API 或 Google Cloud CLI 中使用這項查詢。專案 ID 位於記錄名稱中:
resource.type = "gae_app" logName = "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
如要從資源類型的單一執行個體 (例如 gce_instance
) 中尋找稽核記錄,請加入執行個體限定詞:
resource.type = "gce_instance" resource.instance_id = "INSTANCE_ID" logName = "projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity"
解讀稽核記錄項目範例
在前述的稽核記錄項目範例中,顯示的 protoPayload
、insertId
、resource
、timestamp
、severity
和 logName
欄位均為 LogEntry
物件的一部分。protoPayload
欄位的值為 AuditLog
物件。會封裝稽核記錄資料。
對於稽核記錄項目範例,您可能會有一些疑問:
這是稽核記錄項目嗎?是,您可以透過兩種方式辨別。
protoPayload.@type
欄位為type.googleapis.com/google.cloud.audit.AuditLog
。logName
欄位包含網域cloudaudit.googleapis.com
。
稽核記錄是由哪一項服務寫入?該記錄是由 App Engine 寫入。這項資訊會列在稽核記錄項目的
protoPayload.serviceName
欄位中。哪些作業會受到稽核?
protoPayload.methodName
欄位指定的SetIamPolicy
會受到稽核。您可以在protoPayload.serviceData
的AuditData
物件中找到更多有關已稽核作業的資訊。哪些資源會受到稽核?我們正在稽核在 App Engine 中執行的應用程式,該應用程式與 Google Cloud 專案
my-gcp-project-id
相關聯。您可以透過resource
欄位判斷這項資訊,該欄位會指定資源類型gae_app
和專案 IDmy-gcp-project-id
。在這個範例中,您可以在受控資源類型清單中找到資源類型的詳細資料。
詳情請參閱 LogEntry
類型、AuditLog
類型和 IAM AuditData
類型。
長時間執行作業的稽核記錄
長時間執行作業 API 會產生兩個稽核記錄:一個是在 API 呼叫並開始作業時產生,另一個是在作業完成時產生。
在本例中,LogEntry
物件包含 operation
欄位。同一項作業的記錄項目,其 LogEntry.operation.id
和 LogEntry.operation.producer
值都相同。寫入的第一個記錄項目有 LogEntry.operation.first=true
,而完成記錄項目則有 LogEntry.operation.last=true
。
如果作業立即完成或失敗,則只有一個記錄項目會同時包含 LogEntry.operation.first=true
和 LogEntry.operation.last=true
。
部分服務在作業失敗時不會填入 LogEntry.operation
欄位。不過,您可以參閱服務的稽核記錄文件,判斷哪些作業是長時間執行的作業。
這些 API 會實作「Operations」服務。這項服務通常會在呼叫時發出稽核記錄項目。視呼叫的 API 而定,protoPayload.methodName
是下列其中一種:
google.longrunning.Operations.ListOperations
google.longrunning.Operations.GetOperation
google.longrunning.Operations.CancelOperation
google.longrunning.Operations.WaitOperation
google.longrunning.Operations.DeleteOperation
在這種情況下,系統不會指定 LogEntry.operation
,因為這個 API 會傳回長時間執行作業的相關中繼資料,但本身並非長時間執行作業。
如要進一步瞭解哪些 API 會進行稽核,請參閱「Google Cloud 含有稽核記錄的服務」一文,因為每項服務的稽核 API 可能有所不同。
串流 API 的稽核記錄
與長時間執行作業類似,串流 API 會產生兩個稽核記錄項目:一個是在 API 首次呼叫時產生,另一個是在串流連線結束時產生。
在這種情況下,LogEntry
物件會包含 operation
欄位,而同一作業的記錄項目會在 LogEntry.operation.id
和 LogEntry.operation.producer
中擁有相同的值。寫入的第一個記錄有 LogEntry.operation.first=true
,完成記錄則有 LogEntry.operation.last=true
。
這個 API 也可能會傳送繼續記錄項目,但不會設定 LogEntry.operation.first
或 LogEntry.operation.last
,以表示串流仍處於開啟狀態。
服務專屬稽核資料
部分服務會在稽核記錄項目的 serviceData
欄位中放置輔助資料結構,藉此擴充 AuditLog
中儲存的資訊。下表列出使用 serviceData
欄位的服務,並提供其 AuditData
類型的連結。
查看稽核記錄
您可以查詢所有稽核記錄,也可以依稽核記錄名稱查詢記錄。稽核記錄名稱包含您要查看稽核記錄資訊的 Google Cloud 專案、資料夾、帳單帳戶或機構的資源 ID。查詢可以指定已建立索引的 LogEntry
欄位。如要進一步瞭解如何查詢記錄檔,請參閱「在記錄檔探索工具中建構查詢」
您可以使用 Logs Explorer 查看個別記錄項目的篩選結果。如果您想使用 SQL 分析記錄項目群組,請使用「記錄檔分析」頁面。如需詳細資訊,請參閱:
您可以使用Google Cloud 控制台、Google Cloud CLI 或 Logging API,在 Cloud Logging 中查看大部分的稽核記錄。不過,如果是與帳單相關的稽核記錄,您只能使用 Google Cloud CLI 或 Logging API。
控制台
在 Google Cloud 控制台中,您可以使用「記錄檔探索工具」擷取 Google Cloud 專案、資料夾或機構的稽核記錄項目:
-
前往 Google Cloud 控制台的「Logs Explorer」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
選取現有的 Google Cloud 專案、資料夾或機構。
如要顯示所有稽核記錄,請在查詢編輯器欄位中輸入下列任一查詢,然後按一下「Run query」:
logName:"cloudaudit.googleapis.com"
protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
如要顯示特定資源和稽核記錄類型的稽核記錄,請在「Query builder」窗格中執行下列操作:
在「Resource type」中,選取您要查看稽核記錄的 Google Cloud 資源。
在「記錄名稱」中,選取要查看的稽核記錄類型:
- 如要查看管理員活動稽核記錄,請選取「活動」。
- 如要查看資料存取稽核記錄,請選取「data_access」data_access。
- 如要查看系統事件稽核記錄,請選取 system_event。
- 如要查看「政策遭拒」稽核記錄,請選取「政策」。
點選「執行查詢」。
如果您沒有看到這些選項,表示 Google Cloud 專案、資料夾或組織中沒有該類型的稽核記錄。
如果您在嘗試在「Logs Explorer」中查看記錄檔時遇到問題,請參閱疑難排解資訊。
如要進一步瞭解如何使用記錄檔探索工具查詢,請參閱「在記錄檔探索工具中建構查詢」。
gcloud
Google Cloud CLI 提供 Logging API 的指令列介面。並在每個記錄名稱中提供有效的資源 ID。舉例來說,如果查詢包含 PROJECT_ID,則您提供的專案 ID 必須參照目前所選的Google Cloud 專案。
如要讀取 Google Cloud 專案層級稽核記錄項目,請執行下列指令:
gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" \ --project=PROJECT_ID
如要讀取資料夾層級稽核記錄項目,請執行下列指令:
gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" \ --folder=FOLDER_ID
如要讀取機構層級稽核記錄項目,請執行下列指令:
gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" \ --organization=ORGANIZATION_ID
如要讀取 Cloud Billing 帳戶層級稽核記錄項目,請執行下列指令:
gcloud logging read "logName : billingAccounts/BILLING_ACCOUNT_ID/logs/cloudaudit.googleapis.com" \ --billing-account=BILLING_ACCOUNT_ID
在指令中加入 --freshness
標記,即可讀取超過 1 天的記錄檔。
如要進一步瞭解如何使用 gcloud CLI,請參閱 gcloud logging read
。
REST
建構查詢時,請在每個記錄名稱中提供有效的資源 ID。舉例來說,如果查詢包含 PROJECT_ID,則您提供的專案 ID 必須參照目前所選的Google Cloud 專案。
舉例來說,如要使用 Logging API 查看專案層級的稽核記錄項目,請按照下列步驟操作:
前往
entries.list
方法說明文件中的「Try this API」(試用這個 API) 區段。將下列內容放入「Try this API」(試用這個 API) 表單的「Request body」(要求主體) 部分。按一下這份已預先填入資料的表單就能自動填入要求主體,但您必須在每個記錄名稱中提供有效的 PROJECT_ID。
{ "resourceNames": [ "projects/PROJECT_ID" ], "pageSize": 5, "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" }
按一下 [Execute] (執行)。