MinIO 部署上的 KES
本教學將說明如何設定 KES 伺服器,然後將 MinIO 部署設定為 KES 用戶端,以進行物件加密。
本教學著重於簡單的 KES 伺服器設定。我們使用本機檔案系統作為金鑰儲存庫,並省略 KMS 整合。
在生產環境中,請選擇任何符合您需求的支援 KMS 實作。
KES 伺服器設定
-
產生 KES 伺服器私密金鑰和憑證
為 KES 伺服器產生 TLS 私密金鑰和憑證。此金鑰用於伺服器位址的網域名稱驗證。
KES 伺服器預設為 安全,只能使用 TLS 執行。在本指南中,為求簡便,我們使用自我簽署憑證。
以下命令會產生新的 TLS 私密金鑰 (
private.key
) 和針對 IP127.0.0.1
和 DNS 名稱localhost
發出的自我簽署 X.509 憑證 (public.crt
)$ kes identity new --ip "127.0.0.1" localhost Private key: private.key Certificate: public.crt Identity: 2e897f99a779cf5dd147e58de0fe55a494f546f4dcae8bc9e5426d2b5cd35680
現有的金鑰和憑證如果您已經有 TLS 私密金鑰和憑證,例如來自 WebPKI 或內部憑證授權單位,您可以使用它們來取代。請記得調整tls
組態區段。 -
產生 MinIO 認證
MinIO 需要認證才能存取 KES 伺服器。以下命令會從提供的 TLS 私密/公開金鑰對產生雜湊的身分識別
$ kes identity new --key=client.key --cert=client.crt MinIO Private key: client.key Certificate: client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
身份識別碼
02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
是client.crt
中公開金鑰的唯一指紋。使用此 API 金鑰識別碼來驗證 MinIO 用戶端對 KES 伺服器的連線。您可以隨時從同一個憑證重新計算此識別碼
$ kes identity of client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
-
設定 KES 伺服器
此程序提供一組基本步驟,可能需要大幅修改以符合您的目標。有關針對特定金鑰管理系統供應商設定 KES 伺服器的詳細說明,請參閱支援目標的整合頁面。
建立 KES 伺服器設定檔:
config.yml
。請確保policy
區段中的識別碼與您的client.crt
識別碼相符。address: 0.0.0.0:7373 # Listen on all network interfaces on port 7373 admin: identity: disabled # We disable the admin identity since we don't need it in this guide tls: key: private.key # The KES server TLS private key cert: public.crt # The KES server TLS certificate policy: my-app: allow: - /v1/key/create/minio-* - /v1/key/generate/minio-* - /v1/key/decrypt/minio-* identities: - 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b # Use the identity of your client.crt keystore: fs: path: ./keys # Choose a directory for the secret keys
-
啟動 KES 伺服器
kes server --config config.yml --auth off
Linux 交換保護在 Linux 環境中,KES 可以使用
mlock
系統呼叫來防止作業系統將記憶體中的資料寫入磁碟(交換)。這樣可以防止洩漏敏感資料。使用以下命令允許 KES 使用
mlock
系統呼叫,而無需以root
權限執行sudo setcap cap_ipc_lock=+ep $(readlink -f $(which kes))
啟動具有記憶體保護的 KES 伺服器實例
kes server --config config.yml --auth off --mlock
MinIO 伺服器設定
在以下步驟 2-6 中定義的環境變數可以定義為 MinIO 伺服器環境變數檔案的一部分。
-
安裝 MinIO
您可以下載靜態二進位檔案,或遵循MinIO 快速入門指南。
有關在其他拓撲(例如多個磁碟機或多個節點)上設定 MinIO 伺服器的更詳細說明,請參閱安裝文件。
選擇您的作業系統的標籤,以查看特定作業系統的快速入門。
-
設定
MINIO_KMS_KES_ENDPOINT
此環境變數會告知 MinIO 要存取哪個 KES 伺服器
export MINIO_KMS_KES_ENDPOINT=https://127.0.0.1:7373
-
設定 MinIO 用戶端憑證
這些環境變數設定 MinIO 用來存取 KES 伺服器的存取憑證
export MINIO_KMS_KES_CERT_FILE=client.crt
export MINIO_KMS_KES_KEY_FILE=client.key
-
設定 MinIO 預設金鑰
此環境變數設定 MinIO 在其 S3 用戶端未指定加密金鑰時要使用的預設金鑰。
export MINIO_KMS_KES_KEY_NAME=minio-default-key
如果此金鑰不存在,MinIO 會自動建立。 -
信任 KES 伺服器憑證
如果 KES 伺服器使用受信任憑證授權單位發出的憑證,則此步驟為可選步驟。
當使用自我簽署憑證時,MinIO 無法驗證 KES 伺服器憑證。此環境變數會手動建立信任關係。
export MINIO_KMS_KES_CAPATH=public.crt
在此情況下,
public.crt
是 KES 伺服器的公開憑證。 -
設定 MinIO 根憑證
export MINIO_ROOT_USER=minio export MINIO_ROOT_PASSWORD=minio123
-
啟動 MinIO 伺服器
在啟動 MinIO 伺服器之前,必須先執行 KES 伺服器。MinIO 伺服器在啟動過程中需要存取 KES 伺服器。minio server /data
加密儲存桶
使用 PutBucketEncryption
S3 API 在特定儲存桶上啟用伺服器端加密。這可以使用MinIO 用戶端完成。
-
建立金鑰
有關完整參考,請參閱
mc admin kms key
文件。mc admin kms key create <alias> minio-key-name
將
minio-key-name
替換為您要用於金鑰的名稱。 -
設定儲存桶
使用
mc encrypt set
將伺服器端加密設定新增至您的儲存桶。例如
mc encrypt set sse-kms minio-key-name <alias>/my-bucket
將
minio-key-name
替換為您在上一個步驟中建立的金鑰名稱。