本主題提供 Cloud HSM 總覽,並說明如何在 Cloud Key Management Service 中建立及使用 HSM 保護的加密金鑰。
什麼是 Cloud HSM?
Cloud HSM 是雲端託管硬體安全性模組 (HSM) 服務,可讓您託管加密金鑰,並在 FIPS 140-2 第 3 級認證的 HSM 叢集中執行加密編譯作業。Google 可為您代管 HSM 叢集,這樣您就不需要擔心分群、資源調度或修補的問題。由於 Cloud HSM 使用 Cloud KMS 做為前端,因此您可以利用 Cloud KMS 提供的所有便利性與功能。
建立金鑰環
建立金鑰時,請將金鑰新增至指定 Google Cloud位置的金鑰環。您可以建立新的金鑰環,或使用現有的金鑰環。在本主題中,您將建立新的金鑰環,並在其中新增金鑰。
在支援 Cloud HSM 的 Google Cloud 位置建立金鑰環。
控制台
前往 Google Cloud 控制台的「Key Management」頁面。
按一下 [Create key ring] (建立金鑰環)。
在「Key ring name」(金鑰環名稱) 欄位中,輸入金鑰環的名稱。
針對「Key ring location」(金鑰環位置),選取位置,例如
"us-east1"
。點選「建立」。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
-
在環境中執行
gcloud kms keyrings create
指令:gcloud kms keyrings create KEY_RING \ --location LOCATION
更改下列內容:
KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:金鑰環的 Cloud KMS 位置。
如要瞭解所有旗標和可能的值,請使用
--help
旗標執行指令。
C#
如要執行這段程式碼,請先設定 C# 開發環境,然後安裝 Cloud KMS C# SDK。
Go
如要執行這段程式碼,請先設定 Go 開發環境,並安裝 Cloud KMS Go SDK。
Java
如要執行這段程式碼,請先設定 Java 開發環境,然後安裝 Cloud KMS Java SDK。
Node.js
如要執行這段程式碼,請先設定 Node.js 開發環境,然後安裝 Cloud KMS Node.js SDK。
PHP
如要執行這段程式碼,請先瞭解如何在 Google Cloud上使用 PHP,並安裝 Cloud KMS PHP SDK。
Python
如要執行這段程式碼,請先設定 Python 開發環境,然後安裝 Cloud KMS Python SDK。
Ruby
如要執行這段程式碼,請先設定 Ruby 開發環境,然後安裝 Cloud KMS Ruby SDK。
API
這些範例使用 curl 做為 HTTP 用戶端,示範如何使用 API。如要進一步瞭解存取權控管,請參閱「存取 Cloud KMS API」一文。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \ --request "POST" \ --header "authorization: Bearer TOKEN"
更改下列內容:
PROJECT_ID
:包含金鑰環的專案 ID。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:金鑰環的 Cloud KMS 位置。
詳情請參閱 KeyRing.create
API 說明文件。
建立金鑰
請按照下列步驟,在指定的金鑰環和位置建立 Cloud HSM 金鑰。
控制台
前往 Google Cloud 控制台的「Key Management」頁面。
找出您要在哪個金鑰環中建立金鑰,然後按一下該金鑰環名稱。
按一下 [Create key] (建立金鑰)。
在「您要建立哪種類型的金鑰?」中,選擇「產生的金鑰」。
在「Key name」(金鑰名稱) 欄位中,輸入金鑰的名稱。
按一下「Protection level」(防護等級) 下拉式選單,然後選取「HSM」。
按一下 [Purpose] (目的) 下拉式清單,並選取 [對稱式加密/解密] (Symmetric encrypt/decrypt)。
接受「Rotation period」(輪替週期) 和「Starting on」(開始日期) 的預設值。
點選「建立」。
gcloud
如要在指令列上使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys create key \ --keyring key-ring \ --location location \ --purpose "encryption" \ --protection-level "hsm"
將 key 替換為新金鑰的名稱。將 key-ring 替換為現有金鑰環的名稱,金鑰會位於該金鑰環中。將 location 替換為金鑰環的 Cloud KMS 位置。
如要瞭解所有旗標和可能的值,請使用 --help
旗標執行指令。
C#
如要執行這段程式碼,請先設定 C# 開發環境,然後安裝 Cloud KMS C# SDK。
Go
如要執行這段程式碼,請先設定 Go 開發環境,並安裝 Cloud KMS Go SDK。
Java
如要執行這段程式碼,請先設定 Java 開發環境,然後安裝 Cloud KMS Java SDK。
Node.js
如要執行這段程式碼,請先設定 Node.js 開發環境,然後安裝 Cloud KMS Node.js SDK。
PHP
如要執行這段程式碼,請先瞭解如何在 Google Cloud上使用 PHP,並安裝 Cloud KMS PHP SDK。
Python
如要執行這段程式碼,請先設定 Python 開發環境,然後安裝 Cloud KMS Python SDK。
Ruby
如要執行這段程式碼,請先設定 Ruby 開發環境,然後安裝 Cloud KMS Ruby SDK。
加密資料
您現在有了金鑰,就可以使用該金鑰來加密文字或二進位檔內容。
gcloud
如要在指令列上使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms encrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --plaintext-file FILE_TO_ENCRYPT \ --ciphertext-file ENCRYPTED_OUTPUT
更改下列內容:
KEY_NAME
:您要用於加密的金鑰名稱。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:包含金鑰環的 Cloud KMS 位置。FILE_TO_ENCRYPT
:要加密的檔案路徑。ENCRYPTED_OUTPUT
:您要儲存加密輸出的路徑。
如要瞭解所有旗標和可能的值,請使用 --help
旗標執行指令。
C#
如要執行這段程式碼,請先設定 C# 開發環境,然後安裝 Cloud KMS C# SDK。
Go
如要執行這段程式碼,請先設定 Go 開發環境,並安裝 Cloud KMS Go SDK。
Java
如要執行這段程式碼,請先設定 Java 開發環境,然後安裝 Cloud KMS Java SDK。
Node.js
如要執行這段程式碼,請先設定 Node.js 開發環境,然後安裝 Cloud KMS Node.js SDK。
PHP
如要執行這段程式碼,請先瞭解如何在 Google Cloud上使用 PHP,並安裝 Cloud KMS PHP SDK。
Python
如要執行這段程式碼,請先設定 Python 開發環境,然後安裝 Cloud KMS Python SDK。
Ruby
如要執行這段程式碼,請先設定 Ruby 開發環境,然後安裝 Cloud KMS Ruby SDK。
API
這些範例使用 curl 做為 HTTP 用戶端,示範如何使用 API。如要進一步瞭解存取權控管,請參閱「存取 Cloud KMS API」一文。
使用 JSON 和 REST API 時,內容必須先經過 base64 編碼,才能由 Cloud KMS 加密。
如要加密資料,請提出 POST
要求,並提供適當的專案與金鑰資訊,然後在要求主體的 plaintext
欄位中指定待加密的 base64 編碼文字。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
更改下列內容:
PROJECT_ID
:包含金鑰環和金鑰的專案 ID,您要使用這些金鑰進行加密。LOCATION
:包含金鑰環的 Cloud KMS 位置。KEY_RING
:包含您要用於加密的金鑰的金鑰環。KEY_NAME
:您要用於加密的金鑰名稱。PLAINTEXT_TO_ENCRYPT
:您要加密的明文資料。呼叫encrypt
方法前,必須先對明文進行 Base64 編碼。
以下是含有 Base64 編碼資料的承載範例:
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
解密密文
如要解密加密內容,您必須使用與用來加密內容相同的金鑰。
gcloud
如要在指令列上使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms decrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file FILE_TO_DECRYPT \ --plaintext-file DECRYPTED_OUTPUT
更改下列內容:
KEY_NAME
:要用於解密的金鑰名稱。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:包含金鑰環的 Cloud KMS 位置。FILE_TO_DECRYPT
:要解密檔案的路徑。DECRYPTED_OUTPUT
:您要儲存解密輸出內容的路徑。
如要瞭解所有旗標和可能的值,請使用 --help
旗標執行指令。
C#
如要執行這段程式碼,請先設定 C# 開發環境,然後安裝 Cloud KMS C# SDK。
Go
如要執行這段程式碼,請先設定 Go 開發環境,並安裝 Cloud KMS Go SDK。
Java
如要執行這段程式碼,請先設定 Java 開發環境,然後安裝 Cloud KMS Java SDK。
Node.js
如要執行這段程式碼,請先設定 Node.js 開發環境,然後安裝 Cloud KMS Node.js SDK。
PHP
如要執行這段程式碼,請先瞭解如何在 Google Cloud上使用 PHP,並安裝 Cloud KMS PHP SDK。
Python
如要執行這段程式碼,請先設定 Python 開發環境,然後安裝 Cloud KMS Python SDK。
Ruby
如要執行這段程式碼,請先設定 Ruby 開發環境,然後安裝 Cloud KMS Ruby SDK。
API
這些範例使用 curl 做為 HTTP 用戶端,示範如何使用 API。如要進一步瞭解存取權控管,請參閱「存取 Cloud KMS API」一文。
以 JSON 格式從 Cloud KMS 傳回的解密文字採用 base64 編碼。
如要解密已加密資料,請提出 POST
要求,並提供適當的專案和金鑰資訊,然後在要求主體的 ciphertext
欄位中指定要解密的已加密文字 (也稱為密文)。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
更改下列內容:
PROJECT_ID
:包含金鑰環和金鑰的專案 ID,您要使用這些金鑰進行解密。LOCATION
:包含金鑰環的 Cloud KMS 位置。KEY_RING
:包含您要用於解密的金鑰的金鑰環。KEY_NAME
:要用於解密的金鑰名稱。ENCRYPTED_DATA
:您要解密的加密資料。
以下是含有 Base64 編碼資料的承載範例:
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
後續步驟
本主題的加密範例使用防護等級為 HSM 的對稱金鑰。如要使用防護等級為 HSM 的非對稱金鑰加密,請按照透過非對稱金鑰加密及解密資料的步驟執行,但進行以下變更:
- 在其中一個 Cloud HSM 的支援地區中建立金鑰環。
- 使用保護等級 HSM 來建立金鑰。
如要針對橢圓曲線簽署或 RSA 簽署使用防護等級為 HSM 的非對稱金鑰,請按照建立及驗證簽名的步驟執行,但進行以下變更:
- 在其中一個 Cloud HSM 的支援地區中建立金鑰環。
- 使用保護等級 HSM 來建立金鑰。
開始使用 API。
如要開始建立金鑰、輪替金鑰,以及設定金鑰的權限,請參閱教學指南。
如要進一步瞭解物件階層、金鑰狀態和金鑰輪替,請參閱概念。
瞭解 Cloud KMS 中的記錄。請注意,記錄以作業為基礎,並會同時套用至防護等級為 HSM 與「軟體」的金鑰。
如要進一步瞭解 Cloud HSM 如何保護資料,請參閱 Cloud HSM 架構白皮書。
已知限制
對於使用者提供的明文與密文,訊息大小上限為 8 KiB (相對於 Cloud KMS 軟體金鑰的上限 64 KiB),包括其他已驗證資料。
Cloud HSM 可能無法在特定多區域或雙區域使用。 詳情請參閱 Cloud HSM 的支援地區。
如果您在其他 Google Cloud 服務中,使用 Cloud HSM 金鑰與客戶自行管理的加密金鑰 (CMEK) 整合,則服務使用的位置必須與 Cloud HSM 金鑰的位置完全一致。這項規則適用於單一地區、雙地區和多地區位置。
如要進一步瞭解 CMEK 整合服務,請參閱「靜態加密」一文的相關章節。
對於目前儲存在 Cloud HSM 中的非對稱金鑰,相較於使用 Cloud KMS 軟體金鑰,金鑰作業會產生明顯較大的延遲。
Bare Metal Rack HSM
Google Cloud 提供額外的 HSM 選項,例如單一租戶。客戶可使用 Bare Metal Rack HSM,在 Google 提供的空間中託管自己的 HSM。如需更多資訊,請洽詢帳戶代表。