VPC Service Controls 稽核記錄

本文說明 VPC Service Controls 建立的稽核記錄,該記錄屬於 Cloud 稽核記錄的一部分。

總覽

Google Cloud 服務會寫入稽核記錄,協助您瞭解 Google Cloud 資源中「人事時地物」的問題。

專案的稽核記錄僅涵蓋直接隸屬於專案的資源。 Google Cloud Google Cloud 資料夾、機構和帳單帳戶等其他 Google Cloud 資源也各有其專屬的稽核記錄。

如需 Cloud 稽核記錄的概要總覽,請參閱 Cloud 稽核記錄總覽。如要深入瞭解稽核記錄格式,請參閱「瞭解稽核記錄」。

可用的稽核記錄

VPC Service Controls 提供下列類型的稽核記錄:

  • 政策遭拒的稽核記錄

    指出使用者或服務帳戶因違反安全性政策而遭拒存取。「Policy Denied」稽核記錄中的服務名稱和方法名稱,會指出使用者或服務帳戶遭拒存取的資源名稱。

    您無法停用「政策遭拒」稽核記錄。不過,您可以在 _Default 接收器上新增下列 排除篩選器,排除「政策拒絕」稽核記錄:LOG_ID("cloudaudit.googleapis.com/policy")。 您也可以 停用 Cloud Logging 的 _Default 接收器,防止記錄檔轉送至 _Default 值區。

如需稽核記錄類型的完整說明,請參閱「稽核記錄類型」。

已稽核的作業

下表摘要列出與 VPC Service Controls 中每個稽核記錄類型對應的 API 作業:

稽核記錄類別 VPC Service Controls 方法
政策遭拒的稽核記錄 支援與 VPC Service Controls 整合的服務方法。

稽核記錄內容

每筆稽核記錄都包含兩大類別的資訊:原始呼叫的相關資訊,以及安全性政策違規相關資訊。VPC Service Controls API 會在下列欄位中填入這些資訊:

稽核記錄欄位 說明
serviceName 服務範圍限制存取權的服務。對這項服務的要求違反 VPC Service Controls 檢查,因此產生這筆稽核記錄。
methodName 針對此記錄所述違反安全性政策的方法呼叫,提供其名稱。通常 methodName 是與 serviceName 欄位中指定的 Google Cloud 服務相關聯的方法。
authenticationInfo.principalEmail 發出要求的使用者或服務帳戶電子郵件地址。
部分電子郵件地址可能會經過遮蓋。詳情請參閱稽核記錄中的呼叫者身分
resourceName 用戶端原始要求中指定的 Google Cloud 資源。 resourceName 可以是專案、資料夾、機構或資源 (例如 Google Cloud 值區)。
requestMetadata.callerIp

來電者的 IP 位址。

如果通話來自網際網路,則 requestMetadata.callerIp 是公開 IPv4 或 IPv6 位址。

如果呼叫是從 Compute Engine VM 發出,則 requestMetadata.callerIp 是 VM IP 位址。VM IP 位址可以是內部 IP 位址或外部 IP 位址。

如果呼叫是從 Google 內部實際工作環境網路發出,這個欄位的值會是 private。如果呼叫是從某項 Google Cloud 服務傳送至另一項服務,就會發生這種情況。

request_metadata.caller_network 來電者所屬的電信網路名稱。只有在網路主專案與所存取資源屬於相同 Google Cloud 機構或專案時,才會設定這個值。詳情請參閱「虛擬私有雲網路」。
status 此記錄所述作業的整體處理狀態。
metadata 有關違反安全政策的資訊。
metadata.resourceNames 記錄中描述的安全性政策違規事件所涉及的資源名稱。
metadata.dryRun 布林值,如果稽核記錄用於政策模擬檢查,則為 True。詳情請參閱「服務安全防護範圍的試營運模式」。
metadata.vpcServiceControlsUniqueId 記錄中描述的 VPC Service Controls 違規事項專屬 ID。
metadata.violationReason 違規原因。舉例來說,RESOURCE_NOT_IN_SAME_SERVICE_PERIMETER 表示存取的資源不屬於同一個服務範圍。
metadata.securityPolicyInfo 發生違規事件的服務範圍名稱,以及該範圍所屬機構的專屬 ID。
metadata.egressViolations 如果來源受到服務範圍保護,而目標資源位於範圍外,要求就會失敗,通常會發生輸出違規情形。來源可以是專案或虛擬私有雲網路。
metadata.ingressViolations 違規類型。如果要求嘗試存取受服務邊界保護的目標資源,通常就會發生這項違規情形。來源可以是專案或虛擬私有雲網路。這個欄位包含說明 Ingress 違規事項的結構。
metadata.accessLevels 屬於相同存取權政策的機構中,所有相符的存取層級。這些存取層級可能未在違規的周邊範圍中指定,因此可能導致 NO_MATCHING_ACCESS_LEVEL 違規。
metadata.intermediateServices 要求鏈中涉及的服務清單。如果是使用者發起的要求,這個欄位會留空。
metadata.deviceState 裝置政策啟用時,建立要求的裝置狀態。這個欄位的預設值為 Unknown

稽核記錄格式

稽核記錄項目包含下列物件:

  • 記錄項目本身,屬於 LogEntry 類型的物件。實用的欄位包括:

    • logName 包含資源 ID 和稽核記錄類型。
    • resource 包含稽核作業的目標。
    • timeStamp 包含稽核作業的時間。
    • protoPayload 包含稽核的資訊。
  • 稽核記錄資料,這是儲存在記錄項目 protoPayload 欄位中的 AuditLog 物件。

  • 選用的服務專屬稽核資訊,這是服務專屬物件。如果是較早的整合,這個物件會保留在 AuditLog 物件的 serviceData 欄位中;較新的整合則使用 metadata 欄位。

如要瞭解這些物件中的其他欄位,以及如何解讀這些資料,請參閱「瞭解稽核記錄」一文。

記錄檔名稱

Cloud 稽核記錄的記錄名稱包含資源 ID,可指出擁有稽核記錄的Google Cloud 專案或其他 Google Cloud 實體,以及記錄中包含的是管理員活動、資料存取、政策遭拒或系統事件稽核記錄資料。

以下是稽核記錄名稱,包括資源 ID 的變數:

   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

服務名稱

VPC Service Controls 稽核記錄會使用與 VPC Service Controls 整合的服務服務名稱。

如需所有 Cloud Logging API 服務名稱及其對應受監控資源類型的清單,請參閱「將服務對應至資源」。

資源類型

VPC Service Controls 稽核記錄會使用與 VPC Service Controls 整合的服務所支援的資源類型。

如需所有 Cloud Logging 受監控資源類型和說明資訊的清單,請參閱「受監控資源類型」。

來電者身分

呼叫端的 IP 位址會保存在 AuditLog 物件的 RequestMetadata.caller_ip 欄位中。記錄檔可能會遮蓋特定呼叫端身分和 IP 位址。

如要瞭解稽核記錄中會遮蓋哪些資訊,請參閱稽核記錄中的呼叫者身分

啟用稽核記錄

系統一律會啟用管理員活動稽核記錄,且該記錄無法停用。

權限與角色

IAM 權限和角色會決定您能否存取 Google Cloud 資源中的稽核記錄資料。

決定要將哪些記錄專用權限和角色套用至您的用途時,請考量下列事項:

  • 「記錄檢視者」角色 (roles/logging.viewer) 可讓您以唯讀模式存取「管理員活動」、「政策拒絕」和「系統事件」稽核記錄。如果您只有這個角色,就無法查看 _Default 值區中的資料存取稽核記錄。

  • 「私密記錄檢視者」角色 ((roles/logging.privateLogViewer) 包含 roles/logging.viewer 中的權限,外加讀取 _Default 儲存空間中資料存取稽核記錄的權限。

    請注意,如果這些私密記錄檔儲存在使用者定義的值區中,則任何有權讀取這些值區中記錄檔的使用者,都能讀取私密記錄檔。如要進一步瞭解記錄檔 bucket,請參閱「轉送和儲存空間總覽」。

如要進一步瞭解適用於稽核記錄資料的 IAM 權限和角色,請參閱「使用身分與存取權管理功能控管存取權」一文。

查看記錄

您可以查詢所有稽核記錄,也可以依稽核記錄名稱查詢記錄。稽核記錄名稱包含您要查看稽核記錄資訊的 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] (執行)

查詢範例

如要使用下表中的範例查詢,請完成下列步驟:

  1. 將查詢運算式中的變數替換為自己的專案資訊,然後使用剪貼簿圖示 複製運算式。

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

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

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

  3. 啟用「顯示查詢」開啟查詢編輯器欄位,然後將運算式貼到查詢編輯器欄位中:

    查詢編輯器,可供您輸入範例查詢。

  4. 按一下 [Run query] (執行查詢)。「Query results」(查詢結果) 窗格會列出符合查詢的記錄。

如要尋找 VPC Service Controls 的稽核記錄,請在 Logs Explorer 中使用下列查詢:

查詢說明 運算式
根據拒絕 ID 顯示的違規詳細資料
log_id("cloudaudit.googleapis.com/policy") severity=ERROR
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID" 

UNIQUE_ID 替換為拒絕的專屬 ID。

IP 位址的違規事項
log_id("cloudaudit.googleapis.com/policy")
severity=ERROR
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.requestMetadata.callerIp="IP_ADDRESS"

IP_ADDRESS 替換為呼叫端的 IP 位址。

服務的違規情形
log_id("cloudaudit.googleapis.com/policy")
severity=ERROR
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.serviceName="SERVICE_NAME"

SERVICE_NAME 改為受限服務的名稱。

範圍的存取層級變更
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
severity=NOTICE
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName="google.identity.accesscontextmanager.v1.AccessContextManager.UpdateServicePerimeter"
-protoPayload.metadata.previousState:"ACCESS_LEVEL"
protoPayload.request.servicePerimeter.status.accessLevels:"ACCESS_LEVEL"

ORGANIZATION_ID 替換為機構的數字 ID,並將 ACCESS_LEVEL 替換為存取層級的專屬名稱。

邊界 CRUD 作業
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
severity=NOTICE
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*ServicePerimeter"
protoPayload.request.servicePerimeter.name=~".*PERIMETER_NAME$"
PERIMETER_NAME 替換為範圍名稱。
存取層級 CRUD 作業
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
severity=NOTICE
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*AccessLevel"
protoPayload.request.accessLevel.name=~".*ACCESS_LEVEL$"
建立及更新輸入規則的作業
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*ServicePerimeter"
protoPayload.request.servicePerimeter.status.ingressPolicies:"*"
建立及更新輸出規則的作業
logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
protoPayload.serviceName="accesscontextmanager.googleapis.com"
protoPayload.methodName=~"google.identity.accesscontextmanager.v1.AccessContextManager.*ServicePerimeter"
protoPayload.request.servicePerimeter.status.egressPolicies:"*"

路由稽核記錄

您可以採用與傳送其他類型記錄相同的方式,將稽核記錄傳送至支援的目的地。以下列舉幾個可能需要傳送稽核記錄的原因:

  • 如要長時間保留稽核記錄,或使用更強大的搜尋功能,您可以將稽核記錄的副本傳送至 Cloud Storage、BigQuery 或 Pub/Sub。您可以使用 Pub/Sub 將記錄檔傳送至其他應用程式、其他存放區或第三方。

  • 如要管理整個機構的稽核記錄,您可以建立匯總接收器,從機構的任何或所有 Google Cloud 專案轉送記錄。

如需如何轉送記錄的操作說明,請參閱「將記錄轉送至支援的目的地」。

定價

如要進一步瞭解價格,請參閱 Cloud Logging 定價摘要