本頁說明如何自動或手動輪替金鑰。如要進一步瞭解一般金鑰輪替作業,請參閱「金鑰輪替」一文。
必要的角色
如要取得旋轉金鑰所需的權限,請要求管理員為您的金鑰授予下列 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 CryptoKey 加密編譯金鑰加密者/解密者角色的使用者可以共同旋轉金鑰並重新加密資料。指派角色時,請遵循最低權限原則。詳情請參閱「權限與角色」。
輪替金鑰時,系統不會自動重新加密使用先前金鑰版本加密的資料。如需更多資訊,請參閱「解密及重新加密」。輪替金鑰不會自動停用或刪除任何現有的金鑰版本。刪除不再需要的金鑰版本有助於降低成本。
設定自動旋轉
如要在建立新金鑰時設定自動輪替功能,請按照下列步驟操作:
控制台
當您使用 Google Cloud 控制台建立金鑰時,Cloud KMS 會自動設定輪替週期和下一個輪替時間。您可以選擇使用預設值,或指定不同的值。
如要在建立金鑰時指定其他輪替週期和開始時間,請在執行下列操作「之前」點選「Create」(建立) 按鈕:
在「金鑰輪替週期」部分,選取所需選項。
在「開始日期」中,選取要開始自動輪替的日期。您可以將「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
。
如要為現有機碼設定自動輪替功能,請按照下列步驟操作:
控制台
前往 Google 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
如要執行這段程式碼,請先瞭解如何在 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.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
。
手動輪替金鑰
首先,請建立新的金鑰版本:
控制台
前往 Google 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
如要執行這段程式碼,請先瞭解如何在 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.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"
這項指令會建立新金鑰版本,但不會將其設為主要版本。
如要將新金鑰版本設為主要版本,請參閱「將現有版本設為主要金鑰版本」。
如有需要,請重新加密使用先前金鑰版本加密的資料。
將現有版本設為主要金鑰版本
如要將其他金鑰版本設為金鑰的主要版本,請使用新的主要版本資訊更新金鑰。您必須先啟用金鑰版本,才能將其設為主要版本。
控制台
前往 Google 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
如要執行這段程式碼,請先瞭解如何在 Google 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 資源一致性。
停用自動輪替
如要停用金鑰的自動輪替功能,請清除金鑰的輪替排程:
控制台
前往 Google Cloud 控制台的「Key Management」頁面。
按一下金鑰環名稱,該金鑰環包含您要移除輪替時間表的金鑰。
按一下要移除輪替時間表的金鑰。
在標題中,按一下「編輯輪替週期」。
在提示中,按一下「Rotation period」欄位,然後選取「Never (manual rotation)」。
在提示訊息中,按一下「儲存」。
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
如要執行這段程式碼,請先瞭解如何在 Google 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
。
輪替外部金鑰
輪替協調外部金鑰
您可以為對稱式協調外部金鑰設定自動輪替。您也可以手動建立對稱式或非對稱式協調外部金鑰的新版本。
輪替或建立新金鑰版本後,系統會使用新金鑰版本加密所有以該金鑰保護的新建立資料。使用先前金鑰版本保護的資料不會重新加密。因此,您的外部金鑰管理工具必須繼續提供先前金鑰版本的金鑰內容,以供使用。
如要為協調外部金鑰建立新金鑰版本,請完成下列步驟:
控制台
前往 Google Cloud 控制台的「Key Management」頁面。
選取金鑰環,然後選取金鑰。
按一下「建立版本」。系統會顯示訊息,指出 Cloud KMS 和 EKM 都會產生新的金鑰版本。如果您看到「Key path」或「Key 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 位置。
透過 VPC 金鑰輪替手動管理的 Cloud EKM
首先,請在外部金鑰管理工具中輪替外部金鑰內容。如果這會產生新的金鑰路徑,您就需要輪替或建立新的 Cloud EKM 金鑰版本,並使用新的金鑰路徑。針對對稱加密金鑰,請輪替 Cloud EKM 金鑰,並指定外部金鑰管理工具的新金鑰路徑。針對非對稱式金鑰,請建立新的金鑰版本,並指定新的金鑰路徑。
輪替或建立新金鑰版本後,系統會使用新金鑰版本加密所有以該金鑰保護的新建立資料。使用先前金鑰版本保護的資料不會重新加密。因此,您的外部金鑰管理工具必須繼續提供先前金鑰版本的金鑰內容,以供使用。
如果外部金鑰管理合作夥伴系統中的金鑰內容沒有變更,但金鑰路徑有所變動,您可以更新金鑰的外部路徑,而無須輪替金鑰。
控制台
前往 Google Cloud 控制台的「Key Management」頁面。
選取金鑰環,然後選取金鑰。
按一下「Rotate key」。
在「Key path」中,輸入新版本的鍵路徑。
按一下「旋轉金鑰」確認。
gcloud
如要在指令列上使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
如要建立新的對稱式金鑰版本並將其設為主要金鑰版本,請使用 kms keys versions create
指令搭配 --primary
旗標:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ekm-connection-key-path EXTERNAL_KEY_PATH \ --primary
更改下列內容:
KEY_NAME
:鍵的名稱。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:金鑰環的 Cloud KMS 位置。EXTERNAL_KEY_PATH
:新外部金鑰版本的路徑。
如要建立新的非對稱式金鑰版本,或是建立非主要金鑰版本的新對稱式金鑰版本,請使用 kms keys versions
create
指令:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ekm-connection-key-path EXTERNAL_KEY_PATH
更改下列內容:
KEY_NAME
:鍵的名稱。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:金鑰環的 Cloud KMS 位置。EXTERNAL_KEY_PATH
:新外部金鑰版本的路徑。
如需所有旗標和可能值的相關資訊,請搭配 --help
旗標執行指令。
金鑰版本建立成功後,您可以像使用其他 Cloud KMS 金鑰版本一樣使用它。
透過網際網路金鑰輪替手動管理的 Cloud EKM
首先,請在外部金鑰管理工具中輪替外部金鑰內容。如果這會產生新的 URI,您就需要輪替或建立使用新 URI 的新 Cloud EKM 金鑰版本。針對對稱加密金鑰,請輪替 Cloud EKM 金鑰,並透過外部金鑰管理工具指定新的金鑰 URI。針對非對稱式金鑰,請建立新金鑰版本並指定新的金鑰 URI。
輪替或建立新金鑰版本後,系統會使用新金鑰版本加密所有以該金鑰保護的新建立資料。使用先前金鑰版本保護的資料不會重新加密。因此,您的外部金鑰管理工具必須繼續提供先前金鑰版本的金鑰內容,以供使用。
如果外部金鑰管理合作夥伴系統中的金鑰內容沒有變更,但 URI 有所變動,您可以更新金鑰的外部 URI,而無須輪替金鑰。
控制台
前往 Google Cloud 控制台的「Key Management」頁面。
選取金鑰環,然後選取金鑰。
針對對稱金鑰選取「輪替金鑰」,針對非對稱金鑰選取「建立版本」。
輸入新的金鑰 URI,然後針對對稱式金鑰選取「Rotate Key」,針對非對稱式金鑰選取「Create version」。
新金鑰版本會成為主要版本。
gcloud CLI
如要建立新的對稱式金鑰版本並將其設為主要金鑰版本,請使用 kms keys versions create
指令搭配 --primary
旗標:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --external-key-uri EXTERNAL_KEY_URI \ --primary
更改下列內容:
KEY_NAME
:鍵的名稱。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:金鑰環的 Cloud KMS 位置。EXTERNAL_KEY_URI
:新外部金鑰版本的金鑰 URI。
如要建立新的非對稱式金鑰版本,或是建立非主要金鑰版本的新對稱式金鑰版本,請使用 kms keys versions
create
指令:
gcloud kms keys versions create \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --external-key-uri EXTERNAL_KEY_URI
更改下列內容:
KEY_NAME
:鍵的名稱。KEY_RING
:金鑰所屬金鑰環的名稱。LOCATION
:金鑰環的 Cloud KMS 位置。EXTERNAL_KEY_URI
:新外部金鑰版本的金鑰 URI。
後續步驟
- 輪替金鑰後,您可以重新加密使用該金鑰加密的資料。
- 重新加密資料後,您可以檢查金鑰版本是否正在使用。
- 確認不再使用某個金鑰版本後,您可以刪除金鑰版本。