本頁說明如何自動或手動輪替金鑰。如要進一步瞭解一般金鑰輪替,請參閱「金鑰輪替」一文。
必要的角色
如要取得輪替金鑰所需的權限,請要求管理員授予您金鑰的下列 IAM 角色:
-
Cloud KMS 管理員 (
roles/cloudkms.admin
) -
重新加密資料:
Cloud KMS CryptoKey 加密者/解密者 (
roles/cloudkms.cryptoKeyEncrypterDecrypter
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義的角色具備輪替金鑰所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要輪替金鑰,您必須具備下列權限:
-
變更主要金鑰版本:
cloudkms.cryptoKeys.update
-
變更或停用自動旋轉功能:
cloudkms.cryptoKeys.update
-
建立新的金鑰版本:
cloudkms.cryptoKeyVersions.create
-
停用舊金鑰版本:
cloudkms.cryptoKeyVersions.update
-
重新加密資料:
-
cloudkms.cryptoKeyVersions.useToDecrypt
-
cloudkms.cryptoKeyVersions.useToEncrypt
-
如果單一使用者具備包含所有這些權限的自訂角色,就能自行輪替金鑰並重新加密資料。Cloud KMS 管理員和 Cloud KMS 加密編譯金鑰加密者/解密者角色的使用者可以合作輪替金鑰,並重新加密資料。指派角色時,請遵循最低權限原則。詳情請參閱「權限與角色」。
輪替金鑰時,系統不會自動重新加密以舊版金鑰加密的資料。詳情請參閱解密及重新加密。輪替金鑰不會自動停用或刪除任何現有金鑰版本。刪除不再需要的金鑰版本有助於降低成本。
設定自動輪替
如要在建立新金鑰時設定自動輪替,請按照下列步驟操作:
控制台
使用 Trusted Cloud 控制台建立金鑰時,Cloud KMS 會自動設定輪替週期和下一個輪替時間。你可以選擇使用預設值,或指定其他值。
如要在建立金鑰時指定其他輪替週期和開始時間,請在執行下列操作「之後」才點選「建立」按鈕:
在「金鑰輪替週期」部分,選取所需選項。
在「開始於」中,選取您希望系統首次自動輪播廣告的日期。您可以將「開始時間」保留為預設值,這樣系統會在您建立金鑰後,經過一個金鑰輪替週期時,開始第一次自動輪替。
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
如要執行這段程式碼,請先瞭解如何在 Trusted 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
。
如要為現有機碼設定自動輪替,請按照下列步驟操作:
控制台
前往 Trusted Cloud 控制台的「Key Management」頁面。
按一下金鑰環名稱,該金鑰環包含您要新增輪替時間表的金鑰。
按一下要新增輪替時間表的金鑰。
按一下標題中的「編輯輪替週期」。
在提示中,為「Rotation period」(輪替週期) 和「Starting on」(開始於) 欄位選擇新值。
在提示中按一下「儲存」。
gcloud
如要在指令列上使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys update KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --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
如要執行這段程式碼,請先瞭解如何在 Trusted 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.patch
方法:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME?updateMask=rotationPeriod,nextRotationTime" \ --request "PATCH" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"rotationPeriod": "ROTATION_PERIOD", "nextRotationTime": "NEXT_ROTATION_TIME"}'
更改下列內容:
ROTATION_PERIOD
:輪替金鑰的間隔,例如30d
表示每 30 天輪替一次金鑰。輪替週期至少須為 1 天,最多為 100 年。詳情請參閱「CryptoKey.rotationPeriod」。NEXT_ROTATION_TIME
:完成下一次輪替的時間戳記,例如2023-01-01T01:02:03
。詳情請參閱CryptoKey.nextRotationTime
。
手動輪替金鑰
首先,請建立新的金鑰版本:
控制台
前往 Trusted Cloud 控制台的「Key Management」頁面。
找出您要在哪個金鑰環中建立新金鑰版本,然後按一下該金鑰環名稱。
找出要建立新金鑰版本的金鑰,然後按一下該金鑰。
按一下頁首中的「旋轉」。
在提示中按一下「旋轉」確認操作。
gcloud
如要在指令列上使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION
更改下列內容:
KEY_NAME
:金鑰名稱。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
如要執行這段程式碼,請先瞭解如何在 Trusted 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.create 方法,建立新的金鑰版本。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions" \ --request "POST" \ --header "authorization: Bearer TOKEN"
這項指令會建立新的金鑰版本,但不會將其設為主要版本。
如要將新金鑰版本設為主要版本,請參閱「將現有版本設定為主要金鑰版本」。
如有必要,請重新加密使用舊版金鑰加密的資料。
將現有版本設為主要金鑰版本
如要將不同金鑰版本設為金鑰的主要版本,請使用新的主要版本資訊更新金鑰。您必須先啟用金鑰版本,才能將其設為主要版本。
控制台
前往 Trusted Cloud 控制台的「Key Management」頁面。
按一下金鑰環名稱,該金鑰環包含您要更新主要版本的金鑰。
按一下要更新主要版本的金鑰。
在要設為主要版本的金鑰對應列中,按一下「查看更多」圖示
。按一下選單中的「設為主要版本」。
在確認提示中,按一下「設為主要歸因模式」。
gcloud
如要在指令列上使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys update KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --primary-version KEY_VERSION
更改下列內容:
KEY_NAME
:金鑰名稱。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:金鑰環的 Cloud KMS 位置。- KEY_VERSION:新主鍵版本的版本號碼。
如要瞭解所有旗標和可能的值,請使用 --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
如要執行這段程式碼,請先瞭解如何在 Trusted Cloud上使用 PHP,並安裝 Cloud KMS PHP SDK。
Ruby
如要執行這段程式碼,請先設定 Ruby 開發環境,然後安裝 Cloud KMS Ruby SDK。
Python
如要執行這段程式碼,請先設定 Python 開發環境,然後安裝 Cloud KMS Python SDK。
API
這些範例使用 curl 做為 HTTP 用戶端,示範如何使用 API。如要進一步瞭解存取權控管,請參閱「存取 Cloud KMS API」一文。
呼叫 CryptoKey.updatePrimaryVersion 方法,變更主要金鑰版本。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:updatePrimaryVersion" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"cryptoKeyVersionId": "KEY_VERSION"}'
更改下列內容:
PROJECT_ID
:包含金鑰環的專案 ID。LOCATION
:金鑰環的 Cloud KMS 位置。KEY_RING
:金鑰所屬金鑰環的名稱。KEY_NAME
:金鑰名稱。- KEY_VERSION:新主鍵版本的版本號碼。
變更主要金鑰版本後,通常會在 1 分鐘內完成變更。不過在特殊情況下,這項變更最多可能需要 3 小時才會全面生效。在這段期間,系統可能會使用先前的主要版本加密資料。詳情請參閱 Cloud KMS 資源一致性。
停用自動輪替
如要停用金鑰的自動輪替,請清除金鑰的輪替排程:
控制台
前往 Trusted Cloud 控制台的「Key Management」頁面。
按一下金鑰環名稱,該金鑰環包含您要移除輪替時間表的金鑰。
按一下要移除輪替時間表的金鑰。
按一下標題中的「編輯輪替週期」。
在提示中,按一下「輪替週期」欄位,然後選取「永不 (手動輪替)」。
在提示中按一下「儲存」。
gcloud
如要在指令列上使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms keys update KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --remove-rotation-schedule
更改下列內容:
KEY_NAME
:金鑰名稱。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
如要執行這段程式碼,請先瞭解如何在 Trusted Cloud上使用 PHP,並安裝 Cloud KMS PHP SDK。
Ruby
如要執行這段程式碼,請先設定 Ruby 開發環境,然後安裝 Cloud KMS Ruby SDK。
Python
如要執行這段程式碼,請先設定 Python 開發環境,然後安裝 Cloud KMS Python SDK。
API
這些範例使用 curl 做為 HTTP 用戶端,示範如何使用 API。如要進一步瞭解存取權控管,請參閱「存取 Cloud KMS API」一文。
如要更新金鑰,請使用 CryptoKey.patch
方法:
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME?updateMask=rotationPeriod,nextRotationTime" \ --request "PATCH" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data '{"rotationPeriod": null, "nextRotationTime": null}'
如要進一步瞭解 rotationPeriod
和 nextRotationTime
,請參閱 keyRings.cryptoKeys
。
輪替外部金鑰
您可以設定自動輪替對稱式協調外部金鑰。您也可以手動為對稱或非對稱的協調式外部金鑰建立新金鑰版本。
輪替或建立新的金鑰版本後,所有以該金鑰保護的新資料都會使用新金鑰版本加密。使用先前金鑰版本保護的資料不會重新加密。因此,外部金鑰管理工具必須繼續提供舊版金鑰的金鑰內容。
如要為協調式外部金鑰建立新的金鑰版本,請完成下列步驟:
控制台
前往 Trusted Cloud 控制台的「Key Management」頁面。
選取金鑰環,然後選取金鑰。
按一下「建立版本」。訊息會指出系統會在 Cloud KMS 和 EKM 中產生新的金鑰版本。如果看到「金鑰路徑」或「金鑰 URI」欄位,表示所選金鑰不是協調式外部金鑰。
如要確認建立新金鑰版本,請按一下「建立版本」。
新金鑰版本會顯示為「待產生」狀態。如果是對稱金鑰,手動建立的金鑰版本不會自動設為主要金鑰版本。您可以將新金鑰版本設為主要版本。
gcloud CLI
如要建立新的對稱式金鑰版本並設為主要金鑰版本,請使用 kms keys versions create
指令搭配 --primary
旗標:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --primary
更改下列內容:
KEY_NAME
:金鑰名稱。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:金鑰環的 Cloud KMS 位置。
如要建立新的非對稱式金鑰版本,或建立新的對稱式金鑰版本 (非主要金鑰版本),請使用 kms keys versions
create
指令:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION
更改下列內容:
KEY_NAME
:金鑰名稱。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:金鑰環的 Cloud KMS 位置。
後續步驟
- 輪替金鑰後,您可以重新加密以該金鑰加密的資料。
- 重新加密資料後,您可以檢查金鑰版本是否正在使用中。
- 確認金鑰版本不再使用後,即可銷毀金鑰版本。