使用 KES 的伺服器端物件加密
此程序假設您使用單一主機來執行 MinIO 和 KES 容器。 有關執行 KES 的說明,請參閱KES 文件。
作為此程序的一部分,您將會
對於生產協調環境,請使用 MinIO Kubernetes 運算子來部署租戶,並啟用 SSE,並配置為與您的 KMS 一起使用。
對於生產裸機環境,請參閱MinIO 在 Linux 上的文件,以取得有關使用 KES 和您的 KMS 配置 MinIO 的教學課程。
重要事項
在 MinIO 部署上啟用 SSE 會使用預設加密金鑰自動加密該部署的後端資料。
MinIO *需要*存取 KES 和外部 KMS,才能解密後端並正常啟動。KMS **必須**維護並提供對 MINIO_KMS_KES_KEY_NAME
的存取權。您無法稍後停用 KES 或在稍後「取消」 SSE 設定。
先決條件
確保 KES 可以存取受支援的 KMS 目標
此程序假設現有的 KES 安裝已連接到受支援的 KMS 安裝,兩者都可以從本機存取。 請參閱您的受支援的 KMS 目標的安裝說明,以部署 KES 並將其連接到 KMS 解決方案。
KES 操作需要未封印的目標
某些受支援的 KMS 目標允許您封印或解除封印保管庫執行個體。 如果配置的 KMS 服務已封印,KES 會傳回錯誤。
如果您重新啟動或以其他方式封印保管庫執行個體,則 KES 無法對保管庫執行任何加密操作。 您必須解除封印保管庫,以確保正常操作。
有關是否可能需要解除封印的更多資訊,請參閱您選擇的 KMS 解決方案的文件。
有關您選擇的受支援 KMS 的設定說明,請參閱 KES 文件
安裝 Podman 或類似的容器管理介面
此程序假設您已安裝並設定好可於「Rootfull」模式下運作的 Podman。
「Rootless」模式可能無法提供足夠的權限,以必要的安全性設定執行 KES。請參閱相關的「rootless」文件以獲取更多資訊。
使用伺服器端加密部署 MinIO 和 KES
在開始這些步驟之前,請先建立以下資料夾
mkdir -P ~/minio-kes-vault/certs
mkdir -P ~/minio-kes-vault/config
mkdir -P ~/minio-kes-vault/minio
對於 Windows 主機,請將路徑替換為 Windows 樣式的路徑,例如 C:\minio-kes-vault\
。
先決條件
根據您選擇的支援的 KMS 目標組態,您可能需要將 kes-server.cert
作為信任的憑證授權單位 (CA) 傳遞。請參考客戶端文件以了解信任第三方 CA 的說明。
1) 建立 KES 和 MinIO 組態
建立 KES 組態檔
使用您偏好的文字編輯器建立組態檔。以下範例使用
nano
nano ~/minio-kes-vault/config/kes-config.yaml
KES 使用 YAML 格式的組態檔。以下 YAML 提供使用 HashiCorp Vault 作為根 KMS 的最低要求欄位。您必須修改此 YAML 以反映您的部署環境。
address: 0.0.0.0:7373 # Disable the root administrator identity, as we do not need that level of access for # supporting SSE operations. admin: identity: disabled # Specify the TLS keys generated in the previous step here # For production environments, use keys signed by a known and trusted Certificate Authority (CA). tls: key: /certs/kes-server.key cert: /certs/kes-server.cert # Specify the path to CAs used by KES for validating client certificates # This can alternatively be a single CA # KES uses these CAs in addition to the system trust store for validating client certificates. ca: /certs/CAs/ # Sets access policies for KES # The `minio` policy grants access to the listed APIs. policy: minio: allow: - /v1/key/create/* # You can replace these wildcard '*' with a string prefix to restrict key names - /v1/key/generate/* # e.g. '/minio-' - /v1/key/decrypt/* - /v1/key/bulk/decrypt - /v1/key/list/* - /v1/status - /v1/metrics - /v1/log/audit - /v1/log/error identities: - MINIO_API_KEY_HASH # Replace with the hash output returned from kes identity new # Specify the connection information for the Vault server. # The endpoint should be resolvable from the host. # This example assumes that Vault is configured with an AppRole ID and # Secret for use with KES. keystore: vault: endpoint: https://HOSTNAME:8200 engine: "/path/to/engine" # Replace with the path to the K/V Engine version: "v1|v2" # Specify v1 or v2 depending on the version of the K/V Engine approle: id: "VAULTAPPID" # HashiCorp Vault AppRole ID secret: "VAULTAPPSECRET" # HashiCorp Vault AppRole Secret ID retry: 15s status: ping: 10s # Required if Vault uses certificates signed by an unknown CA, # e.g. self-signed or internal (non-globally trusted). # Replace this value with the full path to the Vault CA certificate. tls: ca: vault-tls-CA.cert
將
MINIO_IDENTITY_HASH
設定為 MinIO mTLS 憑證的識別雜湊值。以下命令會計算必要的雜湊值
podman run --rm \ -v ~/minio-kes-vault/certs/certs:/certs \ kes:2024-10-31T07-42-41Z tool identity of /certs/minio-kes.cert
請參閱針對您支援的 KMS 解決方案設定 KES 的說明,以了解針對您選擇的 KMS 目標定義的其他變數。
建立 MinIO 環境檔案
使用您偏好的文字編輯器建立環境檔案。以下範例使用
nano
nano ~/minio-kes-vault/config/minio
此命令假設
minio-kes.cert
、minio-kes.key
和kes-server.cert
憑證可以在指定的路徑存取。MINIO_ROOT_USER=myminioadmin MINIO_ROOT_PASSWORD=minio-secret-key-change-me MINIO_VOLUMES="/mnt/data" # KES Configurations MINIO_KMS_KES_ENDPOINT=https://127.0.0.1:7373 MINIO_KMS_KES_API_KEY=<API-key-identity-string-from-KES> # Replace with the key string for your credentials MINIO_KMS_KES_CAPATH=/certs/server.cert MINIO_KMS_KES_KEY_NAME=minio-backend-default-key
注意
API 金鑰是與 KES 伺服器驗證的首選方式,因為它為 KES 伺服器提供了簡化且安全的驗證程序。
或者,指定
MINIO_KMS_KES_KEY_FILE
和MINIO_KMS_KES_CERT_FILE
,而不是MINIO_KMS_KES_API_KEY
。API 金鑰與基於憑證的驗證互斥。指定 API 金鑰變數或金鑰檔案和憑證檔案變數的其中一個即可。
本網站上的文件使用 API 金鑰。
MinIO 使用
MINIO_KMS_KES_KEY_NAME
金鑰進行以下加密操作minio-kes
憑證僅啟用 MinIO 部署和 KES 伺服器之間的 mTLS。它們不會啟用其他用戶端連線至 MinIO 的 TLS。如果根 KMS 上尚不存在此金鑰,KES 會自動建立此金鑰。
2) 建立 Pod 和容器
本節中的命令會建立以下資源
sudo podman pod create \
-p 9000:9000 -p 9001:9001 -p 7373:7373 \
-v ~/minio-kes-vault/certs:/certs \
-v ~/minio-kes-vault/minio:/mnt/minio \
-v ~/minio-kes-vault/config:/etc/default/ \
-n minio-kes-vault
sudo podman run -dt \
--cap-add IPC_LOCK \
--name kes-server \
--pod "minio-kes-vault" \
-e KES_SERVER=https://127.0.0.1:7373 \
-e KES_CLIENT_KEY=/certs/kes-server.key \
-e KES_CLIENT_CERT=/certs/kes-server.cert \
quay.io/minio/kes:2024-10-31T07-42-41Z server \
--auth \
--config=/etc/default/kes-config.yaml \
sudo podman run -dt \
--name minio-server \
--pod "minio-kes-vault" \
-e "MINIO_CONFIG_ENV_FILE=/etc/default/minio" \
quay.io/minio/minio:RELEASE.2024-10-29T16-01-48Z server \
--console-address ":9001"
您可以使用以下命令驗證容器的狀態
# Should show three pods - one for the Pod, one for KES, and one for MinIO
sudo podman container ls
如果所有 pod 均在運作中,您可以開啟瀏覽器至 http://127.0.0.1:9000 並使用 MinIO 環境檔案中指定的根憑證登入,以連線至 MinIO 部署。
3) 產生新的加密金鑰
在建立金鑰之前解封 Vault
如果您的選擇的供應商需要,您必須先解封後端的 KMS 執行個體,才能建立新的加密金鑰。請參閱您選擇的 KMS 解決方案的文件以了解更多資訊。
MinIO 要求 EK 在使用該金鑰執行 SSE 操作之前,就已存在於根 KMS 上。使用 kes key create或 mc admin kms key create
來建立新的 EK,以便用於 SSE。
以下命令使用 kes key create 命令,以新增儲存在根 KMS 伺服器上的新外部金鑰 (EK),用於加密 MinIO 後端。
sudo podman run --rm \
-v ~/minio-kes-vault/certs:/certs \
-e KES_SERVER=https://127.0.0.1:7373 \
-e KES_CLIENT_KEY=/certs/minio-kes.key \
-e KES_CLIENT_CERT=/certs/minio-kes.cert \
kes:2024-10-31T07-42-41Z key create -k my-new-encryption-key
您可以指定任何適合您使用案例的金鑰名稱,例如特定於儲存貯體的金鑰 minio-mydata-key
。
4) 為儲存貯體啟用 SSE-KMS
您可以使用 MinIO 主控台或 MinIO mc
CLI 來為儲存貯體啟用預設的 SSE-KMS,並使用產生的金鑰。
透過在您偏好的瀏覽器中導覽至 http://127.0.0.1:9001 並使用指定給 MinIO 容器的根憑證登入,開啟 MinIO 主控台。
登入後,建立一個新的儲存貯體並根據您的喜好命名。選取齒輪圖示以開啟管理檢視。
選取加密欄位旁的鉛筆圖示,以開啟設定儲存貯體預設 SSE 配置的模式視窗。
選取 SSE-KMS,然後輸入在上一步驟中建立的金鑰名稱。
儲存變更後,嘗試將檔案上傳到儲存貯體。在物件瀏覽器中檢視該檔案時,請注意側邊欄的中繼資料包含 SSE 加密配置和用於加密該物件的金鑰資訊。這表示物件已成功加密。
以下命令
為 MinIO 部署建立新的 別名
建立新的儲存貯體以儲存加密資料
在該儲存貯體上啟用 SSE-KMS 加密
mc alias set local http://127.0.0.1:9000 ROOTUSER ROOTPASSWORD
mc mb local/encryptedbucket
mc encrypt set SSE-KMS encrypted-bucket-key ALIAS/encryptedbucket
使用 mc cp
或任何具有 PutObject
功能的 S3 相容 SDK 將檔案寫入儲存貯體。然後,您可以在檔案上執行 mc stat
,以確認相關的加密中繼資料。