瞭解稽核記錄

本頁面詳細說明 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 專屬的一系列欄位,例如 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 寫入的管理員活動稽核記錄項目,用來記錄使用 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"

解讀稽核記錄項目範例

在前述的稽核記錄項目範例中,顯示的 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 物件中找到更多有關已稽核作業的資訊。

  • 哪些資源會受到稽核?我們正在稽核在 App Engine 中執行的應用程式,該應用程式與 Google Cloud 專案my-gcp-project-id相關聯。您可以透過 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 會實作「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.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. 如要顯示所有稽核記錄,請在查詢編輯器欄位中輸入下列任一查詢,然後按一下「Run query」

    logName:"cloudaudit.googleapis.com"
    
    protoPayload."@type"="type.googleapis.com/google.cloud.audit.AuditLog"
    
  4. 如要顯示特定資源和稽核記錄類型的稽核記錄,請在「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 查看專案層級的稽核記錄項目,請按照下列步驟操作:

  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] (執行)