cover

離職三年的同事,公鑰還躺在某台機器的 authorized_keys 裡。某個服務在 production 跑著,原負責人走了,沒人敢關。稽核員問「持卡人資料存在哪幾台機器」,你答不出來——不是因為沒人管,是因為沒有人有那份清單。

這是不做清查的下場。但更常見的情況是另一種:清查做了,而且等於沒做。

為什麼清查常常是白工

去年掃了一份表,今年再掃一份表,兩份都好好歸檔在雲端硬碟。然後呢?

你沒辦法用肉眼比對兩份幾十列的表格。所以每一次清查,都是重新認識自己的系統一遍——掃完、看完、歸檔、下次從頭再來。第二次跟第一次花一樣多時間,而且第二次通常更潦草,因為你已經知道「反正上次也沒發現什麼」。

問題出在產物的形式。清單只能告訴你「現在有多少」,不能告訴你「這次比上次多了什麼」。 而你真正想知道的永遠是後者:多了誰、少了誰、誰的權限變大了。

所以整套方法的第一個設計決定是:清查的產物是差異,不是清單。要做到這件事,你需要一份基線。

五個問題,六個對象共用

不管你要盤點的是 IAM 身分、SSH key、production 在跑的服務、部署版本、log 來源,還是 WAF 規則,要回答的是同樣五個問題:

  1. 盤點對象是什麼
  2. 怎麼掃出來
  3. 跟什麼基線比
  4. 有落差誰負責、多久內處理
  5. 多久掃一次

換對象的時候,變的只有第 1 題和第 2 題。第 3 到 5 題的做法完全一樣——這就是為什麼值得先把骨架搭好,再套六個對象,而不是六個對象各搞各的。

基線不是另一份清單,是你的判斷

這是最容易做錯的地方。很多人的「基線」就是第一次掃描的結果——那不是基線,那只是比較舊的現況。

基線要記的是你的判斷:這個帳號是誰的、該不該留、如果是例外放行,理由是什麼。這些東西機器掃不出來,只能人填;而且填一次之後可以一直用,不需要每季重填。

所以資料要分三塊存,各自的更新規則完全不同:

區塊內容誰維護重掃時怎麼處理
事實區掃描結果:現在有哪些身分、屬性是什麼掃描指令產出整份覆蓋,任何人都不手改
判斷區這是誰的、該留該收、例外理由與到期日人填只增不覆蓋,是累積的資產
落差區兩者比對出來的差異公式自動算每次重算

把事實跟判斷混在同一張表,就會發生這件事:重掃會蓋掉你上次填的判斷,所以你不敢直接覆蓋,所以你手工比對、手工補,所以每季重看幾十列。那個「不敢覆蓋」的瞬間,就是清查退化成白工的起點。

三塊分開之後,重掃變成一個沒有心理負擔的動作,而落差會自己浮出來。

落差只有四種

比對之後,需要人花時間看的東西只會落在這四類:

新出現——掃到了,但判斷區沒有這筆。有人開了新東西還沒被判斷過。這類最多,也最該儘快處理,因為積著積著就沒人記得為什麼會有它。

消失——判斷區有,但這次掃不到。要確認它是照計畫刪掉的,還是有人自己刪的。後者比前者嚴重得多。

屬性變化——兩邊都有,但關鍵屬性變了。本來有 MFA 現在沒了、本來唯讀現在可寫。這類最安靜,也最危險。

例外過期——判斷區記著「例外放行」,到期日過了。

第四類值得特別講。清查一定會遇到「這個確實不合規,但現在不能動」的東西,於是你放行。放行沒問題,沒有到期日才有問題。 沒有到期日的例外會變成永久例外,兩三年後沒人記得當初為什麼放行,稽核員問你,你只能說「這個一直都是這樣」。到期日的作用不是逼你解決,是逼你重新確認一次還要不要放行。

嚴重度要先定義才能用

落差不是每一條都同等重要,但分級之前要先講清楚每一級是什麼意思,不然三個人填三種標準。

級別判準典型例子
立刻處理有實際暴露風險,不能等下一個週期有管理員權限卻沒開 MFA、離職者帳號仍有效、金鑰外流
本季處理不合規,但沒有立即被利用的風險金鑰超過輪替期限沒換、帳號長期沒活動但還開著
記錄即可確認過沒問題,留紀錄備查新的服務帳號,用途明確、已完成判斷

用文字不用顏色。顏色在螢幕上好看,但沒辦法排序、篩選、統計——而報告要的正是這三件事。

報告不是把表格貼上去

工作表是給執行的人填的,報告是給主管和稽核員看的,這兩者的讀者完全不同。主管不會看幾十列的表,他要知道的是變化和收尾。

一頁就夠,固定四段:

第一段,涵蓋範圍。 掃了哪些、沒掃到哪些、為什麼。這段最常被省略,也是省略之後最致命的一段——報告只講掃到的東西,就是在製造安全的假象。稽核員問一句「那個帳號怎麼不在裡面」,整份報告的可信度就沒了。掃不到本身就是一種落差,要列出來並寫清楚原因。

第二段,本季落差。 立刻處理和本季處理的逐條列出,記錄即可只給數字。

第三段,上季追蹤。 上季幾件、關掉幾件、逾期幾件,逾期的要寫原因。

第四段,例外清單。 目前有效幾件、本季到期幾件。

第三段是整份報告的重心。稽核員真正在看的不是你發現了多少問題——發現問題是好事——他在看你發現之後有沒有關掉。一份只有第二段沒有第三段的報告,實際上是在說:「我們每季都認真發現問題,然後什麼都沒做。」

先手動跑一輪,再談自動化

這六個對象都是同一個形狀:查詢、比對、出差異。這形狀天生適合自動化,也確實有現成工具能把雲端資源變成可以用 SQL 查的表,一句查詢就取代整段手動流程。

但不要一開始就上。先用最土的方式跑通一輪——手動下指令、手動匯入、手動填判斷。跑完你才會知道自己真正需要哪些欄位、哪些欄位填了根本沒人看。欄位沒想清楚就先自動化,結果是自動化產出一堆沒人看的資料,而且因為是自動產的,沒人好意思說它沒用。

跑通一個對象之後再擴散。第一個建議從身分盤點開始:工具現成、稽核第一個問的就是它,而且第一次跑一定會掃到該收回的權限——有產出,方法才推得下去。


延伸閱讀


清查真正的產物不是那份表,是那份表跟上一份的差別。如果你的清查流程跑完之後,沒有任何一句話是以「這次比上次」開頭的,那它還沒開始運作。