Audit Logging 主要功能與關鍵實踐介紹
身為一位稽核人員,您可能要花費許多時間檢閱 log。Google Cloud Audit Logging 是 Google Stackdriver 這套產品中不可或缺的一部分,了解它的運作原理以及如何部署在 Google Cloud Platform (GCP) 上是必備的關鍵技能。在本篇文章中,會討論 Cloud Audit Logging 的主要功能,並提出一些最佳的作法。
在使用 Cloud Audit Logging 時,首先要知道的是每個項目都包含兩種記錄:
1. 稽核紀錄 (admin activity)
2. 數據存取紀錄 (data access)
產生這些記錄的目的是幫助您了解「何人在何時何地在您的 GCP 項目中做了甚麼」。而這些記錄和您的應用程式記錄是不同的。稽核紀錄包含 API 使用記錄和更改資源設定或數據有關的管理操作。管理活動的記錄是 24 小時運作且不收費的,記錄會保留 13 個月 (即 400 天)。數據存取記錄記載有關創建、修改或讀取用戶數據的 API 使用情況。數據的存取預設是不記錄的,因為資料量可能會變得非常大。
為了供您參考,以下是 GCP 產生的稽核記錄的完整列表。
設定和查看稽核記錄
Cloud Audit Logging 入門很簡單。有些服務預設為啟用狀態,有些則僅需點擊幾下即可運行。以下是如何建立、設定和使用各種 Cloud Audit Logging 功能的介紹:
設定蒐集稽核記錄
管理活動記錄預設是啟動的,因此,您不需要做任何動作系統就會自動記錄管理活動,然而,除了 BigQuery 外,數據存取記錄預設是不啟動的,您可以根據 Configuring Data Access Logs (設定稽核記錄的收集)中的詳細步驟來啟動它。
數據存取記錄的一個最佳使用實踐是在讓開發人員和生產專案使用之前,用測試項目來驗證數據存取稽核記錄的收集設定是否正確。如果您的IAM控制設定錯誤,您可能無法存取您的專案。
查看稽核記錄
可以從 GCP管理主控台裡的兩個地方查看稽核記錄:經由動態饋送可查看條列式的活動摘要,或從 Stackdriver Logs 中的 viewer page 查看完整的活動記錄
權限
您應該將存取稽核記錄視為敏感的動作,並設定適當的存取控制,您可以使用IAM 的身分管理系統限制稽核記錄的存取權限。
要查看記錄,必須為管理活動記錄的人員授予 IAM logging viewer 角色,如果要查看數據存取記錄需要授予 logging.privateLogViewer。
在為 Cloud Audit Logging 設定身分的存取權限時,此篇教學會介紹一些典型情況,並提供有關如何設定 IAM 的教學,以解決對存取稽核記錄的控制需求。確定您已使用適當的 IAM 限制可存取稽核記錄的人員是最佳的做法之一。
查看動態饋送
您可以在管理主控台的動態頁面上查看所有稽核記錄的概要。點擊想進一步了解的項目,以顯示該事件的詳細視圖,如下圖所示:
預設狀態下,此活動饋送是不會顯示數據存取記錄的,如果希望記錄顯示,請到篩選設定面板,並選擇類別中 “Data Access” 的欄位(請注意,您必須擁有 Private Logs ViewerIAM 授權才能查看數據存取記錄)。
透過 Stackdriver Logs viewer 查看稽核記錄
您可以透過 Stackdriver Logs Viewer 查看稽核記錄的詳細條目。您可以在 Logs Viewer 中過濾記錄或做全文檢索找到需要的稽核記錄,並根據資源類型和記錄名稱選擇要看的記錄。
以下的例子以 JSON 格式顯示一些記錄條目,並將一些重要的部分特別標示。
篩選稽核記錄
Stackdriver 提供了基本和進階的記錄篩選功能。基本的篩選功能允許您依照資源類型和日期/時間篩選 Feed 中顯示的結果。
進階的記錄篩選功能以布林表現式指定您項目中所有記錄條目的子集。您可以用它來選擇記錄條目:
• 從特定的記錄或記錄服務
• 在給定的時間範圍內
• 滿足元數據或使用者定義字段的條件
• 代表所有記錄條目的抽樣百分比
以下篩選是要找出由 Cloud IAM API 所呼叫的所有方法中名為 SetIamPolicy 的方法:
resource.type="project"
logName="projects/a-project-id-here/logs/cloudaudit.googleapis.com%2Factivity"
protoPayload.methodName="SetIamPolicy"
以下是記錄條目的片段,顯示 SetIamPolicy 方法的呼叫是為了要授予 Alice BigQuery 數據查看器 IAM 角色。
resourceName: "projects/a-project-id-here"
response: {
@type: "type.googleapis.com/google.iam.v1.Policy"
bindings: [
0: {
members: [
0: "user:alice@example.com"
]
role: "roles/bigquery.dataViewer"
}
輸出記錄
記錄條目在 Stackdriver Logging 中的保留時間是有限的,稱作保留期限,超過保留期限記錄條目將會被刪除。如果想要繼續保留記錄條目,您必須藉由配置記錄接收槽將記錄輸出到 Stackdriver Logging 外。
接收槽包含目的地和用來選擇要輸出的記錄條目的篩選器,並由以下屬性組成:
• 接收槽識別符:接收槽的名稱
• 父資源:父資源是您創建接收槽的地方,它可以是一個項目、資料夾、結算帳戶或組織
• 記錄篩選器:負責篩選要從接收槽輸出的記錄條目,讓您可以彈性地選擇要輸出所有記錄或特定記錄
• 目的地:放置符合篩選條件的記錄條目。Stackdriver Logging 支援三個目的地:Google Cloud Storage buckets、BigQuery datasets 和 Cloud Pub/Sub topics
• 編寫者身分:被授權能寫入目的地的服務帳戶
您必須要先配置記錄接收槽才能接收記錄,並且要注意,在接收槽創建前輸出的記錄是不可追朔的。
處理記錄的另一項功能 Aggregated Exports,它讓您能在 Cloud IAM 組織或資料夾級別設立接收槽,並從組織或資料夾內的所有項目中輸出稽核記錄。例如:以下的 gcloud 指令是將您整個組織中所有的管理活動記錄輸出到單一 BigQuery 接收槽中。
$ gcloud logging sinks create my-bq-sink
bigquery.googleapis.com/projects/my-project/datasets/my_dataset
--log-filter='logName: "logs/cloudaudit.googleapis.com%2Factivity"'
--organization=1234 --include-children
請注意,匯總輸出接收槽有時會輸出非常多的記錄條目,因此在設計匯總輸出輸出您想要儲存的資料時,請注意以下幾點最佳實踐方法:
• 確保記錄有確實輸出以獲得更長的保留時間
• 確保針對輸出接收槽的目的有設置適當的IAM控制
• 為您的組織設計匯總輸出,用來篩選和輸出對未來分析有助益的數據
• 在開始接收記錄前配置記錄接收槽
• 遵循此篇文章中對常見記錄輸出方案的最佳做法
排除管理
Stackdriver Logging 提供了排除篩選器,讓您可以完全排除特定產品的特殊記錄訊息或符合特定查詢的訊息。您也可以選擇只採樣某些訊息,以便只有一部分訊息出現在 Stackdriver Logs Viewer 中。排除的記錄條目不列入提供給項目的 Stackdriver Logging 記錄配額。
在排除記錄條目前,也可以輸出記錄條目。更多相關資訊請參閱輸出記錄。排除這種干擾不僅會讓查看記錄變得更容易,還可以讓您減少每個月記錄配額的費用。
最佳實踐:
確保您使用排除篩選器來排除無用的日誌數據。例如,您不需要在開發項目中記錄數據存取記錄。儲存數據存取記錄是一項付費服務 (請參閱我們的記錄配額和涵蓋費用),因此記錄多餘的數據會導致不必要的開銷
重點提醒
雲端稽核記錄是功能強大的工具,可幫助您管理和檢修 GCP 環境,並展示合規性。在開始設置您的記錄環境時,請記住以下幾點最佳實踐:
• 在讓開發人員和生產項目使用前,以測試項目來驗證數據存取稽核集合的配置
• 確保您已設定適當的IAM控件限制可以存取稽核記錄的人員
• 確定是否需要輸出記錄以保留較長的時間
• 針對輸出接收槽的目的地設置適當的IAM控件
• 設計匯總輸出,讓您的組織可以篩選和輸出數據供未來分析使用
• 在開始接收記錄前配置記錄接收槽
• 遵循此篇文章中對常見記錄輸出方案的最佳做法
• 確保使用排除篩選器來排除無用的記錄數據。