使用客戶管理金鑰的伺服器端加密 (SSE-C)
MinIO 伺服器端加密 (SSE) 在寫入操作時保護物件,允許用戶端利用伺服器處理能力在儲存層 (靜態加密) 保護物件。SSE 還為有關安全鎖定和清除的法規和合規性要求提供金鑰功能。
本頁上的程序會設定並啟用使用客戶管理金鑰的伺服器端加密 (SSE-C)。MinIO SSE-C 支援在將物件寫入磁碟機之前對物件進行用戶端驅動的加密。用戶端必須指定正確的金鑰才能解密物件以進行讀取操作。
MinIO SSE-C 在功能上與 Amazon 使用客戶提供的金鑰的伺服器端加密 相容。
安全清除和鎖定
SSE-C 使用用戶端在寫入操作中指定的 EK 來保護物件。假設用戶端金鑰管理支援停用或刪除這些金鑰
- 停用 EK 會暫時鎖定任何使用該 EK 加密的物件,
使其無法讀取。您可以稍後啟用 EK 以恢復對這些物件的正常讀取操作。
- 刪除 EK 會使由該 EK 加密的所有物件
永久 無法讀取。如果用戶端 KMS 不支援 EK 的備份,則此程序是不可逆轉的。
單個 EK 的範圍取決於在請求 SSE-C 加密時指定該 EK 的寫入操作次數。
注意事項
搭配複寫使用 SSE-C
版本變更: RELEASE.2024-03-30T09-41-56Z
使用 SSE-C 加密的物件可以透過站點複寫或儲存貯體複寫進行複寫。先前版本的 MinIO 物件儲存不複寫 SSE-C 加密物件。
經過壓縮的 SSE-C 加密物件與 MinIO 儲存貯體複寫 或 站點複寫 不相容。使用 SSE-KMS 或 SSE-S3 以確保加密物件與複寫相容。
SSE-C 覆寫 SSE-S3 和 SSE-KMS
快速入門
MinIO SSE-C 要求客戶端執行所有金鑰建立和儲存操作。
此程序使用 mc
來執行來源 MinIO 部署上的操作。在具有網路存取來源部署的機器上安裝 mc
。請參閱 mc
的 安裝快速入門,以了解下載和安裝 mc
的說明。
SSE-C 金鑰必須是 256 位元的原始編碼字串或十六進位編碼字串。客戶端應用程式負責產生和儲存加密金鑰。MinIO 不會儲存 SSE-C 加密金鑰,並且在沒有客戶端管理的金鑰的情況下,無法解密 SSE-C 加密的物件。
注意
在 MinIO Client RELEASE.2024-06-20T14-50-54Z
中新增了對十六進位編碼金鑰的支援。
1) 產生加密金鑰
產生 256 位元的 base64 原始編碼字串或十六進位編碼字串,以用作加密金鑰。
以下範例會產生符合加密金鑰需求的字串。產生的字串適用於非生產環境。
cat /dev/urandom | head -c 32 | base64 -
請參閱貴組織關於產生密碼學安全加密金鑰的要求。
複製加密金鑰以在下一步中使用。
2) 使用 SSE-C 加密物件
MinIO 支援以下 AWS S3 標頭,以指定 SSE-C 加密:
X-Amz-Server-Side-Encryption-Customer-Algorithm
設定為AES256
。X-Amz-Server-Side-Encryption-Customer-Key
設定為加密金鑰值。X-Amz-Server-Side-Encryption-Customer-Key-MD5
設定為加密金鑰的 128 位元 MD5 摘要。
MinIO mc
命令列工具與 S3 相容的 SDK 包含用於設定標頭的特定語法。某些 mc
命令,例如 mc cp
,包含用於啟用 SSE-S3 加密的特定引數。
mc cp ~/data/mydata.json ALIAS/BUCKET/mydata.json \
--encrypt-key "ALIAS/BUCKET/=c2VjcmV0ZW5jcnlwdGlvbmtleWNoYW5nZW1lMTIzNAo="
3) 複製 SSE-C 加密物件
MinIO 支援以下 AWS S3 標頭,用於將 SSE-C 加密物件複製到另一個與 S3 相容的服務:
X-Amz-Copy-Source-Server-Side-Encryption-Algorithm
設定為AES256
X-Amz-Copy-Source-Server-Side-Encryption-Key
設定為加密金鑰值。如果指定的金鑰與用於 SSE-C 加密物件的金鑰不符,則複製操作將會失敗。X-Amz-Copy-Source-Server-Side-Encryption-Key-MD5
設定為加密金鑰的 128 位元 MD5 摘要。
MinIO mc
命令列工具與 S3 相容的 SDK 包含用於設定標頭的特定語法。某些 mc
命令,例如 mc cp
,包含用於啟用 SSE-S3 加密的特定引數。
mc cp SOURCE/BUCKET/mydata.json TARGET/BUCKET/mydata.json \
--encrypt-key "SOURCE/BUCKET/=c2VjcmV0ZW5jcnlwdGlvbmtleWNoYW5nZW1lMTIzNAo=,TARGET/BUCKET/=c2VjcmV0ZW5jcnlwdGlvbmtleWNoYW5nZW1lMTIzNAo="
將
SOURCE/BUCKET
替換為您要從中讀取加密物件的 MinIO 部署的別名
,以及您想要從中讀取 SSE-C 加密物件的儲存貯體或儲存貯體前綴的完整路徑。將
TARGET/BUCKET
替換為您要將加密物件寫入其中的 MinIO 部署的別名
,以及您想要將 SSE-C 加密物件寫入其中的儲存貯體或儲存貯體前綴的完整路徑。