単一テナント Cloud HSM インスタンスを作成して管理する

このガイドでは、Google Cloud CLI を使用してシングルテナント Cloud HSM インスタンスを作成、プロビジョニング、管理する方法について説明します。インスタンスを作成してプロビジョニングしたら、 Google Cloud コンソール、Cloud Key Management Service API、gcloud CLI、クライアント ライブラリを使用して、インスタンスで鍵を作成して使用できます。

インスタンスの作成と管理には、クォーラム認証が必要です。インスタンスを作成するときに、インスタンス オペレーションを実行するために必要なクォーラム メンバーの承認数を定義します。クォーラム メンバーは、インスタンスの管理制御を維持するために、常にこの数以上の制御キーを使用できる必要があります。

始める前に

  1. インスタンスを作成して維持する場合は、Single-tenant Cloud HSM のベスト プラクティスを確認して適用します。
  2. 最初に開始するクォーラム メンバーの数を決定します。追加のクォーラム メンバーは、既存のクォーラム メンバーの承認を得て、後で追加できます。クォーラム メンバーの最小数は 3 です。
  3. 提案を承認するために必要なクォーラム メンバーの数を決定します。インスタンスの作成後にこの数値を変更することはできません。クォーラム メンバーは、インスタンスを維持するために、常にこの数の制御鍵にアクセスできる必要があります。最小クォーラム サイズは 2 です。必要なクォーラム サイズは、クォーラム メンバーの数よりも小さくする必要があります。
  4. インスタンスが時間どおりに更新されるようにする方法を決定します。インスタンスの disableDate をモニタリングし、不要なダウンタイムを回避するために、期限のにインスタンス更新オペレーションを提案、承認、実行する必要があります。
  5. シングルテナント Cloud HSM インスタンスの作成、管理、使用に必要な権限を取得するには、プロジェクトまたは親リソースに対する次の IAM ロールの付与を管理者に依頼してください。

    • 提案を作成する: Cloud KMS 単一テナント HSM Proposer(cloudkms.hsmSingleTenantProposer
    • 提案を承認する: Cloud KMS 単一テナント HSM Quorum Member(cloudkms.hsmSingleTenantQuorumMember
    • 提案を実行する: Cloud KMS 単一テナント HSM Executor(cloudkms.hsmSingleTenantExecutor
    • 鍵を作成する: Cloud KMS 単一テナント HSM 鍵作成者 roles/cloudkms.hsmSingleTenantKeyCreator

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  6. クォーラム メンバーごとに、2 要素認証(2FA)用の RSA-2048 鍵ペアを 1 つ生成します。制御キーには物理トークンを使用することをおすすめします。物理トークンで RSA-2048 鍵ペアを作成する際の組織の標準に沿って対応します。

    このガイドでは、デモ用に OpenSSL を使用して、ソフトウェアでバックアップされた 3 つの 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 インスタンスの作成に必要になるため、手元に保管しておきます。

  7. 単一テナント Cloud HSM をサポートする Cloud KMS のロケーションを選択します。互換性のあるロケーションを確認するには、Cloud KMS のロケーションページのロケーションのリストをご覧ください。[HSM サポート] フィルタで、[シングル テナント HSM をサポート] を選択します。

インスタンスを作成してプロビジョニングする

単一テナント Cloud HSM インスタンスを作成してプロビジョニングするには、gcloud CLI を使用してインスタンス リソースを作成し、認証鍵を登録する提案を作成してから、提案を承認して実行します。

インスタンスを作成する

この手順は、Cloud KMS 単一テナント HSM Proposer ロールを持つインスタンス管理者が完了する必要があります。

  1. デフォルト プロジェクトを設定します。

    gcloud config set project PROJECT_ID
    

    PROJECT_ID は、プロジェクトの ID に置き換えます。

  2. Single-tenant 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 です。追加のキーは、後でクォーラム承認によって追加できます。制御キーを紛失した後に復元するには、必要なクォーラム サイズよりも 1 つ以上多くのクォーラム メンバーが必要です。
    • INSTANCE_ID: インスタンスに使用する識別子(例: example-sthsm-instance)。--single-tenant-hsm-instance-id フラグを省略すると、Cloud HSM によって UUID が割り当てられます。
  3. インスタンスのステータスを確認します。

    gcloud kms single-tenant-hsm describe INSTANCE_ID \
        --location=LOCATION
    

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの識別子。
    • LOCATION: インスタンスを作成したロケーション。

    状態が PENDING_TWO_FACTOR_AUTH_REGISTRATION の場合は、インスタンスをプロビジョニングできます。通常、この状態になるまでに 5 ~ 30 分かかります。

インスタンスをプロビジョニングする

  1. register_2fa_keys オペレーションを使用して、2 要素認証鍵を登録する提案を作成します。この手順には、Cloud KMS 単一テナント HSM Proposer ロールが必要です。ほとんどの提案とは異なり、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: このプロポーザルに使用する一意の識別子(例: set-up-2fa)。
    • LOCATION: インスタンスを作成したロケーション。
    • MEMBERS_REQUIRED_FOR_APPROVAL: オペレーションを実行する前に提案を承認する必要があるクォーラム メンバーの数。最小値は 2 です。この値は、インスタンスのプロビジョニング後に変更できません。クォーラム メンバーは、インスタンスの管理権限を保持するために、常に少なくともこの数の制御鍵にアクセスできる必要があります。
    • PUBLIC_KEY_LIST: すべての制御キーの公開鍵部分へのパスのカンマ区切りリスト(例: rsapub1.pem,rsapub2.pem,rsapub3.pem)。このリストの公開鍵の数は、以前に使用した QUORUM_MEMBER_COUNT の値と一致する必要があります。
  2. 提案のステータスを表示し、状態が PENDING になるまで待ちます。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの識別子。
    • PROPOSAL_ID: プロポーザルの識別子(例: set-up-2fa)。
    • LOCATION: インスタンスを作成したロケーション。

    ステータスが PENDING の場合、チャレンジに署名できます。

  3. 提案からチャレンジを取得します。新しい単一テナント Cloud HSM インスタンスをプロビジョニングするには、クォーラムのすべてのメンバーからの署名付きチャレンジが必要です。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    このコマンドは、JSON 形式のチャレンジの配列を返します。

  4. 各鍵について、`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 番目のチャレンジの場合は 2 など)。
    • CHALLENGE_N: 前のステップの出力のチャレンジ番号 N の内容。
    • PRIVATE_KEY_N: 秘密鍵番号 N のパス(例: 最初のチャレンジの場合は rsaprivate1.pem)。
  5. 署名済みのチャレンジをアップロードして、提案を承認します。1 つのコマンドでアップロードすることも、複数のコマンドでアップロードすることもできます。この手順には、Cloud KMS 単一テナント HSM Quorum Member ロールが必要です。

      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')] を使用して、1 つのコマンドで最初の 2 つの署名付きチャレンジを送信します。

    必要な数の署名付きチャレンジをアップロードすると、提案の状態が APPROVED に更新されます。

  6. 提案が承認されたら、execute コマンドを使用して register_2fa_keys オペレーションを完了します。この手順には Cloud KMS 単一テナント HSM Executor ロールが必要です。提案の作成後 24 時間以内に完了する必要があります。

    gcloud kms single-tenant-hsm proposal execute PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION

    これは、ユーザーをプロビジョニングしてバックアップを作成する長時間実行オペレーションです。インスタンスは 20 ~ 30 分後に ACTIVE になります。

  7. インスタンスが ACTIVE されたら、インスタンスの詳細を表示して disableDate を確認します。

    gcloud kms single-tenant-hsm describe INSTANCE_ID \
        --location=LOCATION
    

    インスタンスの disableDate をメモします。この時間までに refresh_sthi オペレーションを完了しないと、インスタンスが無効になります。

インスタンスを表示

次のいずれかのロールを持つユーザーは、単一テナント Cloud HSM インスタンスとその状態のリストを表示できます。

  • Cloud KMS 単一テナント HSM Proposer
  • Cloud KMS 単一テナント HSM Quorum Member
  • Cloud KMS 単一テナント HSM Executor
  • Cloud KMS 閲覧者
  • Cloud KMS 管理者

インスタンスの状態を定期的に確認してください。インスタンスをアクティブな状態に保つには、定期的に更新する必要があります。

アクティブ状態のインスタンスを使用できます。単一テナント Cloud HSM インスタンスで鍵を作成またはインポートする必要があるデベロッパーは、インスタンスのリソース識別子が必要です。リソース識別子の形式は次のとおりです。

projects/INSTANCE_PROJECT/locations/LOCATION/singleTenantHsmInstances/INSTANCE_NAME

組織内のインスタンスを表示してリソース識別子を確認する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、[KMS インフラストラクチャ] ページに移動します。

    KMS インフラストラクチャに移動

  2. [単一テナント HSM インスタンス] カードで、[表示] をクリックします。[単一テナント HSM インスタンス] ページには、閲覧権限のあるすべての単一テナント Cloud HSM インスタンスのリストが表示されます。

  3. インスタンスの詳細を表示するには、インスタンスの名前をクリックします。[単一テナント HSM インスタンスの詳細] ページには、選択したインスタンスの詳細(インスタンスの完全なリソース識別子や、インスタンス用に作成された提案のリストなど)が表示されます。

  4. 省略可: クォーラム メンバーの現在の 2 要素認証(2FA)鍵に関連付けられている公開鍵を表示またはダウンロードするには、[公開鍵を取得] をクリックします。公開鍵と非公開の 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 の間は、鍵を作成して使用できます。アクティブな Single-tenant Cloud HSM インスタンスと同じロケーションにあるキーリングに、Single-tenant 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 のみです。

キーの移植性を使用するには、次の手順を完了する必要があります。

  1. 信頼できるラッピング鍵を設定します
  2. ラップ可能な鍵を作成またはインポートします
  3. 信頼できるラッピング鍵を使用して、事前にラッピングされた鍵マテリアルをインポートするか、ラッピング可能な鍵をエクスポートします。

信頼できるラッピング鍵を設定する

信頼できるラッピング鍵は、RFC 5649 で定義されているように、エクスポートまたはインポートのために他の鍵をラップおよびラップ解除するために使用される AES 鍵です。単一テナント Cloud HSM インスタンスに信頼できるラッピング鍵を設定するには、AES_WRAPPING の目的でインポート専用鍵として鍵をインポートし、信頼できる鍵に昇格させる必要があります。

キー プロモーションには、単一のクォーラム メンバーの承認が必要です。

  1. 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: 信頼できるラッピング鍵の識別子。
    • LOCATION: キーリングとシングルテナント Cloud HSM インスタンスが配置されているリージョン。
    • KEY_RING: 鍵を作成するキーリング。
    • INSTANCE_PROJECT: シングルテナント Cloud HSM インスタンスを含むプロジェクトの識別子。
    • INSTANCE_NAME: シングルテナント Cloud HSM インスタンスの識別子。
  2. 鍵マテリアルをインポートするインポート ジョブを作成します。

        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: インポート ジョブの識別子。
    • IMPORT_METHOD: ラッピング鍵マテリアルのインポート方法(例: rsa-oaep-4096-sha256-aes-256)。
  3. 生の 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 は、信頼できるラッピングキーの未加工のバイトを含むファイルのパスに置き換えます。

  4. ラッピング鍵を信頼できるものにプロモートするプロポーザルを作成します。オペレーション タイプは 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: このプロポーザルの一意の識別子。
    • PATH_TO_PUBLIC_KEY: プロポーザルを開始して署名するクォーラム メンバーの公開鍵のパス。
  5. 提案のステータスを表示し、PENDING に変わるまで待ちます。

        gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
            --single_tenant_hsm_instance INSTANCE_NAME \
            --location LOCATION
        

    ステータスが PENDING の場合、チャレンジに署名できます。

  6. 提案からチャレンジを取得します。

        gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
            --single_tenant_hsm_instance INSTANCE_NAME \
            --location LOCATION \
            --format="json[](requiredActionQuorumParameters.requiredChallenges)"
        

    このコマンドは、チャレンジを含む JSON 形式の配列を返します。

  7. 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: 提案を作成したクォーラム メンバーの秘密鍵のパス。
  8. 署名付きのチャレンジをアップロードして、提案を承認します。この手順には、Cloud KMS 単一テナント HSM Quorum Member ロールが必要です。

        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 に更新されます。

  9. 提案が承認されたら、提案を実行してプロモーションを完了します。

        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 フラグを指定する必要があります。

  1. --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"
    
  2. インポート ジョブを作成します。

    gcloud kms import-jobs create IMPORT_JOB_NAME \
        --location LOCATION \
        --keyring KEY_RING \
        --import-method IMPORT_METHOD \
        --protection-level HSM_SINGLE_TENANT
    
  3. --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: 未加工(ラップ解除された)鍵マテリアルのパス。

インポートとエクスポートに信頼できる鍵を使用する

信頼できるラッピング鍵を設定すると、それを使用して、事前にラッピングされた鍵マテリアルをラッピング可能な鍵にインポートしたり、ラッピング可能な鍵をエクスポートしたりできます。

信頼できる鍵で事前にラップされた鍵バージョンをインポートする

インポート ジョブを使用せずに、信頼できるラッピング鍵のコピーを使用してオンプレミスでラップされた鍵マテリアルをインポートできます。

  1. --hsm-trusted-wrapping フラグと --import-only オプションを使用して、ラップ可能なターゲット鍵リソースを作成していることを確認します。新しいラップ可能な鍵を作成するをご覧ください。
  2. 事前にラッピングされた鍵バージョンをインポートします。

    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: ターゲット キーのアルゴリズム。サポートされている値は、GOOGLE_SYMMETRIC_ENCRYPTION を除くすべての Cloud Key Management Service アルゴリズムです。
    • 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: ラップされた鍵マテリアルが保存されるパス。

インスタンスを維持する

インスタンスがプロビジョニングされたら、インスタンスのメンテナンスはお客様の責任となります。インスタンスを維持するには、メンテナンス オペレーションの提案を作成し、定足数の承認を取得してから、承認されたオペレーションを実行します。一度に有効にできる提案は 1 つだけです。提案を進めない場合は、有効な提案を削除するか、提案の有効期限が切れるまで待つまで、別のオペレーションを提案することはできません。

disableDate の前にインスタンスを更新する必要があります。インスタンスの disableDate を確認する必要がある場合は、インスタンスの詳細を表示できます。

インスタンスの提案を表示する

インスタンスの提案を表示する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、[KMS インフラストラクチャ] ページに移動します。

    KMS インフラストラクチャに移動

  2. [単一テナント HSM インスタンス] カードで、[表示] をクリックします。[単一テナント HSM インスタンス] ページには、閲覧権限のあるすべての単一テナント Cloud HSM インスタンスのリストが表示されます。

  3. 提案を表示するインスタンスを見つけて、インスタンスの名前をクリックします。[単一テナント HSM インスタンスの詳細] ページに、インスタンスの詳細(インスタンス用に作成された提案のリストなど)が表示されます。

  4. 省略可: 提案のリストをフィルタするには、 [フィルタ] バーをクリックしてフィルタ条件を入力します。たとえば、承認待ちのプロポーザルのみ、または正常に完了したプロポーザルのみを表示するようにリストをフィルタできます。

gcloud

  • kms single-tenant-hsm proposal list メソッドを使用して、既存の提案のリストを表示します。

    gcloud kms single-tenant-hsm proposal list INSTANCE_ID \
        --location=LOCATION

    次のように置き換えます。

    • INSTANCE_ID: 提案を表示するシングルテナント Cloud HSM インスタンスの識別子。
    • LOCATION: シングルテナント Cloud HSM インスタンスを表示するロケーション。

インスタンスを更新する

インスタンスを更新して最新の状態に保つことで、計画外のダウンタイムを回避できます。このオペレーションにはクォーラム認証が必要です。提案が承認されると、オペレーションが完了するまでに約 15 ~ 30 分かかります。

インスタンスを更新すると、disableDate は更新時から 730 日に設定されます。

  1. refresh_sthi オペレーション タイプを使用して、インスタンスを更新する提案を作成します。この手順には、Cloud KMS 単一テナント HSM Proposer ロールが必要です。

        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: インスタンスの識別子。
    • LOCATION: インスタンスを作成したロケーション。
    • PROPOSAL_ID: このプロポーザルに使用する一意の識別子(例: refresh_instance)。
  2. 提案のステータスを表示し、状態が PENDING になるまで待ちます。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの識別子。
    • PROPOSAL_ID: プロポーザルの識別子(例: refresh_instance)。
    • LOCATION: インスタンスを作成したロケーション。

    ステータスが PENDING の場合、チャレンジに署名できます。

  3. 提案からチャレンジを取得します。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    このコマンドは、JSON 形式のチャレンジの配列を返します。

  4. 前の手順で返されたチャレンジごとに、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 番目のチャレンジの場合は 2 など)。
    • CHALLENGE_N: 前のステップの出力のチャレンジ番号 N の内容。
    • PRIVATE_KEY_N: 秘密鍵番号 N のパス(例: 最初のチャレンジの場合は rsaprivate1.pem)。
  5. 署名済みのチャレンジをアップロードして、提案を承認します。1 つのコマンドでアップロードすることも、複数のコマンドでアップロードすることもできます。この手順には、Cloud KMS 単一テナント HSM Quorum Member ロールが必要です。

      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')] を使用して、1 つのコマンドで最初の 2 つの署名付きチャレンジを送信します。

    必要な数の署名付きチャレンジをアップロードすると、提案の状態が APPROVED に更新されます。

  6. 提案を実行します。この手順には Cloud KMS 単一テナント HSM Executor ロールが必要です。提案の作成後 24 時間以内に完了する必要があります。

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    オペレーションが完了すると、インスタンスは `ACTIVE` 状態のままになり、disableDate は更新時から 730 日後に設定されます。

クォーラム メンバーを追加する

インスタンスにクォーラム メンバーを追加できます。このオペレーションにはクォーラム認証が必要です。提案が承認されると、オペレーションが完了するまでに約 15 ~ 30 分かかります。

  1. 新しいクォーラム メンバーの新しい RSA-2048 鍵ペアを生成します。物理トークンで RSA-2048 鍵ペアを作成する際は、組織の標準に沿って対応してください。

    秘密鍵は安全に保管してください。提案を承認する際に必要になります。公開鍵は、新しいクォーラム メンバーをシングルテナント Cloud HSM インスタンスに追加するために必要になるため、手元に保管しておきます。

  2. add_quorum_member オペレーションを使用して、インスタンスにクォーラム メンバーを追加する提案を作成します。この手順には、Cloud KMS 単一テナント HSM Proposer ロールが必要です。

        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: インスタンスの識別子。
    • LOCATION: インスタンスを作成したロケーション。
    • PROPOSAL_ID: このプロポーザルに使用する一意の識別子(例: add_quorum_member)。
    • PATH_TO_PUBLIC_KEY: 新しい公開鍵のパス(例: rsapub4.pem)。
  3. 提案のステータスを表示し、状態が PENDING になるまで待ちます。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの識別子。
    • PROPOSAL_ID: プロポーザルの識別子(例: add_quorum_member)。
    • LOCATION: インスタンスを作成したロケーション。

    ステータスが PENDING の場合、チャレンジに署名できます。

  4. 提案からチャレンジを取得します。新しいクォーラム メンバーを追加するには、既存のメンバーのクォーラムからの署名付きチャレンジと、新しい鍵を使用した新しいメンバーからの署名付きチャレンジが必要です。

      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 オブジェクト内のすべてのチャレンジに署名する必要があります。

  5. 前の手順で返されたチャレンジごとに、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 番目のチャレンジの場合は 2 など)。
    • CHALLENGE_N: 前のステップの出力のチャレンジ番号 N の内容。
    • PRIVATE_KEY_N: 秘密鍵番号 N のパス(例: 最初のチャレンジの場合は rsaprivate1.pem)。
  6. 署名済みのチャレンジをアップロードして、提案を承認します。1 つのコマンドでアップロードすることも、複数のコマンドでアップロードすることもできます。この手順には、Cloud KMS 単一テナント HSM Quorum Member ロールが必要です。

      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')] は、1 つのコマンドで最初の 2 つの署名済みチャレンジを送信します。
    • SIGNED_REQUIRED_CHALLENGE_LIST: 新しい秘密鍵を使用して署名されたチャレンジを含む JSON 形式の配列。リスト項目は、署名されたチャレンジへのパスと対応する公開鍵へのパスを含むタプルです(例: [('signed-challenge-newkey.txt','rsapub-newkey.pem')])。

    必要な数の署名付きチャレンジをアップロードすると、提案の状態が APPROVED に更新されます。

  7. 提案を実行します。この手順には Cloud KMS 単一テナント HSM Executor ロールが必要です。提案の作成後 24 時間以内に完了する必要があります。

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    オペレーションが完了すると、新しいクォーラム メンバーはチャレンジに参加して提案を承認できます。追加した公開鍵が、インスタンスの詳細の公開鍵のリストに含まれるようになりました。

クォーラム メンバーを削除する

必要なクォーラム サイズよりも多くのクォーラム メンバーがある場合は、インスタンスからクォーラム メンバーを削除できます。このオペレーションにはクォーラム認証が必要です。提案が承認されると、オペレーションが完了するまでに約 15 ~ 30 分かかります。

  1. remove_quorum_member オペレーションを使用して、クォーラム メンバーをインスタンスから削除する提案を作成します。この手順には、Cloud KMS 単一テナント HSM Proposer ロールが必要です。

        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: インスタンスの識別子。
    • LOCATION: インスタンスを作成したロケーション。
    • PROPOSAL_ID: このプロポーザルに使用する一意の識別子(例: remove_quorum_member)。
    • PATH_TO_PUBLIC_KEY: インスタンスから削除する公開鍵のパス(例: rsapub3.pem)。オペレーションが完了すると、対応する秘密鍵を使用して提案を承認できなくなります。
  2. 提案のステータスを表示し、状態が PENDING になるまで待ちます。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの識別子。
    • PROPOSAL_ID: プロポーザルの識別子(例: remove_quorum_member)。
    • LOCATION: インスタンスを作成したロケーション。

    ステータスが PENDING の場合、チャレンジに署名できます。

  3. 提案からチャレンジを取得します。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    このコマンドは、JSON 形式のチャレンジの配列を返します。

  4. 前の手順で返されたチャレンジごとに、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 番目のチャレンジの場合は 2 など)。
    • CHALLENGE_N: 前のステップの出力のチャレンジ番号 N の内容。
    • PRIVATE_KEY_N: 秘密鍵番号 N のパス(例: 最初のチャレンジの場合は rsaprivate1.pem)。
  5. 署名済みのチャレンジをアップロードして、提案を承認します。1 つのコマンドでアップロードすることも、複数のコマンドでアップロードすることもできます。この手順には、Cloud KMS 単一テナント HSM Quorum Member ロールが必要です。

      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')] を使用して、1 つのコマンドで最初の 2 つの署名付きチャレンジを送信します。

    必要な数の署名付きチャレンジをアップロードすると、提案の状態が APPROVED に更新されます。

  6. 提案を実行します。この手順には Cloud KMS 単一テナント HSM Executor ロールが必要です。提案の作成後 24 時間以内に完了する必要があります。

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    オペレーションが完了すると、削除されたクォーラム メンバーは、提案を承認するためのチャレンジに参加できなくなります。削除した公開鍵は、インスタンスの詳細の公開鍵のリストに含まれなくなります。

インスタンスを無効にする

インスタンスを無効にして、そのすべての鍵へのアクセスを一時的にブロックできます。このオペレーションにはクォーラム認証が必要です。提案が承認されると、オペレーションの完了に約 15 ~ 30 分かかります。

インスタンスが無効になっている間、そのインスタンスに保存されている鍵は引き続き ACTIVE として表示されますが、使用できません。無効なインスタンスの鍵を使用して暗号オペレーションを実行しようとすると、エラーが発生します。

  1. disable_sthi オペレーション タイプを使用して、インスタンスを無効にする提案を作成します。この手順には、Cloud KMS 単一テナント HSM Proposer ロールが必要です。

        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: インスタンスの識別子。
    • LOCATION: インスタンスを作成したロケーション。
    • PROPOSAL_ID: このプロポーザルに使用する一意の識別子(例: disable_instance)。
  2. 提案のステータスを表示し、状態が PENDING になるまで待ちます。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの識別子。
    • PROPOSAL_ID: プロポーザルの識別子(例: disable_instance)。
    • LOCATION: インスタンスを作成したロケーション。

    ステータスが PENDING の場合、チャレンジに署名できます。

  3. 提案からチャレンジを取得します。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    このコマンドは、JSON 形式のチャレンジの配列を返します。

  4. 前の手順で返されたチャレンジごとに、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 番目のチャレンジの場合は 2 など)。
    • CHALLENGE_N: 前のステップの出力のチャレンジ番号 N の内容。
    • PRIVATE_KEY_N: 秘密鍵番号 N のパス(例: 最初のチャレンジの場合は rsaprivate1.pem)。
  5. 署名済みのチャレンジをアップロードして、提案を承認します。1 つのコマンドでアップロードすることも、複数のコマンドでアップロードすることもできます。この手順には、Cloud KMS 単一テナント HSM Quorum Member ロールが必要です。

      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')] を使用して、1 つのコマンドで最初の 2 つの署名付きチャレンジを送信します。

    必要な数の署名付きチャレンジをアップロードすると、提案の状態が APPROVED に更新されます。

  6. 提案を実行します。この手順には Cloud KMS 単一テナント HSM Executor ロールが必要です。提案の作成後 24 時間以内に完了する必要があります。

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    オペレーションが完了すると、インスタンスは DISABLED 状態のままになり、再度有効にするまで使用できません。

インスタンスを有効にする

DISABLED インスタンスを再度有効にして、インスタンスとその鍵へのアクセス権を復元できます。このオペレーションにはクォーラム認証が必要です。提案が承認されると、オペレーションが完了するまでに約 15 ~ 30 分かかります。

  1. enable_sthi オペレーション タイプを使用してインスタンスを有効にする提案を作成します。この手順には、Cloud KMS 単一テナント HSM Proposer ロールが必要です。

        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: インスタンスの識別子。
    • LOCATION: インスタンスを作成したロケーション。
    • PROPOSAL_ID: このプロポーザルに使用する一意の識別子(例: enable_instance)。
  2. 提案のステータスを表示し、状態が PENDING になるまで待ちます。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの識別子。
    • PROPOSAL_ID: プロポーザルの識別子(例: enable_instance)。
    • LOCATION: インスタンスを作成したロケーション。

    ステータスが PENDING の場合、チャレンジに署名できます。

  3. 提案からチャレンジを取得します。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    このコマンドは、JSON 形式のチャレンジの配列を返します。

  4. 前の手順で返されたチャレンジごとに、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 番目のチャレンジの場合は 2 など)。
    • CHALLENGE_N: 前のステップの出力のチャレンジ番号 N の内容。
    • PRIVATE_KEY_N: 秘密鍵番号 N のパス(例: 最初のチャレンジの場合は rsaprivate1.pem)。
  5. 署名済みのチャレンジをアップロードして、提案を承認します。1 つのコマンドでアップロードすることも、複数のコマンドでアップロードすることもできます。この手順には、Cloud KMS 単一テナント HSM Quorum Member ロールが必要です。

      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')] を使用して、1 つのコマンドで最初の 2 つの署名付きチャレンジを送信します。

    必要な数の署名付きチャレンジをアップロードすると、提案の状態が APPROVED に更新されます。

  6. 提案を実行します。この手順には Cloud KMS 単一テナント HSM Executor ロールが必要です。提案の作成後 24 時間以内に完了する必要があります。

        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    オペレーションが完了すると、インスタンスは `ACTIVE` 状態に戻り、disableDate は更新時から 730 日後に設定されます。

インスタンスの削除

インスタンスを削除すると、インスタンスとその鍵が完全に破棄されます。このオペレーションにはクォーラム認証が必要です。提案が承認されると、オペレーションの完了に約 15 ~ 30 分かかります。

インスタンスを削除すると、そのインスタンスに保存されている鍵は引き続き ACTIVE として表示されますが、使用できません。削除されたインスタンスの鍵を使用して暗号オペレーションを実行しようとすると、エラーが発生します。

  1. delete_sthi オペレーション タイプを使用して、インスタンスを削除する提案を作成します。この手順には、Cloud KMS 単一テナント HSM Proposer ロールが必要です。

        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: 削除するインスタンスの識別子。
    • LOCATION: インスタンスを作成したロケーション。
    • PROPOSAL_ID: このプロポーザルに使用する一意の識別子(例: delete_instance)。
  2. 提案のステータスを表示し、状態が PENDING になるまで待ちます。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION
      

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの識別子。
    • PROPOSAL_ID: プロポーザルの識別子(例: delete_instance)。
    • LOCATION: インスタンスを作成したロケーション。

    ステータスが PENDING の場合、チャレンジに署名できます。

  3. 提案からチャレンジを取得します。

      gcloud kms single-tenant-hsm proposal describe PROPOSAL_ID \
          --single_tenant_hsm_instance INSTANCE_ID \
          --location LOCATION \
          --format="json[](quorumParameters.challenges)"
      

    このコマンドは、JSON 形式のチャレンジの配列を返します。

  4. 前の手順で返されたチャレンジごとに、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 番目のチャレンジの場合は 2 など)。
    • CHALLENGE_N: 前のステップの出力のチャレンジ番号 N の内容。
    • PRIVATE_KEY_N: 秘密鍵番号 N のパス(例: 最初のチャレンジの場合は rsaprivate1.pem)。
  5. 署名済みのチャレンジをアップロードして、提案を承認します。1 つのコマンドでアップロードすることも、複数のコマンドでアップロードすることもできます。この手順には、Cloud KMS 単一テナント HSM Quorum Member ロールが必要です。

      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')] を使用して、1 つのコマンドで最初の 2 つの署名付きチャレンジを送信します。

    必要な数の署名付きチャレンジをアップロードすると、提案の状態が APPROVED に更新されます。

  6. インスタンスを削除し、このインスタンスで作成された鍵を使用して暗号化されたすべてのデータを暗号シュレディングしてから、提案を実行することを確認します。この手順には Cloud KMS 単一テナント HSM Executor ロールが必要です。提案の作成後 24 時間以内に完了する必要があります。

    警告: 次のコマンドは元に戻せません。データが完全に失われる可能性があります。削除されたインスタンスの鍵を復元することはできません。
        gcloud kms single-tenant-hsm proposal execute  PROPOSAL_ID \
        --single_tenant_hsm_instance INSTANCE_ID --location LOCATION
        

    オペレーションが完了すると、インスタンスが削除されます。

プロポーザルを削除する

提案を承認または実行しない場合は、提案の有効期限が切れる前に削除できます。保留中の提案を削除すると、その提案を承認できなくなり、新しい提案を作成できるようになります。承認済みの提案を削除すると、オペレーションを実行できなくなります。

  • proposal delete コマンドを使用してプロポーザルを削除します。これには、Cloud KMS 単一テナント HSM Proposer ロールが必要です。

        gcloud kms single-tenant-hsm proposal delete PROPOSAL_ID \
            --location LOCATION \
            --single_tenant_hsm_instance INSTANCE_ID
        

    次のように置き換えます。

    • INSTANCE_ID: インスタンスの識別子。
    • LOCATION: インスタンスを作成したロケーション。
    • PROPOSAL_ID: 削除するプロポーザルの一意の識別子(例: proposal_to_delete)。

次のステップ