如何保護從日常執行腳本中獲取的數據庫轉儲
在我的一個 mysql 從屬伺服器中,我編寫了一個每日執行腳本,它 1) 停止從屬伺服器,2) 進行數據庫轉儲,3) 再次啟動從屬伺服器,4) 對其進行加密,5) 將其複製到我的 s3 儲存桶中。
我正在使用 aws-cli 將轉儲複製到 s3-bucket。這裡的問題是,如果有人可以訪問伺服器,他也可以從儲存桶中刪除轉儲,因為 aws-cli 授予儲存桶的更新/刪除訪問權限。
我如何將轉儲複製到某個地方(最好是 s3),如果有人可以訪問數據庫伺服器,則無法刪除轉儲。
在考慮它時,我能想到的是,我需要在不同的伺服器上提供一個服務,該服務接受轉儲作為輸入,然後將其保存到 s3。此服務不接受任何其他類型的請求。通過這種方式,我為數據庫備份添加了額外的安全層。問題是我不知道任何這樣的系統。
更普遍的問題是,人們通常如何保護他們的數據。如果有人可以訪問我的主數據庫,即使是通過 sql 注入,他也會導致所有複製被截斷或刪除。在任何這種情況下,都需要進行某種定期備份。在註入的情況下,備份是安全的,但在訪問伺服器的情況下則不是。
最小權限原則建議您應該做的第一件事是從進行備份的 IAM 使用者中刪除任何不必要的權限。
但是,權限的粒度使得
s3:PutObject
僅擁有該權限的帳戶仍然可以覆蓋現有對象,這使得惡意使用者有可能通過將備份替換為空文件來“刪除”您的備份。啟用對象版本控制是剩下的一塊拼圖,因為版本控制可以防止有
s3:PutObject
但沒有s3:DeleteObject
權限的使用者通過覆蓋來永久刪除對象。具有s3:DeleteObjectVersion
權限的使用者仍然可以刪除版本化對象。可能需要的最後一步是在儲存桶上啟用MFA 刪除。此配置還要求儲存桶啟用版本控制,需要多重身份驗證才能刪除儲存桶中任何對象的任何版本。