設(shè)置透明數(shù)據(jù)加密TDE
透明數(shù)據(jù)加密TDE(Transparent Data Encryption)可對數(shù)據(jù)文件執(zhí)行實時I/O加密和解密,數(shù)據(jù)在寫入磁盤之前進行加密,從磁盤讀入內(nèi)存時進行解密。TDE不會增加數(shù)據(jù)文件的大小,您無需更改任何應(yīng)用程序,即可使用TDE功能。為提高數(shù)據(jù)安全性,您可以通過控制臺啟用TDE功能,對實例數(shù)據(jù)進行加密。
前提條件
實例架構(gòu)為副本集實例或分片集群實例。
實例的存儲引擎為WiredTiger。
實例的存儲類型為本地盤版。
實例的數(shù)據(jù)庫版本為4.0或4.2版本。如果實例數(shù)據(jù)庫版本過低,您可以升級數(shù)據(jù)庫大版本。
說明正式開通TDE功能前,您可以創(chuàng)建一個4.0或4.2版本的按量付費實例來測試應(yīng)用與版本兼容性,測試完畢可釋放該實例。
如果您的實例不滿足實例架構(gòu)或存儲引擎的條件,您可以通過其他方式變更,詳情請參見變更配置方案概覽。
影響
開通TDE功能的過程中,實例會重啟一次并出現(xiàn)連接閃斷,建議您在業(yè)務(wù)低峰期操作并確保應(yīng)用有重連機制。
開通TDE功能后,會增加實例的CPU使用率。
加密后的集合不再支持通過物理備份恢復(fù)至自建數(shù)據(jù)庫。如果您需要將加密后的集合恢復(fù)到自建數(shù)據(jù)庫,您可以通過邏輯備份恢復(fù)至自建數(shù)據(jù)庫,具體請參見通過邏輯備份恢復(fù)至自建數(shù)據(jù)庫。
注意事項
TDE功能開通后無法關(guān)閉。
已開通TDE功能的實例釋放后,不支持從回收站中恢復(fù)。
當(dāng)前TDE功能的開通粒度為實例,僅支持對集合進行加密。如果您需要對字段進行加密,請參見手動字段級加密(僅支持MongoDB 4.2版本實例)。
說明如果業(yè)務(wù)上有特殊需求,您可以在創(chuàng)建集合時,指定該集合不被加密。如何設(shè)置,請參見設(shè)置指定的集合不被加密。
TDE功能開通后,僅加密新創(chuàng)建的集合,已有的集合不會被加密。
TDE功能所使用的密鑰,由密鑰管理服務(wù)KMS(Key Management Service)統(tǒng)一生成和管理,云數(shù)據(jù)庫MongoDB不提供加密所需的密鑰和證書。密鑰管理服務(wù)KMS的更多信息,請參見什么是密鑰管理服務(wù)。
實例開通TDE加密后,不支持更換密鑰。如需更換密鑰,您可以使用DTS將數(shù)據(jù)遷移到使用新密鑰的新實例上,如何遷移數(shù)據(jù),請參見云數(shù)據(jù)庫MongoDB實例間遷移。
操作步驟
訪問MongoDB副本集實例列表或MongoDB分片集群實例列表,在上方選擇地域,然后單擊目標(biāo)實例ID。
在目標(biāo)實例頁面的左側(cè)導(dǎo)航欄,單擊 。
打開TDE狀態(tài):右側(cè)的開關(guān)。
在彈出的開通TDE對話框中,根據(jù)實際需要選擇生成方式。
使用自動生成密鑰:使用系統(tǒng)自動生成的密鑰。
使用自定義密鑰:根據(jù)業(yè)務(wù)需要,在下拉列表中選擇密鑰。如果下拉列表中不存在目標(biāo)密鑰,您可以先創(chuàng)建密鑰,然后進行選擇。創(chuàng)建方法請參見創(chuàng)建密鑰。
單擊確定。
實例進入TDE修改中狀態(tài),當(dāng)轉(zhuǎn)變?yōu)?b data-tag="uicontrol" id="uicontrol-ev1-wug-ddg" class="uicontrol">運行中狀態(tài)時,代表操作完成。
設(shè)置指定的集合不被加密
開啟TDE加密后,所有新創(chuàng)建的集合都會被加密。如果業(yè)務(wù)上有特殊需求,您可以在創(chuàng)建集合時,指定該集合不被加密。
執(zhí)行如下命令創(chuàng)建集合,指定該集合不被加密。
語法:
db.createCollection("<collection_name>",{ storageEngine: { wiredTiger: { configString: "encryption=(name=none)" } } })
說明命令中的
collection_name
為集合名。示例:
db.createCollection("customer",{ storageEngine: { wiredTiger: { configString: "encryption=(name=none)" } } })