Azure 金鑰保存庫
本教學說明如何設定 KES 伺服器,以使用 Azure 金鑰保存庫 作為持續性金鑰儲存區
Azure 金鑰保存庫
Azure 金鑰保存庫是一項受管理的 KMS 服務,提供可供 KES 使用的機密儲存區。
作為外部應用程式,您必須在 Azure Active Directory 中註冊 KES,並具備用戶端認證,才能在 Azure 金鑰保存庫中儲存和存取機密。
-
Active Directory 服務
-
導覽至 Azure Active Directory 並選取 應用程式註冊。
-
選取 新增註冊
-
-
註冊 KES 應用程式
為應用程式命名,例如
KES-Demo
,並註冊它。完成後,Azure 會顯示您新註冊應用程式的一些詳細資料。記下下列欄位以供稍後使用
- 應用程式 (用戶端) ID
- 目錄 (租用戶) ID
這些欄位包含全域唯一識別碼 (UUID),類似於
c3b7badf-cd2b-4297-bece-4de5f2e575f6
。 -
建立用戶端機密
- 選取 新增憑證或機密
- 指派名稱,例如
KES-Demo
- 選取到期日
Azure 會建立具有所選描述和到期日的新機密。KES 需要此機密才能向 Azure 金鑰保存庫進行驗證。
請務必複製機密值。它可能不會再次顯示。 -
應用程式摘要
導覽回應用程式概觀,並檢查 Azure 是否顯示應用程式有一個機密。
您應該擁有下列資訊
-
應用程式 (用戶端) ID
在我們的範例圖片中,為
c3b7badf-cd2b-4297-bece-4de5f2e575f6
。 -
目錄 (租用戶) ID
在我們的範例圖片中,為
41a37d4e-b3c4-49f4-b330-1114fb0271c8
。 -
新建立機密的值
在我們的範例圖片中,為
-.j4XP6Sa7E39.KWn-SL~Dgbz~H-H-TPxT
。
-
-
新增金鑰保存庫原則
導覽至金鑰保存庫的 存取原則 索引標籤,並選取 新增存取原則 以建立金鑰保存庫原則。
定義 KES 伺服器可以執行的金鑰保存庫作業。選取下列五個
機密權限
- 取得
- 列出
- 設定
- 刪除
- 清除
-
將原則指派給主體
選取主體或授權的應用程式。
如果應用程式本身是主體,則不需要授權的應用程式。或者,選取使用者或群組作為主體,並選取新註冊的 KES Azure 應用程式作為授權的應用程式。
在本教學中,我們將主體設定為我們新增的機密。搜尋應用程式的名稱 (
KES-Demo
) 或新增應用程式 ID。 -
原則摘要
Azure 會顯示與我們註冊的 KES 應用程式相關聯的新存取原則。
請務必在導覽至其他地方之前 儲存。
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
如果您已經有來自 WebPKI 或內部 CA 的 TLS 私密金鑰和憑證,則可以改用它們。請記住調整tls
設定區段。 -
產生用戶端認證
使用以下命令,產生新的 TLS 私密/公開金鑰組,供用戶端應用程式用於存取 KES 伺服器
$ kes identity new --key=client.key --cert=client.crt MyApp Private key: client.key Certificate: client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
身分
02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
是client.crt
中公開金鑰的唯一指紋。您可以隨時重新計算指紋$ kes identity of client.crt Identity: 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b
-
設定 KES 伺服器
建立 KES 伺服器組態檔:
config.yml
。確保原則區段中的身分與您的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/my-key* - /v1/key/generate/my-key* - /v1/key/decrypt/my-key* identities: - 02ef5321ca409dbc7b10e7e8ee44d1c3b91e4bf6e2198befdebee6312745267b # Use the identity of your client.crt keystore: azure: keyvault: endpoint: "https://kes-test-1.vault.azure.net" # Use your KeyVault instance endpoint. credentials: tenant_id: "" # The ID of the tenant the client belongs to - e.g: "41a37d4e-b3c4-49f4-b330-1114fb0271c8". client_id: "" # The ID of the client - e.g: "c3b7badf-cd2b-4297-bece-4de5f2e575f6". client_secret: "" # The value of the client secret - e.g: "-.j4XP6Sa7E39.KWn-SL~Dgbz~H-H-TPxT".
-
啟動 KES 伺服器
Linux
kes server --config config.yml --auth off
Linux 交換保護在 Linux 環境中,KES 可以使用
mlock
syscall,防止作業系統將記憶體中的資料寫入磁碟 (交換)。這可以防止洩漏敏感資料。使用以下命令,允許 KES 使用
mlock
syscall,而無需使用root
權限執行sudo setcap cap_ipc_lock=+ep $(readlink -f $(which kes))
啟動具有記憶體保護的 KES 伺服器執行個體
kes server --config config.yml --auth off --mlock
容器
下列指示使用 Podman 來管理容器。您也可以使用 Docker。
根據您的部署需求修改位址和檔案路徑。
sudo podman pod create \ -p 9000:9000 -p 9001:9001 -p 7373:7373 \ -v ~/minio-kes-azure/certs:/certs \ -v ~/minio-kes-azure/minio:/mnt/minio \ -v ~/minio-kes-azure/config:/etc/default/ \ -n minio-kes-azure sudo podman run -dt \ --cap-add IPC_LOCK \ --name kes-server \ --pod "minio-kes-azure" \ -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-01-11T13-09-29Z server \ --auth \ --config=/etc/default/kes-config.yaml \ sudo podman run -dt \ --name minio-server \ --pod "minio-kes-azure" \ -e "MINIO_CONFIG_ENV_FILE=/etc/default/minio" \ quay.io/minio/minio:RELEASE.2024-01-31T20-20-33Z server \ --console-address ":9001"
您可以使用以下命令來驗證容器的狀態。該命令應顯示三個 Pod,一個用於 Pod、一個用於 KES,另一個用於 MinIO。
sudo podman container list
KES CLI 存取
-
設定
KES_SERVER
端點下列環境變數指定 KES CLI 應連線的伺服器
export KES_SERVER=https://127.0.0.1:7373
-
定義用戶端認證
下列環境變數設定用戶端用來連線至 KES 伺服器的存取認證
export KES_CLIENT_CERT=client.crt
export KES_CLIENT_KEY=client.key
-
測試組態
執行我們在上面指派之原則允許的任何 API 作業。
例如,建立金鑰
kes key create my-key-1
使用金鑰來產生新的資料加密金鑰
kes key dek my-key-1
結果類似於以下內容
{ plaintext : UGgcVBgyQYwxKzve7UJNV5x8aTiPJFoR+s828reNjh0= ciphertext: eyJhZWFkIjoiQUVTLTI1Ni1HQ00tSE1BQy1TSEEtMjU2IiwiaWQiOiIxMTc1ZjJjNDMyMjNjNjNmNjY1MDk5ZDExNmU3Yzc4NCIsIml2IjoiVHBtbHpWTDh5a2t4VVREV1RSTU5Tdz09Iiwibm9uY2UiOiJkeGl0R3A3bFB6S21rTE5HIiwiYnl0ZXMiOiJaaWdobEZrTUFuVVBWSG0wZDhSYUNBY3pnRWRsQzJqWFhCK1YxaWl2MXdnYjhBRytuTWx0Y3BGK0RtV1VoNkZaIn0= }
搭配 MinIO 伺服器使用 KES
MinIO 伺服器需要 KES 才能啟用伺服器端資料加密。
請參閱適用於 MinIO 的 KES 指示指南,以取得將新的 KES 伺服器與 MinIO 伺服器搭配使用所需的其他步驟。
組態參考
以下章節說明金鑰加密服務 (KES) 的組態設定,以便使用 Azure Key Vault 作為根 KMS 來儲存外部金鑰,例如用於 MinIO 伺服器端加密的金鑰。