瞭解稽核記錄

本頁面詳細說明 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 稽核記錄專屬欄位,例如 serviceNameauthenticationInfo。該類型也有選用欄位 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 寫入的管理員活動稽核記錄項目,用來記錄身分與存取權管理 (IAM) 政策的變更,其中包含 PROJECT_ID my-gcp-project-id。為求說明簡潔,我們省略了記錄項目的某些部分,並將某些欄位醒目顯示。

    {
      protoPayload: {
        @type: "type.googleapis.com/google.cloud.audit.AuditLog",
        status: {},
        authenticationInfo: {
          principalEmail: "user@example.com"
        },
        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:user@example.com"
          ], }
        },
        request: {
          resource: "my-gcp-project-id",
          policy: { bindings: [...], }
        },
        response: {
          bindings: [
            {
              role: "roles/logging.privateLogViewer",
              members: [ "user:user@example.com" ]
            }
          ],
        }
      },
      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",
    }

以下是用來選取先前稽核記錄項目範例的查詢。您可以在記錄檔探索工具、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"

解讀稽核記錄項目範例

在先前的稽核記錄項目範例中,protoPayloadinsertIdresourcetimestampseveritylogName 欄位均為 LogEntry 物件的一部分。protoPayload 欄位的值為 AuditLog 物件。會封裝稽核記錄資料。

對於上述的稽核記錄項目範例,您可能會有一些疑問:

  • 這是稽核記錄項目嗎?是,您可以透過兩種方式辨別。

    • protoPayload.@type 欄位為 type.googleapis.com/google.cloud.audit.AuditLog

    • logName 欄位包含網域 cloudaudit.googleapis.com

  • 稽核記錄是由哪一項服務寫入?記錄是由 App Engine 寫入。這項資訊會列在稽核記錄項目的 protoPayload.serviceName 欄位中。

  • 哪些作業會受到稽核?protoPayload.methodName 欄位指定的 SetIamPolicy 會受到稽核。您可以在 protoPayload.serviceDataAuditData 物件中找到更多有關已稽核作業的資訊。

  • 哪些資源會受到稽核?系統正在稽核與 Google Cloud 專案my-gcp-project-id相關聯的 App Engine 應用程式。您可以從 resource 欄位判斷,該欄位會指定資源類型 gae_app 和專案 ID my-gcp-project-id。在本例中,您可以在受監控資源類型清單中找到資源類型詳細資料。

詳情請參閱 LogEntry 類型AuditLog 類型IAM AuditData 類型

長時間執行的作業的稽核記錄

長時間執行的作業 API 會發出兩則稽核記錄,一則是在呼叫 API 並啟動作業時發出,另一則是在作業完成時發出。

在這個情況下,LogEntry 物件包含 operation 欄位。同一作業的記錄項目具有相同的 LogEntry.operation.idLogEntry.operation.producer 值。第一個寫入的記錄項目有 LogEntry.operation.first=true,完成記錄項目則有 LogEntry.operation.last=true

如果作業立即完成或失敗,則只有一個記錄項目,其中包含 LogEntry.operation.first=trueLogEntry.operation.last=true

如果作業失敗,部分服務不會填入 LogEntry.operation 欄位。不過,您可以參閱服務的稽核記錄文件,判斷哪些作業是長時間執行的作業。

這些 API 會實作「作業」服務。一般來說,這項服務在呼叫時會發出稽核記錄項目。視呼叫的 API 而定,protoPayload.methodName 是下列其中一項:

  • google.longrunning.Operations.ListOperations
  • google.longrunning.Operations.GetOperation
  • google.longrunning.Operations.CancelOperation
  • google.longrunning.Operations.WaitOperation
  • google.longrunning.Operations.DeleteOperation

由於這個 API 會傳回長時間執行作業的中繼資料,但本身並非長時間執行作業,因此本例中未指定 LogEntry.operation

如要瞭解哪些 API 會受到稽核,請參閱Google Cloud 含有稽核記錄的服務,因為各項服務的稽核對象可能不同。

串流 API 的稽核記錄

與長時間執行的作業類似,串流 API 會發出兩筆稽核記錄項目:一筆是在首次呼叫 API 時,另一筆則是在串流連線結束時。

在這種情況下,LogEntry 物件會包含 operation 欄位,且同一作業的記錄項目會擁有相同的 LogEntry.operation.idLogEntry.operation.producer 值。第一個寫入的記錄會包含 LogEntry.operation.first=true, 完成記錄則會包含 LogEntry.operation.last=true

這個 API 也可能會發出不含 LogEntry.operation.firstLogEntry.operation.last 的續傳記錄項目,表示串流仍處於開啟狀態。

服務專屬稽核資料

部分服務會將補充資料結構放在稽核記錄項目的 serviceData 欄位中,藉此擴充 AuditLog 儲存的資訊。下表列出使用 serviceData 欄位的服務,並提供其 AuditData 類型的連結。

服務服務資料類型
App Engine type.googleapis.com/google.appengine.v1.AuditData
App Engine (舊版) type.googleapis.com/google.appengine.legacy.AuditData
BigQuery type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData
IAM type.googleapis.com/google.iam.v1.logging.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 專案、資料夾或機構的稽核記錄項目:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面:

    前往「Logs Explorer」(記錄檔探索工具)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果

  2. 選取現有的 Google Cloud 專案、資料夾或機構。

  3. 如要顯示所有稽核記錄,請在查詢編輯器欄位中輸入下列任一查詢,然後按一下「執行查詢」

    logName:"cloudaudit.googleapis.com"
    
    protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
    
  4. 如要顯示特定資源和稽核記錄類型的稽核記錄,請在「查詢產生器」窗格中執行下列操作:

    • 在「資源類型」中,選取要查看稽核記錄的 Google Cloud 資源。

    • 在「記錄名稱」中,選取要查看的稽核記錄類型:

      • 如要查看管理員活動稽核記錄,請選取「activity」
      • 如要查看資料存取稽核記錄,請選取「data_access」data_access
      • 如要查看系統事件稽核記錄,請選取「system_event」system_event
      • 如要查看「政策遭拒」稽核記錄,請選取「政策」
    • 點選「執行查詢」

    如果沒有看到這些選項,表示 Google Cloud 專案、資料夾或機構中沒有這類型的稽核記錄。

    如果無法在記錄檔探索工具中查看記錄,請參閱疑難排解資訊。

    如要進一步瞭解如何使用記錄檔探索工具查詢,請參閱「在記錄檔探索工具中建構查詢」。

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 查看專案層級的稽核記錄項目,請按照下列步驟操作:

  1. 前往 entries.list 方法說明文件中的「Try this API」(試用這個 API) 區段。

  2. 將下列內容放入「Try this API」(試用這個 API) 表單的「Request body」(要求主體) 部分。按一下這份已預先填入資料的表單就能自動填入要求主體,但您必須在每個記錄名稱中提供有效的 PROJECT_ID

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. 按一下 [Execute] (執行)