本指南說明如何使用 Google Cloud CLI 建立、佈建及管理單一租戶 Cloud HSM 執行個體。建立及佈建執行個體後,您可以使用 Google Cloud 控制台、Cloud Key Management Service API、gcloud CLI 和用戶端程式庫,在執行個體中建立及使用金鑰。
建立及管理執行個體需要仲裁驗證。建立執行個體時,您會定義執行個體作業所需的法定人數成員核准次數。仲裁成員必須一律擁有至少這個數量的控制金鑰,才能維持執行個體的管理控制權。
事前準備
- 建立及維護執行個體時,請參閱並套用單一租戶 Cloud HSM 最佳做法。
- 決定要從多少法定人數成員開始。 如果現有法定人數成員核准,之後可以新增其他法定人數成員。法定人數下限為三名成員。
- 決定提案需要多少法定人數成員核准。執行個體建立後,無法變更這組編號。仲裁成員必須隨時擁有這麼多控制金鑰,才能維護執行個體。法定人數下限為兩人。必要法定人數必須少於法定人數成員人數。
- 決定如何確保執行個體及時重新整理。
您必須監控執行個體的
disableDate,並在期限前提議、核准及執行執行個體重新整理作業,以免發生不必要的停機時間。 -
如要取得建立、管理及使用單一租戶 Cloud HSM 執行個體所需的權限,請要求管理員在專案或父項資源中授予您下列 IAM 角色:
-
建立提案:
Cloud KMS 單一租戶 HSM 提案者 (
cloudkms.hsmSingleTenantProposer) -
核准提案:
Cloud KMS 單一租戶 HSM 仲裁成員 (
cloudkms.hsmSingleTenantQuorumMember) -
執行提案:
Cloud KMS 單一租戶 HSM 執行者 (
cloudkms.hsmSingleTenantExecutor) -
建立金鑰:
Cloud KMS 單一租戶 HSM 金鑰建立者 (
roles/cloudkms.hsmSingleTenantKeyCreator)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
-
建立提案:
Cloud KMS 單一租戶 HSM 提案者 (
為每個仲裁成員產生一組 RSA-2048 金鑰組,用於雙重驗證 (2FA)。建議您使用實體權杖做為控制鍵。請按照貴機構的標準,在實體權杖上建立 RSA-2048 金鑰組。
為方便示範,本指南會使用 OpenSSL 建立三把軟體支援的 RSA-2048 金鑰:
openssl genrsa -out rsaprivate1.pem openssl genrsa -out rsaprivate2.pem openssl genrsa -out rsaprivate3.pem openssl rsa -in rsaprivate1.pem -out rsapub1.pem --pubout openssl rsa -in rsaprivate2.pem -out rsapub2.pem --pubout openssl rsa -in rsaprivate3.pem -out rsapub3.pem --pubout安全儲存私密金鑰,您需要這項金鑰才能核准提案。 請妥善保管公開金鑰,您需要這些金鑰才能建立單一租戶 Cloud HSM 執行個體。
選擇支援單一租戶 Cloud HSM 的 Cloud KMS 位置。如要找出相容位置,請查看 Cloud KMS 位置頁面上的位置清單。在「HSM support」(HSM 支援) 篩選器中,選取「Supports single-tenant HSM」(支援單一租戶 HSM)。
建立及佈建執行個體
如要建立及佈建單一租戶 Cloud HSM 執行個體,請使用 gcloud CLI 建立執行個體資源、建立提案來註冊驗證金鑰,然後核准並執行提案。
建立執行個體
這項步驟必須由具備 Cloud KMS 單一租戶 HSM 提案者角色的執行個體管理員完成。
設定預設專案。
gcloud config set project PROJECT_ID將 PROJECT_ID 替換為專案 ID。
建立單一租戶 Cloud HSM 執行個體。
gcloud kms single-tenant-hsm create --location=LOCATION \ --total-approver-count=QUORUM_MEMBER_COUNT \ --single-tenant-hsm-instance-id=INSTANCE_ID更改下列內容:
LOCATION:要建立執行個體的位置,例如us-central1。QUORUM_MEMBER_COUNT:仲裁成員總數。這也是您先前建立的控制項金鑰數量。最小值為3。之後可以透過法定人數核准新增其他金鑰。您必須至少有比必要法定人數多一位的法定人數成員,才能在遺失控制金鑰後復原。INSTANCE_ID:要用於執行個體的 ID,例如example-sthsm-instance。您可以省略--single-tenant-hsm-instance-id標記,讓 Cloud HSM 指派 UUID。
檢查執行個體的狀態。
gcloud kms single-tenant-hsm describe INSTANCE_ID \ --location=LOCATION更改下列內容:
INSTANCE_ID:執行個體的 ID。LOCATION:建立執行個體的位置。
如果狀態為
PENDING_TWO_FACTOR_AUTH_REGISTRATION,您可以佈建執行個體。通常需要 5 到 30 分鐘才能達到這個狀態。
佈建執行個體
-
使用
register_2fa_keys作業建立提案,註冊雙重驗證金鑰。 這個步驟需要 Cloud KMS 單一租戶 HSM 提案者角色。 與大多數提案不同,register_2fa_keys 提案需要所有法定人數成員簽署的驗證問題。gcloud kms single-tenant-hsm proposal create INSTANCE_ID \ --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \ --location LOCATION \ --operation-type register_2fa_keys \ --required-approver-count MEMBERS_REQUIRED_FOR_APPROVAL \ --two-factor-public-key-pems=PUBLIC_KEY_LIST
更改下列內容:
INSTANCE_ID:執行個體的 ID。PROPOSAL_ID:您要用於這項提案的專屬 ID,例如set-up-2fa。LOCATION:建立執行個體的位置。MEMBERS_REQUIRED_FOR_APPROVAL:提案必須獲得法定人數的成員核准,作業才能執行。最小值為2。執行個體佈建完成後,即無法變更這個值。仲裁成員必須一律有權存取至少這麼多控制金鑰,才能保留執行個體的管理控制權。PUBLIC_KEY_LIST:以半形逗號分隔的清單,列出所有控制項金鑰的公開金鑰部分路徑,例如rsapub1.pem,rsapub2.pem,rsapub3.pem。這個清單中的公開金鑰數量必須與先前使用的QUORUM_MEMBER_COUNT值相符。
-
查看提案狀態,等待狀態變為
PENDING。gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION
更改下列內容:
INSTANCE_ID:執行個體的 ID。PROPOSAL_ID提案的 ID,例如set-up-2fa。LOCATION:建立執行個體的位置。
狀態為
PENDING時,即可簽署挑戰。 -
從提案取得挑戰。 如要佈建新的單一租戶 Cloud HSM 執行個體,需要仲裁中所有成員簽署的驗證問題。
gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION \ --format="json[](quorumParameters.challenges)"
這項指令會傳回 JSON 格式的挑戰陣列。
-
針對每個金鑰,使用 `basenc --base64url -d` 解碼驗證問題,並以對應的私密金鑰簽署。
echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
更改下列內容:
N:挑戰編號,例如第一個挑戰為1,第二個挑戰為2,依此類推。CHALLENGE_N:上一個步驟輸出內容中的挑戰編號N內容。PRIVATE_KEY_N:私密金鑰編號N的路徑,例如第一個驗證的rsaprivate1.pem。
-
上傳簽署的挑戰,核准提案。你可以透過一個或多個指令上傳檔案。這個步驟需要 Cloud KMS 單一租戶 HSM 仲裁成員角色。
gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \ --location LOCATION \ --single_tenant_hsm_instance INSTANCE_ID \ --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
將
SIGNED_QUORUM_CHALLENGE_LIST替換為以 JSON 格式編排的驗證陣列,其中每個清單項目都是元組,包含已簽署驗證的路徑和對應公開金鑰的路徑,例如[('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')],可透過一個指令提交前兩個已簽署的驗證。上傳規定數量的簽署挑戰後,提案狀態會更新為
APPROVED。 -
提案獲准後,請使用
execute指令完成register_2fa_keys作業。這個步驟需要 Cloud KMS 單一租戶 HSM 執行者角色,且必須在提案建立後的 24 小時內完成。gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
這項長時間執行的作業會佈建使用者並建立備份。執行個體會在 20 到 30 分鐘後變成
ACTIVE。 執行個體
ACTIVE後,請查看執行個體詳細資料,瞭解disableDate:gcloud kms single-tenant-hsm describe INSTANCE_ID \ --location=LOCATION請注意執行個體的
disableDate。您必須在此時間前完成refresh_sthi作業,否則執行個體將遭到停用。
查看執行個體
具備下列任一角色的使用者,可以查看單一租戶 Cloud HSM 執行個體清單及其狀態:
- Cloud KMS 單一租戶 HSM 提案者
- Cloud KMS 單一租戶 HSM 仲裁成員
- Cloud KMS 單一租戶 HSM 執行者
- Cloud KMS 檢視者
- Cloud KMS 管理員
請務必定期檢查執行個體狀態。執行個體必須定期重新整理,才能維持「有效」狀態。
您可以使用「有效」狀態的執行個體。如要在單一租戶 Cloud HSM 執行個體中建立或匯入金鑰,開發人員需要執行個體的資源 ID。資源 ID 的格式如下:
projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME
如要查看機構中的執行個體並找出資源 ID,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「KMS infrastructure」(KMS 基礎架構) 頁面。
在「單一租戶 HSM 執行個體」資訊卡上,按一下「查看」。「單一租戶 HSM 執行個體」頁面會顯示您有權查看的所有單一租戶 Cloud HSM 執行個體清單。
如要查看執行個體的詳細資料,請按一下執行個體的名稱。「單一租戶 HSM 執行個體詳細資料」頁面會顯示所選執行個體的詳細資料,包括執行個體的完整資源 ID,以及為該執行個體建立的提案清單。
選用:如要查看或下載與仲裁成員目前雙重驗證 (2FA) 金鑰相關聯的公開金鑰,請按一下「取得公開金鑰」。您可以將公開金鑰與私密雙重驗證金鑰進行比較,確認哪些控制金鑰處於啟用狀態。
gcloud
使用 kms single-tenant-hsm list 方法查看現有執行個體清單。
gcloud kms single-tenant-hsm list --location=LOCATION
請將 LOCATION 替換為您要查看單一租戶 Cloud HSM 執行個體的位置。
使用 kms single-tenant-hsm describe 方法查看現有執行個體的詳細資料。
gcloud kms single-tenant-hsm describe INSTANCE_ID \
--location=LOCATION
更改下列內容:
INSTANCE_ID:要查看詳細資料的執行個體。LOCATION:要查看單一租戶 Cloud HSM 執行個體的位置。
使用執行個體
執行個體處於 ACTIVE 狀態時,您可以建立及使用金鑰。您可以在與有效單一租戶 Cloud HSM 執行個體位於相同位置的任何金鑰環上,建立單一租戶 Cloud HSM 金鑰。
如要建立單一租戶 Cloud HSM 金鑰,除了 Cloud KMS 管理員角色外,還需要 Cloud KMS 單一租戶 HSM 金鑰建立者角色。
建立單一租戶 Cloud HSM 金鑰後,使用這些金鑰不需要特殊權限。
建立金鑰
建立單一租戶 Cloud HSM 金鑰時,您必須指定要建立金鑰的單一租戶 Cloud HSM 執行個體。否則,這個程序與建立任何其他金鑰類似。如需詳細操作說明,請參閱「建立金鑰」一節。
匯入金鑰
將金鑰內容匯入單一租戶 Cloud HSM 金鑰時,您必須指定要儲存金鑰內容的單一租戶 Cloud HSM 執行個體。否則,程序與匯入任何其他金鑰類似。如需詳細操作說明,請參閱「將金鑰版本匯入 Cloud Key Management Service」。
使用金鑰
建立金鑰後,使用單一租戶 Cloud HSM 金鑰的方式,與使用任何其他 Cloud HSM 金鑰相同。您不需要指定單一租戶 Cloud HSM 執行個體即可使用金鑰。
金鑰可攜性
金鑰可攜性可讓您在單一租戶 Cloud HSM 執行個體上管理自己的包裝金鑰。這項功能可讓您使用自訂包裝金鑰包裝其他金鑰 (稱為「可包裝金鑰」),然後匯入及匯出這些金鑰。金鑰可攜性有助於不同雲端服務供應商之間,或不同區域之間的金鑰互通性。 Google Cloud
所有金鑰可攜性作業都必須在單一租戶 Cloud HSM 執行個體上建立及儲存金鑰。金鑰包裝僅支援 RFC 5649 演算法。
如要使用金鑰可攜性,請完成下列步驟:
- 設定信任的包裝金鑰。
- 建立或匯入可包裝的金鑰。
- 使用信任的包裝金鑰匯入預先包裝的金鑰內容,或匯出可包裝的金鑰。
設定信任的包裝金鑰
「受信任的包裝金鑰」是 AES 金鑰,用於包裝及解除包裝其他金鑰,以便匯出或匯入金鑰,如 RFC 5649 所定義。如要在單一租戶 Cloud HSM 執行個體上設定可信任的包裝金鑰,您必須以 AES_WRAPPING 用途匯入金鑰 (僅供匯入),然後將其升級為可信任。
重要升級需要單一法定人數成員核准。
-
建立
AES_WRAPPING用途的僅供匯入金鑰資源:gcloud kms keys create KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose AES_WRAPPING \ --protection-level HSM_SINGLE_TENANT \ --skip-initial-version-creation \ --import-only \ --crypto-key-backend "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
更改下列內容:
KEY_NAME:受信任包裝金鑰的 ID。LOCATION:金鑰環和單一租戶 Cloud HSM 執行個體所在的區域。KEY_RING:要在其中建立金鑰的金鑰環。INSTANCE_PROJECT:包含單一租戶 Cloud HSM 執行個體的專案 ID。INSTANCE_NAME:單一租戶 Cloud HSM 執行個體的 ID。
-
建立匯入工作,匯入金鑰內容:
gcloud kms import-jobs create IMPORT_JOB_NAME \ --location LOCATION \ --keyring KEY_RING \ --import-method IMPORT_METHOD \ --protection-level HSM_SINGLE_TENANT
更改下列內容:
IMPORT_JOB_NAME:匯入作業的 ID。IMPORT_METHOD:用於包裝金鑰素材的匯入方法,例如rsa-oaep-4096-sha256-aes-256。
-
匯入原始 AES 金鑰內容。
gcloud kms keys versions import \ --import-job IMPORT_JOB_NAME \ --location LOCATION \ --keyring KEY_RING \ --key KEY_NAME \ --algorithm aes-256-kwp \ --target-key-file TRUSTED_KEY_PATH
將
TRUSTED_KEY_PATH替換為包含原始受信任包裝金鑰位元組的檔案路徑。 -
建立提案,將包裝金鑰升級為信任狀態。作業類型為
upgrade_key_trust。促銷活動作業必須由發起作業的同一位法定人數成員簽署及核准。gcloud kms single-tenant-hsm proposal create INSTANCE_NAME \ --location LOCATION \ --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \ --operation-type upgrade_key_trust \ --keyring KEY_RING \ --key KEY_NAME \ --two-factor-login-key PATH_TO_PUBLIC_KEY
更改下列內容:
PROPOSAL_ID:這項提案的專屬 ID。PATH_TO_PUBLIC_KEY:發起及簽署提案的仲裁成員公開金鑰路徑。
-
查看提案狀態,並等待狀態變更為
PENDING:gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_NAME \ --location LOCATION
狀態為
PENDING時,即可簽署挑戰。 -
從提案取得挑戰。
gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_NAME \ --location LOCATION \ --format="json[](requiredActionQuorumParameters.requiredChallenges)"
這項指令會傳回包含驗證問題的 JSON 格式陣列。
-
使用
basenc --base64url -d解碼驗證問題,然後簽署。驗證問題必須由與提案建立時提供的公開金鑰相符的私密金鑰簽署。echo CHALLENGE | basenc --base64url -d > decoded-challenge.txt openssl dgst -sign PRIVATE_KEY_PATH -out signed-challenge.txt decoded-challenge.txt
更改下列內容:
CHALLENGE:上一個步驟輸出內容中的驗證內容。PRIVATE_KEY_PATH:建立提案的仲裁成員私密金鑰路徑。
-
上傳簽署的挑戰,核准提案。這個步驟需要 Cloud KMS 單一租戶 HSM 仲裁成員角色。
gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \ --location LOCATION \ --single_tenant_hsm_instance INSTANCE_NAME \ --required-challenge-replies="[('signed-challenge.txt','PUBLIC_KEY_PATH')]"
將
PUBLIC_KEY_PATH替換為建立提案的仲裁成員公開金鑰路徑。上傳簽署的挑戰後,提案狀態會更新為
APPROVED。 -
提案獲得核准後,請執行提案以完成促銷活動:
gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_NAME \ --location LOCATION
提案執行完畢後,金鑰會升級為可信任的包裝金鑰,並可用於在單一租戶 Cloud HSM 執行個體上匯入或匯出其他金鑰。
管理可包裝的金鑰
「可包裝金鑰」是一種加密編譯金鑰,專用於使用可信任的包裝金鑰安全匯入或匯出。建立金鑰資源時,您必須將金鑰設為可包裝。設定後即無法變更。
建立新的可包裝金鑰
如要建立新的可包裝金鑰,請使用 --hsm-trusted-wrapping 旗標:
gcloud kms keys create WRAPPABLE_KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose PURPOSE \ --protection-level HSM_SINGLE_TENANT \ --hsm-trusted-wrapping \ --crypto-key-backend "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"
更改下列內容:
WRAPPABLE_KEY_NAME:新可包裝金鑰的名稱。PURPOSE:金鑰用途,例如raw-encryption。匯入的金鑰無法使用ENCRYPT_DECRYPT金鑰用途。
匯入可包裝的金鑰
您可以透過匯入工作匯入現有的金鑰內容,以便日後匯出。如要這麼做,您必須在建立金鑰和匯入金鑰版本時,都加入 hsm-trusted-wrapping 旗標。
使用
--hsm-trusted-wrapping旗標建立金鑰資源:gcloud kms keys create WRAPPABLE_KEY_NAME \ --location LOCATION \ --keyring KEY_RING \ --purpose PURPOSE \ --protection-level HSM_SINGLE_TENANT \ --hsm-trusted-wrapping \ --skip-initial-version-creation \ --crypto-key-backend "projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME"建立匯入工作:
gcloud kms import-jobs create IMPORT_JOB_NAME \ --location LOCATION \ --keyring KEY_RING \ --import-method IMPORT_METHOD \ --protection-level HSM_SINGLE_TENANT使用
--hsm-trusted-wrapping旗標匯入金鑰版本:gcloud kms keys versions import \ --import-job IMPORT_JOB_NAME \ --location LOCATION \ --keyring KEY_RING \ --key WRAPPABLE_KEY_NAME \ --algorithm ALGORITHM \ --target-key-file UNWRAPPED_KEY_TO_IMPORT \ --hsm-trusted-wrapping更改下列內容:
KEY_ALGORITHM:您要匯入的金鑰演算法。UNWRAPPED_KEY_TO_IMPORT:原始 (未包裝) 金鑰材料的路徑。
使用可信任的金鑰匯入及匯出
設定可信任的包裝金鑰後,您就能使用該金鑰將預先包裝的金鑰內容匯入可包裝的金鑰,或匯出可包裝的金鑰。
匯入以信任金鑰預先包裝的金鑰版本
您可以使用信任的包裝金鑰副本,在地端部署匯入包裝的金鑰內容,不必使用匯入工作。
- 請確認您已使用
--hsm-trusted-wrapping旗標和--import-only選項建立目標可包裝金鑰資源。請參閱「建立新的可包裝金鑰」一節。 匯入預先包裝的金鑰版本:
gcloud kms keys versions import-trusted-key-wrapped \ --location LOCATION \ --target-keyring KEY_RING \ --target-key TARGET_KEY_NAME \ --trusted-keyring TRUSTED_KEY_RING \ --trusted-key TRUSTED_KEY_NAME \ --target-algorithm ALGORITHM \ --wrapped-key-file PATH_TO_WRAPPED_KEY更改下列內容:
TARGET_KEY_NAME:可包裝的金鑰資源名稱,用於匯入金鑰材料。TRUSTED_KEY_RING:信任包裝金鑰的金鑰環。TRUSTED_KEY_NAME:升級的受信任包裝金鑰名稱。ALGORITHM:目標金鑰的演算法。支援的值為所有 Cloud Key Management Service 演算法,但GOOGLE_SYMMETRIC_ENCRYPTION除外。PATH_TO_WRAPPED_KEY:包含以受信任包裝金鑰包裝的金鑰材料的檔案路徑。
使用信任的金鑰包裝可包裝的金鑰,然後匯出
您可以使用信任的包裝金鑰包裝現有的可包裝金鑰,並將產生的包裝金鑰內容儲存至檔案。
gcloud kms keys versions export-trusted-key-wrapped \ --location LOCATION \ --trusted-keyring TRUSTED_KEY_RING \ --trusted-key TRUSTED_KEY_NAME \ --target-keyring TARGET_KEY_RING \ --target-key TARGET_KEY_NAME \ --wrapped-key-file PATH_TO_OUTPUT_WRAPPED_KEY
更改下列內容:
TRUSTED_KEY_RING:信任包裝金鑰的金鑰環。TRUSTED_KEY_NAME:升級的受信任包裝金鑰名稱。TARGET_KEY_RING:要匯出可包裝金鑰的金鑰環。TARGET_KEY_NAME:要匯出的可包裝金鑰名稱。PATH_TO_OUTPUT_WRAPPED_KEY:儲存包裝金鑰內容的路徑。
維護執行個體
執行個體佈建完成後,您有責任維護執行個體。您可以建立維護作業提案、取得法定人數核准,然後執行核准的作業,藉此維護執行個體。一次只能有一個有效提案。如果選擇不繼續進行提案,就必須刪除有效提案或等待提案過期,才能提出其他作業。
您必須在 disableDate前重新整理執行個體。如要檢查執行個體的 disableDate,可以查看執行個體詳細資料。
查看執行個體提案
如要查看執行個體的提案,請按照下列步驟操作:
控制台
前往 Google Cloud 控制台的「KMS infrastructure」(KMS 基礎架構) 頁面。
在「單一租戶 HSM 執行個體」資訊卡上,按一下「查看」。「單一租戶 HSM 執行個體」頁面會顯示您有權查看的所有單一租戶 Cloud HSM 執行個體清單。
找到要查看提案的執行個體,然後按一下執行個體的名稱。「單一租戶 HSM 執行個體詳細資料」頁面會顯示執行個體的詳細資料,包括為執行個體建立的提案清單。
選用:如要篩選提案清單,請按一下「篩選」列 ,然後輸入篩選條件。舉例來說,您可以篩選清單,只查看待核准的提案,或只查看已順利完成的提案。
gcloud
-
使用
kms single-tenant-hsm proposal list方法查看現有提案清單。gcloud kms single-tenant-hsm proposal list INSTANCE_ID \ --location=LOCATION
更改下列內容:
INSTANCE_ID:要查看提案的單一租戶 Cloud HSM 執行個體 ID。LOCATION:要查看單一租戶 Cloud HSM 執行個體的位置。
重新整理執行個體
您可以重新整理執行個體,確保執行個體保持在最新狀態,並避免發生非預期的停機時間。這項操作需要仲裁驗證。提案獲准後,這項作業大約需要 15 到 30 分鐘才能完成。
重新整理執行個體時,disableDate 會設為自重新整理時間起算的 730 天。
-
使用
refresh_sthi作業類型建立提案,以重新整理執行個體。這個步驟需要 Cloud KMS 單一租戶 HSM 提案者角色。gcloud kms single-tenant-hsm proposal create INSTANCE_ID \ --location LOCATION \ --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \ --operation-type refresh_sthi
更改下列內容:
INSTANCE_ID:執行個體的 ID。LOCATION:您建立執行個體的位置。PROPOSAL_ID:您要用於這項提案的專屬 ID,例如refresh_instance。
-
查看提案狀態,等待狀態變為
PENDING。gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION
更改下列內容:
INSTANCE_ID:執行個體的 ID。PROPOSAL_ID提案的 ID,例如refresh_instance。LOCATION:建立執行個體的位置。
狀態為
PENDING時,即可簽署挑戰。 -
從提案中取得挑戰。
gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION \ --format="json[](quorumParameters.challenges)"
這項指令會傳回 JSON 格式的挑戰陣列。
-
針對上一步傳回的每個驗證問題,使用
basenc --base64url -d解碼驗證問題,並以私密金鑰簽署。echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
更改下列內容:
N:挑戰編號,例如第一個挑戰為1,第二個挑戰為2,依此類推。CHALLENGE_N:上一個步驟輸出內容中的挑戰編號N內容。PRIVATE_KEY_N:私密金鑰編號N的路徑,例如第一個驗證的rsaprivate1.pem。
-
上傳簽署的挑戰,核准提案。你可以透過一個或多個指令上傳檔案。這個步驟需要 Cloud KMS 單一租戶 HSM 仲裁成員角色。
gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \ --location LOCATION \ --single_tenant_hsm_instance INSTANCE_ID \ --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
將
SIGNED_QUORUM_CHALLENGE_LIST替換為以 JSON 格式編排的驗證陣列,其中每個清單項目都是元組,包含已簽署驗證的路徑和對應公開金鑰的路徑,例如[('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')],可透過一個指令提交前兩個已簽署的驗證。上傳規定數量的簽署挑戰後,提案狀態會更新為
APPROVED。 -
執行提案。 這個步驟需要 Cloud KMS 單一租戶 HSM 執行者角色,且必須在提案建立後的 24 小時內完成。
gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
作業完成後,執行個體會維持 `ACTIVE` 狀態,且
disableDate會設為從重新整理時間起算的 730 天。
新增仲裁成員
您可以將仲裁成員新增至執行個體。這項操作需要仲裁驗證。提案獲得核准後,這項作業大約需要 15 到 30 分鐘才能完成。
為新仲裁成員產生新的 RSA-2048 金鑰組。請按照貴機構的標準,在實體權杖上建立 RSA-2048 金鑰組。
請妥善保管私密金鑰,您需要這項金鑰才能核准提案。 請記下公開金鑰,您需要使用這組金鑰,將新的法定人數成員新增至單一租戶 Cloud HSM 執行個體。
-
使用
add_quorum_member作業建立提案,將法定人數成員新增至執行個體。這個步驟需要 Cloud KMS 單一租戶 HSM 提案者角色。gcloud kms single-tenant-hsm proposal create INSTANCE_ID \ --location LOCATION \ --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \ --operation-type add_quorum_member \ --two_factor_public_key_pem PATH_TO_PUBLIC_KEY
更改下列內容:
INSTANCE_ID:執行個體的 ID。LOCATION:您建立執行個體的位置。PROPOSAL_ID:您要用於這項提案的專屬 ID,例如add_quorum_member。PATH_TO_PUBLIC_KEY:新公開金鑰的路徑,例如rsapub4.pem。
-
查看提案狀態,等待狀態變為
PENDING。gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION
更改下列內容:
INSTANCE_ID:執行個體的 ID。PROPOSAL_ID提案的 ID,例如add_quorum_member。LOCATION:建立執行個體的位置。
狀態為
PENDING時,即可簽署挑戰。 -
從提案取得挑戰。 如要新增法定人數成員,必須由現有法定人數成員簽署驗證,並由新成員使用新金鑰簽署驗證。
gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION \ --format="json[](requiredActionQuorumParameters.requiredChallenges,requiredActionQuorumParameters.quorumChallenges)"
這項指令會傳回 JSON 格式的挑戰陣列。
requiredActionQuorumParameters.requiredChallenges欄位包含您要註冊新金鑰的驗證問題。requiredActionQuorumParameters.quorumChallenges欄位包含現有金鑰法定人數的挑戰。您必須簽署requiredActionQuorumParameters物件中的所有驗證問題。 -
針對上一步傳回的每個驗證問題,使用
basenc --base64url -d解碼驗證問題,並以私密金鑰簽署。echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
更改下列內容:
N:挑戰編號,例如第一個挑戰為1,第二個挑戰為2,依此類推。CHALLENGE_N:上一個步驟輸出內容中的挑戰編號N內容。PRIVATE_KEY_N:私密金鑰編號N的路徑,例如第一個驗證的rsaprivate1.pem。
-
上傳簽署的挑戰,核准提案。你可以透過一個或多個指令上傳檔案。這個步驟需要 Cloud KMS 單一租戶 HSM 仲裁成員角色。
gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \ --location LOCATION \ --single_tenant_hsm_instance INSTANCE_ID \ --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST" \ --required-challenge-replies="SIGNED_REQUIRED_CHALLENGE_LIST"
更改下列內容:
SIGNED_QUORUM_CHALLENGE_LIST:以 JSON 格式呈現的挑戰陣列,使用已註冊的私密金鑰簽署,其中每個清單項目都是元組,包含已簽署挑戰的路徑和對應公開金鑰的路徑,例如[('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')],可透過一個指令提交前兩項已簽署的挑戰。SIGNED_REQUIRED_CHALLENGE_LIST:JSON 格式的陣列,內含使用新私密金鑰簽署的驗證問題,其中唯一清單項目是元組,內含已簽署驗證問題的路徑和對應公開金鑰的路徑,例如[('signed-challenge-newkey.txt','rsapub-newkey.pem')]。
上傳規定數量的簽署挑戰後,提案狀態會更新為
APPROVED。 -
執行提案。 這個步驟需要 Cloud KMS 單一租戶 HSM 執行者角色,且必須在提案建立後的 24 小時內完成。
gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
作業完成後,新的法定人數成員就能參與挑戰,核准提案。您新增的公開金鑰現在會列在執行個體詳細資料的公開金鑰清單中。
移除仲裁成員
如果法定人數成員超過必要人數,您可以從執行個體中移除法定人數成員。這項作業需要法定人數驗證。 提案獲准後,這項作業大約需要 15 到 30 分鐘才能完成。
-
使用
remove_quorum_member作業,建立從執行個體移除仲裁成員的提案。這個步驟需要 Cloud KMS 單一租戶 HSM 提案者角色。gcloud kms single-tenant-hsm proposal create INSTANCE_ID \ --location LOCATION \ --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \ --operation-type remove_quorum_member \ --two_factor_public_key_pem PATH_TO_PUBLIC_KEY
更改下列內容:
INSTANCE_ID:執行個體的 ID。LOCATION:您建立執行個體的位置。PROPOSAL_ID:您要用於這項提案的專屬 ID,例如remove_quorum_member。PATH_TO_PUBLIC_KEY:要從執行個體中移除的公開金鑰路徑,例如rsapub3.pem。作業完成後,對應的私密金鑰就無法再用於核准提案。
-
查看提案狀態,等待狀態變為
PENDING。gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION
更改下列內容:
INSTANCE_ID:執行個體的 ID。PROPOSAL_ID提案的 ID,例如remove_quorum_member。LOCATION:建立執行個體的位置。
狀態為
PENDING時,即可簽署挑戰。 -
從提案中取得挑戰。
gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION \ --format="json[](quorumParameters.challenges)"
這項指令會傳回 JSON 格式的挑戰陣列。
-
針對上一步傳回的每個驗證問題,使用
basenc --base64url -d解碼驗證問題,並以私密金鑰簽署。echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
更改下列內容:
N:挑戰編號,例如第一個挑戰為1,第二個挑戰為2,依此類推。CHALLENGE_N:上一個步驟輸出內容中的挑戰編號N內容。PRIVATE_KEY_N:私密金鑰編號N的路徑,例如第一個驗證的rsaprivate1.pem。
-
上傳簽署的挑戰,核准提案。你可以透過一個或多個指令上傳檔案。這個步驟需要 Cloud KMS 單一租戶 HSM 仲裁成員角色。
gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \ --location LOCATION \ --single_tenant_hsm_instance INSTANCE_ID \ --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
將
SIGNED_QUORUM_CHALLENGE_LIST替換為以 JSON 格式編排的驗證陣列,其中每個清單項目都是元組,包含已簽署驗證的路徑和對應公開金鑰的路徑,例如[('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')],可透過一個指令提交前兩個已簽署的驗證。上傳規定數量的簽署挑戰後,提案狀態會更新為
APPROVED。 -
執行提案。 這個步驟需要 Cloud KMS 單一租戶 HSM 執行者角色,且必須在提案建立後的 24 小時內完成。
gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
作業完成後,遭移除的法定人數成員就無法再參與挑戰,核准提案。您移除的公開金鑰不再列於執行個體詳細資料的公開金鑰清單中。
停用執行個體
您可以停用執行個體,暫時封鎖所有金鑰的存取權。這項作業需要法定人數驗證。提案獲得核准後,作業大約需要 15 到 30 分鐘才能完成。
執行個體停用後,儲存在該執行個體中的金鑰仍會顯示為 ACTIVE,但無法使用。嘗試使用已停用執行個體中的金鑰執行加密編譯作業,會導致錯誤。
-
使用
disable_sthi作業類型建立提案,停用執行個體。這個步驟需要 Cloud KMS 單一租戶 HSM 提案者角色。gcloud kms single-tenant-hsm proposal create INSTANCE_ID \ --location LOCATION \ --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \ --operation-type disable_sthi
更改下列內容:
INSTANCE_ID:執行個體的 ID。LOCATION:您建立執行個體的位置。PROPOSAL_ID:您要用於這項提案的專屬 ID,例如disable_instance。
-
查看提案狀態,等待狀態變為
PENDING。gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION
更改下列內容:
INSTANCE_ID:執行個體的 ID。PROPOSAL_ID提案的 ID,例如disable_instance。LOCATION:建立執行個體的位置。
狀態為
PENDING時,即可簽署挑戰。 -
從提案中取得挑戰。
gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION \ --format="json[](quorumParameters.challenges)"
這項指令會傳回 JSON 格式的挑戰陣列。
-
針對上一步傳回的每個驗證問題,使用
basenc --base64url -d解碼驗證問題,並以私密金鑰簽署。echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
更改下列內容:
N:挑戰編號,例如第一個挑戰為1,第二個挑戰為2,依此類推。CHALLENGE_N:上一個步驟輸出內容中的挑戰編號N內容。PRIVATE_KEY_N:私密金鑰編號N的路徑,例如第一個驗證的rsaprivate1.pem。
-
上傳簽署的挑戰,核准提案。你可以透過一個或多個指令上傳檔案。這個步驟需要 Cloud KMS 單一租戶 HSM 仲裁成員角色。
gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \ --location LOCATION \ --single_tenant_hsm_instance INSTANCE_ID \ --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
將
SIGNED_QUORUM_CHALLENGE_LIST替換為以 JSON 格式編排的驗證陣列,其中每個清單項目都是元組,包含已簽署驗證的路徑和對應公開金鑰的路徑,例如[('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')],可透過一個指令提交前兩個已簽署的驗證。上傳規定數量的簽署挑戰後,提案狀態會更新為
APPROVED。 -
執行提案。 這個步驟需要 Cloud KMS 單一租戶 HSM 執行者角色,且必須在提案建立後的 24 小時內完成。
gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
作業完成後,執行個體會維持在
DISABLED狀態,必須重新啟用才能使用。
啟用執行個體
您可以重新啟用 DISABLED 執行個體,以還原對執行個體及其金鑰的存取權。
這項操作需要仲裁驗證。提案獲准後,這項作業大約需要 15 到 30 分鐘才能完成。
-
使用
enable_sthi作業類型建立提案,以啟用執行個體。這個步驟需要 Cloud KMS 單一租戶 HSM 提案者角色。gcloud kms single-tenant-hsm proposal create INSTANCE_ID \ --location LOCATION \ --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \ --operation-type enable_sthi
更改下列內容:
INSTANCE_ID:執行個體的 ID。LOCATION:您建立執行個體的位置。PROPOSAL_ID:您要用於這項提案的專屬 ID,例如enable_instance。
-
查看提案狀態,等待狀態變為
PENDING。gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION
更改下列內容:
INSTANCE_ID:執行個體的 ID。PROPOSAL_ID提案的 ID,例如enable_instance。LOCATION:建立執行個體的位置。
狀態為
PENDING時,即可簽署挑戰。 -
從提案中取得挑戰。
gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION \ --format="json[](quorumParameters.challenges)"
這項指令會傳回 JSON 格式的挑戰陣列。
-
針對上一步傳回的每個驗證問題,使用
basenc --base64url -d解碼驗證問題,並以私密金鑰簽署。echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
更改下列內容:
N:挑戰編號,例如第一個挑戰為1,第二個挑戰為2,依此類推。CHALLENGE_N:上一個步驟輸出內容中的挑戰編號N內容。PRIVATE_KEY_N:私密金鑰編號N的路徑,例如第一個驗證的rsaprivate1.pem。
-
上傳簽署的挑戰,核准提案。你可以透過一個或多個指令上傳檔案。這個步驟需要 Cloud KMS 單一租戶 HSM 仲裁成員角色。
gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \ --location LOCATION \ --single_tenant_hsm_instance INSTANCE_ID \ --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
將
SIGNED_QUORUM_CHALLENGE_LIST替換為以 JSON 格式編排的驗證陣列,其中每個清單項目都是元組,包含已簽署驗證的路徑和對應公開金鑰的路徑,例如[('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')],可透過一個指令提交前兩個已簽署的驗證。上傳規定數量的簽署挑戰後,提案狀態會更新為
APPROVED。 -
執行提案。 這個步驟需要 Cloud KMS 單一租戶 HSM 執行者角色,且必須在提案建立後的 24 小時內完成。
gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
作業完成後,執行個體會返回 `ACTIVE` 狀態,且
disableDate會設為從重新整理時間起算的 730 天。
刪除執行個體
您可以刪除執行個體,永久銷毀執行個體和金鑰。這項作業需要法定人數驗證。提案獲得核准後,作業大約需要 15 到 30 分鐘才能完成。
執行個體刪除後,儲存在該執行個體中的金鑰仍會顯示為 ACTIVE,但無法使用。嘗試使用已刪除執行個體中的金鑰執行加密編譯作業,會導致錯誤。
-
使用
delete_sthi作業類型建立刪除執行個體的提案。這個步驟需要 Cloud KMS 單一租戶 HSM 提案者角色。gcloud kms single-tenant-hsm proposal create INSTANCE_ID \ --location LOCATION \ --single-tenant-hsm-instance-proposal-id PROPOSAL_ID \ --operation-type delete_sthi
更改下列內容:
INSTANCE_ID:要刪除的執行個體 ID。LOCATION:您建立執行個體的位置。PROPOSAL_ID:您要用於這項提案的專屬 ID,例如delete_instance。
-
查看提案狀態,等待狀態變為
PENDING。gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION
更改下列內容:
INSTANCE_ID:執行個體的 ID。PROPOSAL_ID提案的 ID,例如delete_instance。LOCATION:建立執行個體的位置。
狀態為
PENDING時,即可簽署挑戰。 -
從提案中取得挑戰。
gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID \ --location LOCATION \ --format="json[](quorumParameters.challenges)"
這項指令會傳回 JSON 格式的挑戰陣列。
-
針對上一步傳回的每個驗證問題,使用
basenc --base64url -d解碼驗證問題,並以私密金鑰簽署。echo CHALLENGE_N | basenc --base64url -d > decoded-challenge-N.txt openssl dgst -sign PRIVATE_KEY_N -out signed-challenge-N.txt decoded-challenge-N.txt
更改下列內容:
N:挑戰編號,例如第一個挑戰為1,第二個挑戰為2,依此類推。CHALLENGE_N:上一個步驟輸出內容中的挑戰編號N內容。PRIVATE_KEY_N:私密金鑰編號N的路徑,例如第一個驗證的rsaprivate1.pem。
-
上傳簽署的挑戰,核准提案。你可以透過一個或多個指令上傳檔案。這個步驟需要 Cloud KMS 單一租戶 HSM 仲裁成員角色。
gcloud kms single-tenant-hsm proposal approve PROPOSAL_ID \ --location LOCATION \ --single_tenant_hsm_instance INSTANCE_ID \ --quorum-challenge-replies="SIGNED_QUORUM_CHALLENGE_LIST"
將
SIGNED_QUORUM_CHALLENGE_LIST替換為以 JSON 格式編排的驗證陣列,其中每個清單項目都是元組,包含已簽署驗證的路徑和對應公開金鑰的路徑,例如[('signed-challenge-1.txt','rsapub1.pem'), ('signed-challenge-2.txt','rsapub2.pem')],可透過一個指令提交前兩個已簽署的驗證。上傳規定數量的簽署挑戰後,提案狀態會更新為
APPROVED。 -
確認要繼續刪除執行個體,並加密銷毀使用這個執行個體中建立的金鑰加密的所有資料,然後執行提案。這個步驟需要 Cloud KMS 單一租戶 HSM 執行者角色,且必須在提案建立後的 24 小時內完成。
警告:下列指令無法還原。可能會永久遺失資料。Google 無法協助您復原已刪除執行個體中的金鑰。gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID \ --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
作業完成後,執行個體就會遭到刪除。
刪除提案
如果決定不核准或執行提案,可以在提案到期前刪除。刪除待處理提案後,您就無法核准該提案,但可以建立新提案。刪除已核准的提案後,您就無法執行該作業。
-
使用
proposal delete指令刪除提案。您必須具備 Cloud KMS 單一租戶 HSM 提案者角色,才能執行這項操作。gcloud kms single-tenant-hsm proposal delete PROPOSAL_ID \ --location LOCATION \ --single_tenant_hsm_instance INSTANCE_ID
更改下列內容:
INSTANCE_ID:執行個體的 ID。LOCATION:您建立執行個體的位置。PROPOSAL_ID:要刪除的提案專屬 ID,例如proposal_to_delete。
後續步驟
- 進一步瞭解單一租戶 Cloud HSM。