🚀 免費嘗試 Zilliz Cloud,完全托管的 Milvus,體驗速度提升 10 倍!立即嘗試

milvus-logo
LFAI
  • Home
  • Blog
  • Milvus Vector 資料庫如何確保資料安全?

Milvus Vector 資料庫如何確保資料安全?

  • Engineering
September 05, 2022
Angela Ni

Cover image 封面圖片

為了充分考慮您的資料安全,Milvus 2.1 正式提供使用者驗證和傳輸層安全 (TLS) 連線。如果沒有使用者認證,任何人都可以使用 SDK 存取向量資料庫中的所有資料。但是,從 Milvus 2.1 開始,只有那些擁有有效用戶名和密碼的用戶才能訪問 Milvus 向量資料庫。此外,在 Milvus 2.1 中,資料安全性進一步受到 TLS 的保護,可確保電腦網路中的安全通訊。

本文旨在分析 Milvus 向量數據庫如何通過用戶認證和 TLS 連接來確保數據安全,並解釋作為一個希望確保數據安全的用戶,如何在使用向量數據庫時利用這兩個功能。

跳至:

什麼是資料庫安全,為什麼它很重要?

資料庫安全是指為確保資料庫中所有資料的安全和保密而採取的措施。最近發生在Twitter、Marriott 和 Texas Department of Insurance 等公司的資料外洩事件,讓我們對資料安全問題更加警覺。所有這些案例不斷提醒我們,如果數據沒有得到很好的保護,公司和企業使用的數據庫不安全,就可能遭受嚴重的損失。

Milvus 矢量資料庫如何確保資料安全?

在目前的 2.1 版本中,Milvus 向量資料庫嘗試通過認證和加密來確保資料庫的安全性。具體來說,在存取層級上,Milvus 支援基本使用者驗證,以控制誰可以存取資料庫。同時,在資料庫層面上,Milvus 採用了傳輸層安全 (TLS) 加密協定來保護資料通訊。

用戶認證

為了資料安全,Milvus 的基本使用者認證功能支援使用使用者名稱和密碼存取向量資料庫。這意味著用戶端只有在提供經過認證的用戶名和密碼後才能訪問 Milvus 實例。

Milvus 向量資料庫的驗證工作流程

所有 gRPC 請求都由 Milvus 代理處理,因此驗證由代理完成。使用憑證登入以連線至 Milvus 實例的工作流程如下。

  1. 為每個 Milvus 實例建立憑證,加密密碼儲存在 etcd 中。Milvus 使用bcrypt進行加密,因為它實作了 Provos 和 Mazières 的自適應雜湊演算法
  2. 在客戶端,SDK 會在連線到 Milvus 服務時傳送密碼文字。base64 密文 (:) 以密碼authorization 附加到元資料。
  3. Milvus 代理會攔截請求並驗證憑證。
  4. 憑證會緩存在本機的代理中。

authetication_workflow 認證工作流程

更新憑證時,Milvus 的系統工作流程如下

  1. 當插入、查詢、刪除 API 被呼叫時,由 Root coord 負責憑證。
  2. 當您因為忘記密碼而更新憑證時,新密碼會持久化在 etcd 中。然後,代理本機快取記憶體中的所有舊憑證都會失效。
  3. 認證攔截器會先從本機快取中尋找記錄。如果快取記憶體中的憑證不正確,就會觸發 RPC 呼叫,從根坐標取得最新記錄。本地快取記憶體中的憑證也會相應更新。

credential_update_workflow 憑證更新工作流程

如何在 Milvus 向量資料庫中管理使用者驗證

要啟用認證,首先需要在milvus.yaml 檔案中設定 Milvus 時,將common.security.authorizationEnabled 設定為true

啟用後,Milvus 會建立一個根使用者。這個 root 使用者可以使用Milvus 的初始密碼連線到 Milvus 向量資料庫。

from pymilvus import connections
connections.connect(
    alias='default',
    host='localhost',
    port='19530',
    user='root_user',
    password='Milvus',
)

我們強烈建議在第一次啟動 Milvus 時更改 root 用戶的密碼。

然後,root 用戶可以進一步創建更多的新用戶,通過運行下面的命令創建新用戶來驗證訪問。

from pymilvus import utility
utility.create_credential('user', 'password', using='default') 

在創建新用戶時,有兩點需要注意:

  1. 至於新使用者名稱,其長度不能超過 32 個字元,並且必須以字母開頭。使用者名稱中只允許包含底線、字母或數字。例如,不接受 "2abc!"的使用者名稱。

  2. 至於密碼,其長度應為 6-256 個字元。

一旦新憑證設定完成,新使用者就可以使用該使用者名稱和密碼連線到 Milvus 實例。

from pymilvus import connections
connections.connect(
    alias='default',
    host='localhost',
    port='19530',
    user='user',
    password='password',
)

與所有認證程序一樣,您不必擔心忘記密碼。現有使用者的密碼可以用以下指令重設。

from pymilvus import utility
utility.reset_password('user', 'new_password', using='default')

閱讀Milvus 文件了解更多關於使用者認證的資訊。

TLS 連線

傳輸層安全(TLS)是一種認證協定,在電腦網路中提供通訊安全。TLS 使用憑證在兩個或多個通訊方之間提供認證服務。

如何在 Milvus 向量資料庫中啟用 TLS

要在 Milvus 中啟用 TLS,您需要先執行以下指令,準備兩個用於產生證書的檔案:一個名為openssl.cnf 的預設 OpenSSL 配置檔案,以及一個名為gen.sh 用於產生相關證書的檔案。

mkdir cert && cd cert
touch openssl.cnf gen.sh

然後您可以簡單地複製並貼上我們在此提供的設定到這兩個檔案。或者您也可以根據我們的配置進行修改,以更適合您的應用程式。

當這兩個檔案準備好後,您就可以執行gen.sh 檔案來建立九個證書檔案。同樣地,您也可以根據自己的需要修改九個證書檔案中的配置。

chmod +x gen.sh
./gen.sh

在使用 TLS 連線到 Milvus 服務之前,還有最後一個步驟。您必須將tlsEnabled 設定為true ,並在config/milvus.yaml 中為伺服器設定server.pemserver.keyca.pem 的檔案路徑。下面的程式碼是一個範例。

tls:
  serverPemPath: configs/cert/server.pem
  serverKeyPath: configs/cert/server.key
  caPemPath: configs/cert/ca.pem

common:
  security:
    tlsEnabled: true

然後您就可以使用 TLS 連線到 Milvus 服務了,只要您在使用 Milvus 連線 SDK 時為客戶端指定client.pem,client.key, 和ca.pem 的檔案路徑。下面的程式碼也是一個範例。

from pymilvus import connections

_HOST = '127.0.0.1'
_PORT = '19530'

print(f"\nCreate connection...")
connections.connect(host=_HOST, port=_PORT, secure=True, client_pem_path="cert/client.pem",
                        client_key_path="cert/client.key",
                        ca_pem_path="cert/ca.pem", server_name="localhost")
print(f"\nList connections:")
print(connections.list_connections())

下一步

隨著 Milvus 2.1 正式發行,我們準備了一系列介紹新功能的部落格。閱讀此系列部落格的更多內容:

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

繼續閱讀