本頁面說明如何在 Cloud KMS 中建立金鑰。金鑰可以是對稱或非對稱式加密金鑰、非對稱簽署金鑰或 MAC 簽署金鑰。
建立金鑰時,您會將金鑰新增至特定 Cloud KMS 位置的金鑰環。您可以建立新的金鑰環,或使用現有的金鑰環。 在這個頁面中,您可以產生新的 Cloud KMS 或 Cloud HSM 金鑰,並新增至現有的金鑰環。 如要建立 Cloud EKM 金鑰,請參閱「建立外部金鑰」。如要匯入 Cloud KMS 或 Cloud HSM 金鑰,請參閱「匯入金鑰」。
事前準備
完成本頁的工作前,您需要:
- 用於存放 Cloud KMS 資源的 Google Cloud 專案資源。建議您為 Cloud KMS 資源使用不含任何其他 Google Cloud 資源的獨立專案。
- 要建立金鑰的金鑰環名稱和位置。選擇靠近其他資源的位置,並支援您選擇的保護等級。 如要查看可用位置和支援的保護層級,請參閱「Cloud KMS 位置」。 如要建立金鑰環,請參閱「建立金鑰環」。
- 選用:如要使用 gcloud CLI,請準備環境。
在 Google Cloud 控制台啟用 Cloud Shell。
必要的角色
如要取得建立金鑰所需的權限,請要求管理員授予您專案或上層資源的下列 IAM 角色:
- Cloud KMS 管理員 (
roles/cloudkms.admin) -
如要建立單一租戶 HSM 金鑰:Cloud KMS 單一租戶 HSM 金鑰建立者 (
roles/cloudkms.hsmSingleTenantKeyCreator)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這些預先定義的角色具備建立金鑰所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
您必須具備下列權限,才能建立金鑰:
-
cloudkms.cryptoKeys.create -
cloudkms.cryptoKeys.get -
cloudkms.cryptoKeys.list -
cloudkms.cryptoKeyVersions.create -
cloudkms.cryptoKeyVersions.get -
cloudkms.cryptoKeyVersions.list -
cloudkms.keyRings.get -
cloudkms.keyRings.list -
cloudkms.locations.get -
cloudkms.locations.list -
resourcemanager.projects.get -
如要擷取公開金鑰,請按照下列步驟操作:
cloudkms.cryptoKeyVersions.viewPublicKey -
如要建立單一租戶 HSM 金鑰,請按照下列步驟操作:
-
cloudkms.singleTenantHsmInstances.get -
cloudkms.singleTenantHsmInstances.use
-
建立對稱式加密金鑰
控制台
前往 Google Cloud 控制台的「Key Management」(金鑰管理) 頁面。
找出您要在哪個金鑰環中建立金鑰,然後按一下該金鑰環名稱。
按一下 [Create key] (建立金鑰)。
在「Key name」(金鑰名稱) 部分,輸入金鑰名稱。
在「Protection level」(保護層級) 中,選取「Software」(軟體)、「HSM」或「Single-tenant HSM」(單一租戶 HSM)。
如果選取「Single-tenant HSM」(單一租戶 HSM),請選取要建立金鑰的「Single-tenant HSM instance」(單一租戶 HSM 執行個體)。
在「金鑰內容」部分,選取「產生的金鑰」。
針對「目的」,選取「Symmetric encrypt/decrypt」。
保留「輪替週期」和「開始日期」的預設值。
點選「建立」。
gcloud
如要在指令列使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
如要建立軟體或多租戶 Cloud HSM 金鑰,請使用 kms keys create 指令:
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "PROTECTION_LEVEL"
更改下列內容:
KEY_NAME:金鑰名稱。KEY_RING:金鑰所屬金鑰環的名稱。LOCATION:金鑰環的 Cloud KMS 位置。PROTECTION_LEVEL:金鑰要使用的保護層級,例如software或hsm。如果是software金鑰,可以省略--protection-level旗標。
如要瞭解所有旗標和可能的值,請執行指令並加上 --help 旗標。
kms keys create 指令中加入 --crypto-key-backend 旗標:
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--protection-level "hsm-single-tenant" \
--crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
更改下列內容:
INSTANCE_PROJECT:單一租戶 Cloud HSM 執行個體所在專案的 ID。INSTANCE_NAME:要建立金鑰的單一租戶 Cloud HSM 執行個體名稱。如要進一步瞭解單一租戶 Cloud HSM 執行個體,請參閱「建立及管理單一租戶 Cloud HSM 執行個體」。
如要瞭解所有旗標和可能的值,請執行指令並加上 --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」。
如要建立軟體或多租戶 Cloud HSM 金鑰,請使用 CryptoKey.create 方法:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": { "protectionLevel": "PROTECTION_LEVEL", "algorithm": "ALGORITHM" }}'
更改下列內容:
PROJECT_ID:金鑰環所在專案的 ID。LOCATION:金鑰環的 Cloud KMS 位置。KEY_RING:金鑰所屬金鑰環的名稱。KEY_NAME:金鑰名稱。PROTECTION_LEVEL:金鑰的保護層級,例如SOFTWARE或HSM。ALGORITHM:HMAC 簽署演算法,例如HMAC_SHA256。如要查看所有支援的 HMAC 演算法,請參閱「HMAC 簽署演算法」。
PROTECTION_LEVEL 設為 HSM_SINGLE_TENANT,並在 kms keys create 指令中加入 --crypto-key-backend 旗標:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ENCRYPT_DECRYPT", "versionTemplate": { "protectionLevel": "HSM_SINGLE_TENANT",
"algorithm": "ALGORITHM",
"crypto-key-backend": "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME" }}'
更改下列內容:
INSTANCE_PROJECT:單一租戶 Cloud HSM 執行個體所在專案的 ID。INSTANCE_NAME:要建立金鑰的單一租戶 Cloud HSM 執行個體名稱。如要進一步瞭解單一租戶 Cloud HSM 執行個體,請參閱「建立及管理單一租戶 Cloud HSM 執行個體」。
如要瞭解所有旗標和可能的值,請執行指令並加上 --help 旗標。
建立對稱式加密金鑰,並設定自訂自動輪替
建立金鑰時,您可以指定輪替週期,也就是自動建立新金鑰版本的時間間隔。您也可以單獨指定下次輪替時間,讓下次輪替時間早於或晚於目前的一個輪替週期。
控制台
使用 Google Cloud 控制台建立金鑰時,Cloud KMS 會自動設定輪替週期和下次輪替時間。您可以選擇使用預設值,或指定其他值。
如要指定不同的輪替週期和開始時間,請在建立金鑰時,先點選「Create」(建立) 按鈕,再執行下列操作:
在「金鑰輪替週期」部分,選取所需選項。
在「Starting on」(開始日期) 部分,選取第一次自動輪替的日期。您可以將「Starting on」(開始日期) 設為預設值,這樣一來,系統就會在金鑰建立後的一個金鑰輪替週期,開始第一次自動輪替。
gcloud
如要在指令列使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "encryption" \
--rotation-period ROTATION_PERIOD \
--next-rotation-time NEXT_ROTATION_TIME
更改下列內容:
KEY_NAME:金鑰名稱。KEY_RING:金鑰所屬金鑰環的名稱。LOCATION:金鑰環的 Cloud KMS 位置。ROTATION_PERIOD:金鑰輪替間隔,例如30d表示每 30 天輪替一次金鑰。輪替週期必須介於 1 天到 100 年之間。詳情請參閱 CryptoKey.rotationPeriod。NEXT_ROTATION_TIME:完成首次輪替的時間戳記,例如2023-01-01T01:02:03。您可以省略--next-rotation-time,將第一次輪替排定在執行指令後的一個輪替週期。詳情請參閱CryptoKey.nextRotationTime。
如要瞭解所有旗標和可能的值,請執行指令並加上 --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」。
如要建立金鑰,請使用 CryptoKey.create 方法:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{
"purpose": "PURPOSE", "rotationPeriod": "ROTATION_PERIOD",
"nextRotationTime": "NEXT_ROTATION_TIME"
}'
更改下列內容:
PURPOSE:金鑰的用途。ROTATION_PERIOD:金鑰輪替間隔,例如30d表示每 30 天輪替一次金鑰。輪替週期必須介於 1 天到 100 年之間。詳情請參閱 CryptoKey.rotationPeriod。NEXT_ROTATION_TIME:完成首次輪替的時間戳記,例如2023-01-01T01:02:03。詳情請參閱CryptoKey.nextRotationTime。
設定「已排定刪除」狀態的持續時間
根據預設,Cloud KMS 中的金鑰版本會處於排定刪除 (DESTROY_SCHEDULED) 狀態 30 天,然後才會刪除。「已排定刪除」狀態有時稱為「虛刪除」狀態。金鑰版本維持在這個狀態的時間長度可以設定,但有下列限制:
- 您只能在建立金鑰時設定效期。
- 指定金鑰效期後,就無法變更。
- 這個時間長度會套用至日後建立的所有金鑰版本。
- 所有金鑰的最短時間長度為 24 小時,但僅供匯入的金鑰例外,最短時間長度為 0。
- 最長為 120 天。
- 預設時間長度為 30 天。
貴組織可能已透過組織政策,定義排定刪除時間長度的最小值。詳情請參閱「控管金鑰刪除作業」。
如要建立金鑰,並為「排定刪除」狀態設定自訂時間長度,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「Key Management」(金鑰管理) 頁面。
找出您要在哪個金鑰環中建立金鑰,然後按一下該金鑰環名稱。
按一下 [Create key] (建立金鑰)。
設定應用程式的金鑰。
按一下「其他設定」。
在「Duration of 'scheduled for destruction' state」(「已安排刪除」狀態的持續時間) 中,選擇金鑰在永久刪除前,維持已安排刪除狀態的天數。
按一下 [Create key] (建立金鑰)。
gcloud
如要在指令列使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose PURPOSE \
--destroy-scheduled-duration DURATION
更改下列內容:
KEY_NAME:金鑰名稱。KEY_RING:金鑰所屬金鑰環的名稱。LOCATION:金鑰環的 Cloud KMS 位置。PURPOSE:金鑰的用途,例如encryption。DURATION:金鑰在永久刪除前,維持在已排定刪除狀態的時間長度。
如要瞭解所有旗標和可能的值,請執行指令並加上 --help 旗標。
除非有特定的應用程式或法規要求,否則建議所有金鑰都使用預設的 30 天。
建立非對稱式金鑰
以下各節將說明如何建立非對稱金鑰。
建立非對稱式解密金鑰
請按照下列步驟,在指定金鑰環和位置建立非對稱解密金鑰。您可以調整這些範例,指定不同的保護層級或演算法。如要瞭解詳情和替代值,請參閱「演算法」和「保護層級」。
首次建立金鑰時,初始金鑰版本的狀態為「Pending generation」(待產生)。狀態變更為「Enabled」(已啟用) 後,即可使用金鑰。如要進一步瞭解金鑰版本狀態,請參閱「金鑰版本狀態」。
控制台
前往 Google Cloud 控制台的「Key Management」(金鑰管理) 頁面。
找出您要在哪個金鑰環中建立金鑰,然後按一下該金鑰環名稱。
按一下 [Create key] (建立金鑰)。
在「Key name」(金鑰名稱) 部分,輸入金鑰名稱。
在「Protection level」(保護層級) 中,選取「Software」(軟體)、「HSM」或「Single-tenant HSM」(單一租戶 HSM)。
如果選取「Single-tenant HSM」(單一租戶 HSM),請選取要建立金鑰的「Single-tenant HSM instance」(單一租戶 HSM 執行個體)。
在「金鑰內容」部分,選取「產生的金鑰」。
在「用途」部分,選取「非對稱式解密」。
在「Algorithm」(演算法) 部分,選取「3072 bit RSA - OAEP Padding - SHA256 Digest」(3072 位元 RSA - OAEP 填充法 - SHA256 摘要)。您可以在日後的金鑰版本中變更這個值。
點選「建立」。
gcloud
如要在指令列使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "asymmetric-encryption" \
--default-algorithm "ALGORITHM" \
--protection-level "PROTECTION_LEVEL"
更改下列內容:
KEY_NAME:金鑰名稱。KEY_RING:金鑰所屬金鑰環的名稱。LOCATION:金鑰環的 Cloud KMS 位置。ALGORITHM:金鑰使用的演算法,例如rsa-decrypt-oaep-3072-sha256。如需支援的非對稱式加密演算法清單,請參閱「非對稱式加密演算法」。PROTECTION_LEVEL:要用於金鑰的保護層級。
hsm-single-tenant 保護等級,新增 --cryptoKeyBackend 旗標,並指定要建立金鑰的單一租戶 Cloud HSM 執行個體資源 ID:
--crypto-key-backend "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
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」。
使用CryptoKey.create 方法建立非對稱式解密金鑰。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ASYMMETRIC_DECRYPT", "protectionLevel": "PROTECTION_LEVEL", "versionTemplate": {"algorithm": "ALGORITHM"}}'
更改下列內容:
PROJECT_ID:金鑰環所在專案的 ID。LOCATION:金鑰環的 Cloud KMS 位置。KEY_RING:金鑰所屬金鑰環的名稱。KEY_NAME:金鑰名稱。ALGORITHM:金鑰使用的演算法,例如RSA_DECRYPT_OAEP_3072_SHA256。如需支援的非對稱式加密演算法清單,請參閱「非對稱式加密演算法」。PROTECTION_LEVEL:要用於金鑰的保護層級。
PROTECTION_LEVEL 設為 HSM_SINGLE_TENANT,並在指令主體中加入 cryptoKeyBackend 欄位,以及要匯入金鑰的單一租戶 Cloud HSM 執行個體資源 ID:
"cryptoKeyBackend": "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
建立非對稱式簽署金鑰
請按照下列步驟,在指定的金鑰環和位置建立非對稱簽署金鑰。您可以調整這些範例,指定不同的保護層級或演算法。如要瞭解詳情和替代值,請參閱「演算法」和「保護層級」。
首次建立金鑰時,初始金鑰版本的狀態為「Pending generation」(待產生)。狀態變更為「Enabled」(已啟用) 後,即可使用金鑰。如要進一步瞭解金鑰版本狀態,請參閱「金鑰版本狀態」。
控制台
前往 Google Cloud 控制台的「Key Management」(金鑰管理) 頁面。
找出您要在哪個金鑰環中建立金鑰,然後按一下該金鑰環名稱。
按一下 [Create key] (建立金鑰)。
在「Key name」(金鑰名稱) 部分,輸入金鑰名稱。
在「Protection level」(保護層級) 中,選取「Software」(軟體)、「HSM」或「Single-tenant HSM」(單一租戶 HSM)。
如果選取「Single-tenant HSM」(單一租戶 HSM),請選取要建立金鑰的「Single-tenant HSM instance」(單一租戶 HSM 執行個體)。
在「金鑰內容」部分,選取「產生的金鑰」。
在「用途」部分,選取「非對稱式簽署」。
在「Algorithm」(演算法) 部分,選取「Elliptic Curve P-256 - SHA256 Digest」(橢圓曲線 P-256 - SHA256 摘要)。您可以在日後的金鑰版本中變更這個值。
點選「建立」。
gcloud
如要在指令列使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "asymmetric-signing" \
--default-algorithm "ALGORITHM" \
--protection-level "PROTECTION_LEVEL"
更改下列內容:
KEY_NAME:金鑰名稱。KEY_RING:金鑰所屬金鑰環的名稱。LOCATION:金鑰環的 Cloud KMS 位置。ALGORITHM:金鑰使用的演算法,例如ec-sign-p256-sha256。如需支援的演算法清單,請參閱「非對稱簽署演算法」。PROTECTION_LEVEL:要用於金鑰的保護層級。
PROTECTION_LEVEL 設為 hsm-single-tenant,並新增 --cryptoKeyBackend 旗標,指定要在哪個單一租戶 Cloud HSM 執行個體建立金鑰,並提供該執行個體的資源 ID:
--crypto-key-backend "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
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」。
呼叫 [`CryptoKey.create`](/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/create),建立非對稱式簽署金鑰。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "ASYMMETRIC_SIGN", "versionTemplate": {"protectionLevel": "PROTECTION_LEVEL", "algorithm": "ALGORITHM"}}'
更改下列內容:
PROJECT_ID:金鑰環所在專案的 ID。LOCATION:金鑰環的 Cloud KMS 位置。KEY_RING:金鑰所屬金鑰環的名稱。KEY_NAME:金鑰名稱。PROTECTION_LEVEL:要用於金鑰的保護層級。ALGORITHM:金鑰使用的演算法,例如EC_SIGN_P256_SHA256。如需支援的演算法清單,請參閱「非對稱簽署演算法」。如要在單一租戶 Cloud HSM 中建立金鑰,請將
PROTECTION_LEVEL設為HSM_SINGLE_TENANT,並在指令主體中加入cryptoKeyBackend欄位,然後新增要匯入金鑰的單一租戶 Cloud HSM 執行個體資源 ID:"crypto-key-backend": "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
建立 KEM 金鑰
請按照下列步驟,建立用於指定金鑰環和位置的金鑰封裝機制 (KEM) 金鑰。您可以調整這些範例,指定不同的保護層級或演算法。如要瞭解詳情和替代值,請參閱「演算法」和「保護層級」。
首次建立金鑰時,初始金鑰版本的狀態為「Pending generation」(待產生)。狀態變更為「Enabled」(已啟用) 後,即可使用金鑰。如要進一步瞭解金鑰版本狀態,請參閱「金鑰版本狀態」。
gcloud
如要在指令列使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "key-encapsulation" \
--default-algorithm "ALGORITHM"
更改下列內容:
KEY_NAME:金鑰名稱。KEY_RING:金鑰所屬金鑰環的名稱。LOCATION:金鑰環的 Cloud KMS 位置。ALGORITHM:金鑰使用的演算法,例如ml-kem-768。如需支援的金鑰封裝演算法清單,請參閱「金鑰封裝演算法」。
如要瞭解所有旗標和可能的值,請執行指令並加上 --help 旗標。
API
這些範例使用 curl 做為 HTTP 用戶端,示範如何使用 API。如要進一步瞭解存取控管,請參閱「存取 Cloud KMS API」。
呼叫 CryptoKey.create,建立用途為 KEY_ENCAPSULATION 的金鑰。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "KEY_ENCAPSULATION", "versionTemplate": {"algorithm": "ALGORITHM"}}'
更改下列內容:
PROJECT_ID:金鑰環所在專案的 ID。LOCATION:金鑰環的 Cloud KMS 位置。KEY_RING:金鑰所屬金鑰環的名稱。KEY_NAME:金鑰名稱。ALGORITHM:金鑰使用的演算法,例如ML_KEM_768。如需支援的金鑰封裝演算法清單,請參閱「金鑰封裝演算法」。
擷取公開金鑰
建立非對稱金鑰時,Cloud KMS 會建立公開/私密金鑰組。金鑰產生後,您隨時可以擷取已啟用非對稱金鑰的公開金鑰。
公開金鑰採用隱私強化電子郵件 (PEM) 格式。詳情請參閱 RFC 7468 的「General Considerations」和「Textual Encoding of Subject Public Key Info」章節。
如要下載現有非對稱金鑰版本的公開金鑰,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「Key Management」(金鑰管理) 頁面。
按一下金鑰環名稱,該金鑰環包含您要擷取公開金鑰的非對稱金鑰。
按一下要擷取公開金鑰的金鑰名稱。
在要擷取公開金鑰的金鑰版本對應列中,按一下「View More」。
按一下「取得公開金鑰」。
提示中會顯示公開金鑰。您可以將公開金鑰複製到剪貼簿。如要下載公開金鑰,請按一下「下載」。
如果沒有看到「取得公開金鑰」選項,請確認下列事項:
- 金鑰為非對稱金鑰。
- 金鑰版本已啟用。
- 您具備
cloudkms.cryptoKeyVersions.viewPublicKey權限。
從 Google Cloud 控制台下載的公開金鑰檔案名稱格式如下:
KEY_RING-KEY_NAME-KEY_VERSION.pub
檔案名稱的各部分以連字號分隔,例如 ringname-keyname-version.pub。
gcloud
如要在指令列使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys versions get-public-key KEY_VERSION \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--public-key-format PUBLIC_KEY_FORMAT \
--output-file OUTPUT_FILE_PATH
更改下列內容:
KEY_VERSION:金鑰版本號碼。KEY_NAME:金鑰名稱。KEY_RING:金鑰所屬金鑰環的名稱。LOCATION:金鑰環的 Cloud KMS 位置。PUBLIC_KEY_FORMAT:要匯出公開金鑰的格式。如果是 NIST PQC 演算法,請使用nist-pqc;如果是 X-Wing,請使用xwing-raw-bytes。對於所有其他鍵,您可以使用pem、der或省略這個參數。OUTPUT_FILE_PATH:要儲存公開金鑰檔案的路徑,例如public-key.pub。
如要瞭解所有旗標和可能的值,請執行指令並加上 --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」。
呼叫 CryptoKeyVersions.getPublicKey 方法,擷取公開金鑰。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION/publicKey?public_key_format=PUBLIC_KEY_FORMAT" \
--request "GET" \
--header "authorization: Bearer TOKEN"
更改下列內容:
PROJECT_ID:金鑰環所在專案的 ID。LOCATION:金鑰環的 Cloud KMS 位置。KEY_RING:金鑰所屬金鑰環的名稱。KEY_NAME:金鑰名稱。KEY_VERSION:金鑰版本號碼。PUBLIC_KEY_FORMAT:要匯出公開金鑰的格式。如果是 PQC 演算法,請使用NIST_PQC。對於所有其他鍵,您可以使用PEM或省略此參數。
如果省略非 PQC 金鑰的公開金鑰格式,輸出內容會與下列內容相似:
{ "pem": "-----BEGIN PUBLIC KEY-----\nQ29uZ3JhdHVsYXRpb25zLCB5b3UndmUgZGlzY292ZX JlZCB0aGF0IHRoaXMgaXNuJ3QgYWN0dWFsbHkgYSBwdWJsaWMga2V5ISBIYXZlIGEgbmlj ZSBkYXkgOik=\n-----END PUBLIC KEY-----\n", "algorithm": "ALGORITHM", "pemCrc32c": "2561089887", "name": "projects/PROJECT_ID/locations/LOCATION/keyRings/ KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/ KEY_VERSION", "protectionLevel": "PROTECTION_LEVEL" }
如果 PQC 演算法的公開金鑰格式為 NIST_PQC,輸出內容會類似下列內容:
{ "publicKeyFormat": "NIST_PQC", "publicKey": { "crc32cChecksum": "1985843562", "data": "kdcOIrFCC5kN8S4i0+R+AoSc9gYIJ9jEQ6zG235ZmCQ=" } "algorithm": "ALGORITHM", "name": "projects/PROJECT_ID/locations/LOCATION/keyRings/ KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/ KEY_VERSION", "protectionLevel": "PROTECTION_LEVEL" }
將公開金鑰轉換為 JWK 格式
Cloud KMS 可讓您擷取 PEM 格式的公開金鑰。某些應用程式可能需要其他金鑰格式,例如 JSON Web Key (JWK)。如要進一步瞭解 JWK 格式,請參閱 RFC 7517。
如要將公開金鑰轉換為 JWK 格式,請按照下列步驟操作:
Go
如要執行這段程式碼,請先設定 Go 開發環境,並安裝 Cloud KMS Go SDK。
Java
如要執行這段程式碼,請先設定 Java 開發環境,並安裝 Cloud KMS Java SDK。
Python
如要執行這段程式碼,請先設定 Python 開發環境,並安裝 Cloud KMS Python SDK。
控管非對稱金鑰的存取權
針對非對稱式金鑰,簽署者或驗證者必須具備適當的權限或角色。
如果使用者或服務將執行簽署,請授予非對稱金鑰的
cloudkms.cryptoKeyVersions.useToSign權限。如果使用者或服務將擷取公開金鑰,請授予非對稱金鑰的
cloudkms.cryptoKeyVersions.viewPublicKey。驗證簽名時須使用公開金鑰。
如要瞭解 Cloud KMS 版本中的權限和角色,請參閱「權限和角色」。
建立 MAC 簽署金鑰
控制台
前往 Google Cloud 控制台的「Key Management」(金鑰管理) 頁面。
找出您要在哪個金鑰環中建立金鑰,然後按一下該金鑰環名稱。
按一下 [Create key] (建立金鑰)。
在「Key name」(金鑰名稱) 部分,輸入金鑰名稱。
在「Protection level」(保護層級) 中,選取「Software」(軟體)、「HSM」或「Single-tenant HSM」(單一租戶 HSM)。
如果選取「Single-tenant HSM」(單一租戶 HSM),請選取要建立金鑰的「Single-tenant HSM instance」(單一租戶 HSM 執行個體)。
在「金鑰內容」部分,選取「產生的金鑰」。
在「用途」部分,選取「MAC 簽署/驗證」。
選用:在「Algorithm」(演算法) 部分,選取 HMAC 簽署演算法。
點選「建立」。
gcloud
如要在指令列使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
如要建立軟體或多租戶 Cloud HSM 金鑰,請使用kms keys
create 指令:
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "mac" \
--default-algorithm "ALGORITHM" \
--protection-level "PROTECTION_LEVEL"
更改下列內容:
KEY_NAME:金鑰名稱。KEY_RING:金鑰所屬金鑰環的名稱。LOCATION:金鑰環的 Cloud KMS 位置。ALGORITHM:HMAC 簽署演算法,例如hmac-sha256。如要查看所有支援的 HMAC 演算法,請參閱「HMAC 簽署演算法」。PROTECTION_LEVEL:金鑰的保護層級,例如hsm。您可以省略software金鑰的--protection-level旗標。
如要進一步瞭解所有旗標和可能的值,請執行加上 --help 旗標的指令。
kms keys create 指令中加入 --crypto-key-backend 旗標:
gcloud kms keys create KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--purpose "mac" \
--default-algorithm "ALGORITHM" \
--protection-level "PROTECTION_LEVEL" \
--crypto-key-backend="projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
更改下列內容:
INSTANCE_PROJECT:單一租戶 Cloud HSM 執行個體所在專案的 ID。INSTANCE_NAME:要建立金鑰的單一租戶 Cloud HSM 執行個體名稱。如要進一步瞭解單一租戶 Cloud HSM 執行個體,請參閱「建立及管理單一租戶 Cloud HSM 執行個體」。
如要瞭解所有旗標和可能的值,請執行指令並加上 --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」。
如要建立軟體或多租戶 Cloud HSM 金鑰,請使用 CryptoKey.create 方法:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "MAC", "versionTemplate": { "protectionLevel": "PROTECTION_LEVEL", "algorithm": "ALGORITHM" }}'
更改下列內容:
PROJECT_ID:金鑰環所在專案的 ID。LOCATION:金鑰環的 Cloud KMS 位置。KEY_RING:金鑰所屬金鑰環的名稱。KEY_NAME:金鑰名稱。PROTECTION_LEVEL:金鑰的保護層級,例如SOFTWARE或HSM。ALGORITHM:HMAC 簽署演算法,例如HMAC_SHA256。如要查看所有支援的 HMAC 演算法,請參閱「HMAC 簽署演算法」。
如要建立單一租戶 Cloud HSM 金鑰,請在 CryptoKey.create 要求主體中加入 cryptoKeyBackend 欄位:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?crypto_key_id=KEY_NAME" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data '{"purpose": "MAC", "versionTemplate": {
"protectionLevel": "PROTECTION_LEVEL",
"algorithm": "ALGORITHM",
"cryptoKeyBackend": "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME" }}'
更改下列內容:
INSTANCE_PROJECT:單一租戶 Cloud HSM 執行個體所在專案的 ID。INSTANCE_NAME:要建立金鑰的單一租戶 Cloud HSM 執行個體名稱。如要進一步瞭解單一租戶 Cloud HSM 執行個體,請參閱「建立及管理單一租戶 Cloud HSM 執行個體」。
後續步驟
- 瞭解金鑰輪替。
- 瞭解如何建立及驗證簽章。
- 瞭解如何使用 RSA 金鑰加密及解密資料。
- 瞭解如何擷取公開金鑰。