如果資訊代表黃金,那資料庫就意味著寶庫。Web 應用程式會將其最有價值的資料保存在資料庫中,如果該資料遭盜取或刪除,將會有許多網站就此消失。本篇文章為您提供資料庫安全的最佳實踐法則,保護您架設在 GCP 上的資料庫。
資料庫的安全機制遠在第一筆紀錄被儲存進資料庫之前就被啟動,所以在設計主機環境時,必須考慮到整體環境對資料庫安全性的影響。資料庫本身和外部環境都有很多需要考慮的事情,無論是防火牆規則的設定或是日誌的紀錄。
首要考慮
提到資料庫安全性時,其中一個基本決策需要思考的是:自行部署資料庫伺服器,還是使用 Google 的託管服務?這個決定視您現有的架構、員工的技術能力、企業政策和專業功能需求而定。
在缺乏一定要自行架設資料庫的理由之下,我們建議的是採用託管的方式處理。託管的資料庫服務在設計上是能處理 Google 級別的資料規模,並同時擁有 Google 的安全模型優勢。採用共同責任模式可以讓那些需要遵守 PCI、SOX、HIPAA、GDPR 和其他法規的企業組織大量減少其耗費的精力。即使不是每個企業組織都需符合這些法規,但我們還是建議以 PCI SAQ A(支付卡行業自我評估問卷 A 類)作為最佳實踐的基準。
存取控制
您應該盡可能對資料庫的存取進行限制。自行架設的資料庫應該透過 VPC 防火牆規則對存取加以限制,讓只有經過授權的主機可以存取資料庫。所有非特定需求的端口 (port) 和端點 (endpoint) 應該被禁止。如果可以的話,請確保對防火牆的更動都能記錄下來,並為非計畫中的更動增加警報通知。 在 GCP 的防火牆規則中,這些都會自動設定。像 Forseti Security 這類的工具可以監控並管理資料庫的安全配置,不論是使用 Google 資料庫託管服務或是自行架設在 Google Compute Engine 虛擬機器的資料庫都適用。
在準備啟動資料庫時,還須考慮其執行環境。對於託管的資料庫服務,可以透過服務帳戶自動更新密鑰來簡化對資料庫的授權,對於那些自行架設在 GCP 上的資料庫您可以使用雲端密鑰管理系統 (KMS) 來進行密鑰更新管理。
資料安全
在實施計畫時,請不要遺漏了資料保存政策這件事情。您有義務將未使用的敏感資料歸檔或縮減。 許多法規提供了具體指南來識別哪些是敏感資料。(如:HIPAA、PCI、GDPR、SOX)。您可能會發現從悲觀安全模型 (pessimistic security model) 的角度來思考是有幫助的,悲觀安全模型假設您的應用程式將被破解且您的資料庫將被洩露。這有助於您在資料保存、靜態加密等方面的政策做出一些決定。
假設最壞的情況發生且您的資料庫受到損害,您應該收到有關意外事件發生的警報通知,例如網路流出流量達到峰值的事件。藉由使用 “canary” 資料可能也對你的組織有幫助 – 所謂的 “canary” 資料是在正常情況下在現實世界中永遠不會看到的應用程式特製訊息。您的應用程式應設計成可以察覺出有 canary 帳戶登入,或有 canary 數值在網路上流通。如果找到 canary,您的應用程式應向您發送警報通知並立即採取措施以阻止可能的危害。在某種程度上,canary 資料類似於零售商店的防盜標籤。這些安全設備具備檢測特性,可以隱藏在產品內部。具有安全意識的零售商將在其商店中設置傳感器,以檢測未經授權的庫存清除操作。
您應該開發並測試一項災難復原的計劃。建立資料庫副本僅能解決某些故障造成的問題,但不能解決資料被竄改甚或刪除的問題。一個好的災難復原計畫能讓你復原資料庫,即時遭受到資料遺失,硬體失效,網路不可用以及其他任何你可以預期的災難事件。跟以往相同的是,必須定期測試和監控備份系統,以確保能從災難事件後復原。
配置
如果您部署的資料庫使用預設登入帳戶,則您的首要任務應先更改或停用該帳戶。此外,如果您的任何資料庫帳戶受密碼保護,請確保這些密碼夠長且複雜;不要使用簡單或空密碼。如果您可以用雲端 KMS,那 KMS 肯定是您的首選。此外,請務必制定憑證更新計劃並制定非週期性密鑰更新的標準。
無論您使用哪種方法進行身份驗證,都應該為不同權限,如讀取、寫入、最高管理,準備不同憑證。即使應用程式同時執行讀取和寫入操作,個別的憑證也可以限制錯誤代碼或未經授權的存取所造成的損壞。
每個需要存取資料庫的人都應擁有自己的私人憑證。分別為每個不同的應用程式創建服務帳戶,並僅提供該服務所需的權限。雲端身份識別與存取管理 (IAM) 是一種用於管理 GCP 用戶權限的強大工具;應避免使用通用的管理員帳戶登入,因為它們掩蓋了用戶的真實身份。用戶憑證應將權限限制為履行其工作所需的最低權限。例如,一個專門製作資料報表的用戶不應該具有能修改資料庫綱要的權限。考慮透過檢視表 (view)、預存程序 (stored procedure)、細化權限來進一步限制對用戶需要知道的內容的存取,並進一步減少SQL資料隱碼攻擊 (SQL injection) 的漏洞。
日誌的紀錄是任何應用程式的關鍵部分。資料庫應該要為所有關鍵事件產生日誌,尤其是登入和管理操作的記錄。這些日誌應整合在與資料庫不同主機環境的日誌服務中,而且該日誌服務是不可抹除與竄改的。無論是使用 Stackdriver 還是其他服務,對日誌的憑證和讀取存取權限都應與資料庫憑證完全分開。
無論如何,您應該裝備可以檢測和阻止嘗試暴力登入的監控系統或代理設備。如果您正在使用 Stackdriver,則可以搭配 Cloud Function webhook 設置警報規則,用以追蹤近期的登入嘗試紀錄,並主動建立防火牆來阻擋可能的濫用。
資料庫應該要使用特定應用程式的帳戶來操作,而不是 root 或 admin。應該使用適當的文件權限和擁有權來保護主機文件,以防止未經授權的執行和更改。符合 POSIX 標準的操作系統提供 chown and chmod 來設置文件權限,Windows 服務器也提供了幾種工具。諸如 Ubuntu 的 AppArmor 等工具甚至更進一步將應用程式限制在一組有限的資源中。
應用程式注意事項
在設計應用程式時,一個重要的最佳實踐法則是在存取資料庫時使用加密連線,這能降低網路被監聽時,無意間洩漏資料或憑證的可能性。Cloud SQL 用戶可以使用 Google’s encrypting SQL proxy。某些加密方法還允許您的應用程式對資料庫主機進行身份驗證,以減少冒充或中間人攻擊的威脅。
如果您的應用程式處理特別敏感的訊息,應該首先考慮是否有保留所有資料的需要。在某些情況下,處理這種敏感的資料,會受到法規所約束,在這種情況下,法規會代替您決定是否需要保留所有資料。即便如此,額外的控制措施是要非常謹慎的,以確保資料的安全性。除了自動靜態加密之外,或許還可以在應用程式級別加密某些資料。如果你所需要知道只是:將來是否再次顯示相同資料,您可以將資料轉換成雜湊值。如果需要使用資料來訓練機器學習模型,請參考有關在機器學習中管理敏感資料的文章。
應用程式的安全性可以被用來加強資料庫資料的安全,但不至於能用來取代資料庫安全。對於任何傳送到資料庫的輸入資料,無論是欲儲存的資料,還是用於查詢的參數,都必須透過安全措施處理。所有應用程式的代碼都應進行同儕審核。針對像是 SQL 資料隱碼攻擊 (SQL injection) 和跨網站指令碼攻擊 (XSS) 等常見漏洞的安全掃描應該是自動執行並且定期運行。
擁有資料庫存取權限的人,其所使用的電腦都應遵守組織安全策略。資安史上一些最慘烈的案例是來自於惡意軟體、怠於更新、錯誤處理的可攜式資料存儲設備的影響。一旦工作站被傳染,它觸及到的其他每個系統都可能被傳染,這也適用於印表機,複印機和任何其他連接設備。
不論是什麼情況,都不要將未經過處理的生產環境的資料用於開發或測試環境中。這一規範不僅提高資料庫安全性,且可以降低非生產環境不經意發送電子郵件、計費、更改狀態等的可能性。
自行架設資料庫的問題
雖然 Google 的共享責任模型能讓託管資料庫的使用者降低一些安全疑慮,但卻不能提供自架資料庫所擁有的完整的資料庫控制權。在自行架設資料庫的情況下,資料庫管理者有責任確保能夠防範不同的攻擊。
如果您正在運行自行架設的資料庫,請確保該服務在其自己的主機上運行時,不要同時運行其他應用程式的功能。資料庫不應該與 Web 主機、其他 Web 可存取的服務共享主機。如果無法做到這一點,則服務和資料庫應駐留在共享的受限網路中,並且讓越少的其他主機存取。邏輯主機是運行應用程式本身的最低級別的主機或虛擬主機。在 GCP 中,這可以是容器或虛擬機,而在地端環境中的邏輯主機可以是實體機、虛擬機、容器。
一個常見自行架設資料庫的使用案例是在混合雲中進行備份。例如,部署混合雲資料庫可以在雲端中擁有主本及一至多個副本,並同時在地端備份。在這種情況下,請勿將資料庫連接到公司 LAN 或其他廣泛可用的網路。同時,應確認本地硬體安全性無虞,因此不能被盜或被篡改。適當的實體環境安全機制採用實體環境存取控制,自動產生存取日誌和遠端影像監控。
自行架設的資料庫也需要您經常關注、確保更新。制定軟體更新策略並為過期的軟體程式設置定期警報通知。考慮使用系統管理 (Ubuntu,Red Hat) 或配置管理工具,可讓您輕鬆對所有資料庫實例批量執行操作、監控並升級軟體版本以及配置新的資料庫實例。確認有持續監控關鍵檔案系統的週期外變更 (例如包含配置設定和可執行檔的目錄)。
有數個規範制度皆建議使用入侵檢測系統意即 IDS。IDS 的基本功能是監控未經授權的系統存取,並立即反應狀況。並且有許多可運用的產品能在每個服務器上運作,也能在專屬網域主機上運行。在IDS中的選擇,可能會受到公司或應用程式特有的因素而影響。IDS還可以用作canary 資料的監控系統。
所有資料庫都有特定的控制設定,您必須調整這些設定以強化服務。您應閱讀資料庫製造商所寫的文章,以取得加強伺服器安全性和軟體安全性的建議。在下方的延伸閱讀中放置了幾個常用的加強資料庫安全的指南連結。
應盡可能的加強底層作業系統的安全性,並停用對資料庫沒有幫助的應用程式。您可以透過沙盒化 (sandbox) 或容器化資料庫達到進一步的隔離。
(原文翻譯自 Google Cloud )