Mysql

如何保護從日常執行腳本中獲取的數據庫轉儲

  • September 29, 2015

在我的一個 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 刪除。此配置還要求儲存桶啟用版本控制,需要多重身份驗證才能刪除儲存桶中任何對象的任何版本。

引用自:https://serverfault.com/questions/723163