Cloud KMS への鍵のインポート

このトピックでは、暗号鍵を Cloud HSM または Cloud Key Management Service にインポートする方法について説明します。

制限や制約を含めて、鍵のインポートについて詳しくは、鍵のインポートをご覧ください。

このトピックの手順(始める前にの手順は含まない)は 5〜10 分で完了できます。手動でキーをラッピングすると、タスクが複雑になります。

始める前に

この機能をテストするために新しいプロジェクトを作成し、テスト後のクリーンアップを容易にするとともに、鍵をインポートするのに十分な IAM 権限があることを確認することをおすすめします。

鍵をインポートするには、プロジェクト、ローカル システム、鍵自体の準備が必要です。

プロジェクトの準備

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    [プロジェクトの選択] ページに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. 必要な API を有効にします。

    API を有効にする

  5. Cloud SDK をインストールして初期化します。
  6. キーリング、鍵、インポート ジョブを作成するには、インポートを実行するユーザーに次の IAM 権限が必要です。ユーザーがプロジェクト オーナーでない場合は、次の 2 つの事前定義された役割を両方ともユーザーに割り当てることができます。

    • roles/editor
    • roles/cloudkms.importer

    Cloud KMS で使用できる IAM ロールと権限の詳細については、権限とロールをご覧ください。

ローカル システムの準備

次のオプションから 1 つを選択して、ローカル システムを準備します。ほとんどのユーザーには、自動鍵ラッピングが推奨されます。

  • Google Cloud に送信する前に gcloud コマンドライン ツールで鍵を自動的にラッピングする場合は、お使いのローカル システムに Pyca 暗号ライブラリをインストールする必要があります。Pyca ライブラリは、Google Cloud に鍵を送信する前に、鍵のラッピングと保護を行うインポート ジョブで使用されます。
  • キーを手動でラッピングする場合鍵の手動ラッピング用に OpenSSL を構成する必要があります。

鍵の準備

鍵のアルゴリズムと長さがサポートされていることを確認します。鍵に使用できるアルゴリズムは、鍵が対称暗号化、非対称暗号化、非対称署名のどちらに使用されるか、鍵がソフトウェア、HSM のどちらに格納されるかによって異なります。鍵のアルゴリズムはインポート リクエストの一部として指定します。

また、鍵のエンコード方法を確認し、必要に応じて調整を行う必要があります。

鍵バージョンの作成後またはインポート後に、以下を変更することはできません。

  • 鍵の保護レベルは、鍵がソフトウェア、HSM、外部の鍵管理システムのうちどれに保持されるかどうかを示します。鍵マテリアルをこれらのストレージ環境間で移動することはできません。鍵の各バージョンの保護レベルはすべて同じです。

  • 鍵の目的は、鍵のバージョンが対称暗号化、非対称暗号化、非対称署名のうちどれに使用されるかを示します。鍵の目的によって、その鍵のバージョンの作成に使用できるアルゴリズムが制限されます。鍵の各バージョンの目的はすべて同じです。

インポートする鍵がないが、鍵のインポート手順を検証する場合は、次のコマンドを使用して、ローカル システムに対称鍵を作成できます。

openssl rand 32 > ${HOME}/test.bin

この鍵はテストでのみ使用してください。この方法で作成した鍵は、本番環境での使用には適していない可能性があります。

鍵を手動でラッピングする必要がある場合は、このトピックの手順を続行する前にラッピングしてください。

ターゲットキーとキーリングを作成する

Cloud KMS 鍵は、0 個以上の鍵バージョンを含むコンテナ オブジェクトです。各鍵バージョンには暗号鍵が含まれています。

鍵を Cloud KMS または Cloud HSM にインポートすると、インポートされた鍵は既存の Cloud KMS または Cloud HSM 鍵の新しい鍵バージョンになります。以降、このトピックではこの鍵をターゲットキーと呼びます。鍵マテリアルをインポートする前に、ターゲットキーが存在している必要があります。

鍵バージョンをインポートしても、その鍵の既存のバージョンには影響しません。ですが、鍵のインポートをテストする場合は、空の鍵を作成することをおすすめします。空の鍵にはバージョンがなく、アクティブではなく、使用できません。

鍵は鍵リング上に存在します。このトピックでは、この鍵リングをターゲット キーリングと呼びます。ターゲット キーリングのロケーションによって、鍵マテリアルをインポート後に使用できるロケーションが決まります。一部のロケーションでは Cloud HSM 鍵を作成またはインポートできません。作成した鍵は、別の鍵リングまたはロケーションに移動できません。

次の手順に従い、gcloud コマンドライン ツールまたは Google Cloud Console を使用して新しい鍵リングに空の鍵を作成します。

ウェブ UI

  1. Cloud Console で [暗号鍵] ページに移動します。

    [暗号鍵] ページに移動

  2. [キーリングを作成] をクリックします。

  3. [キーリング名] フィールドに、キーリングの名前を入力します。

  4. [場所] プルダウンからロケーションを選択します。

  5. [作成] をクリックします。キーリングの詳細ページが開きます。

  6. [鍵を作成] をクリックします。

  7. [インポートされた鍵] を選択します。これにより、初期鍵バージョンが作成されなくなります。

  8. [鍵名] フィールドに、鍵の名前を入力します。

  9. [保護レベル] を [ソフトウェア] または [HSM] に設定します。

  10. (省略可)インポートした鍵の場合、自動ローテーションはデフォルトで無効になっています。 自動ローテーションを有効にすると、新しい鍵バージョンが Cloud KMS で生成され、インポートした鍵バージョンはローテーション後のデフォルトの鍵バージョンではなくなります。

  11. (省略可)[鍵にラベルを追加][4] する場合は、[ラベル] フィールドで [ラベルを追加] をクリックします。

  12. [作成] をクリックします。

コマンドライン

コマンドラインで Cloud KMS を使用するには、まず Cloud SDK の最新バージョンをインストールまたはアップグレードします

  1. ターゲット キーリングを作成します。Cloud HSM 鍵にインポートする場合は、Cloud HSM のサポートがあるロケーションを選択します。

    gcloud kms keyrings create key-ring-name \
      --location location
    

    詳しくは、キーリングを作成をご覧ください。

  2. ターゲットキーを作成します。

    • 鍵の目的を設定します。
      • 対称鍵の場合は、目的を encryption に設定します。
      • 非対称鍵の場合は、目的を asymmetric-signing または asymmetric-encryption に設定します。
    • 初期バージョンが作成されないようにするには、--skip-initial-version-creation フラグを使用します。
    • (省略可)ローテーション ポリシーは指定しません自動ローテーションを有効にすると、新しい鍵バージョンが Cloud KMS で生成され、インポートした鍵バージョンはローテーション後のデフォルトの鍵バージョンではなくなります。
    gcloud kms keys create key-name \
      --location location \
      --keyring key-ring-name \
      --purpose purpose \
      --skip-initial-version-creation
    

    Cloud KMS 鍵または Cloud HSM 鍵の作成方法の詳細をご覧ください。

Python

このコードを実行するには、まず Python 開発環境を設定し、Cloud KMS Python SDK をインストールします。

def create_key_for_import(project_id, location_id, key_ring_id, crypto_key_id):
    """

    Sets up an empty CryptoKey within a KeyRing for import.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        crypto_key_id (string): ID of the key to import (e.g. 'my-asymmetric-signing-key').
    """

    # Import the client library.
    from google.cloud import kms

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Build the key. For more information regarding allowed values of these fields, see:
    # https://googleapis.dev/python/cloudkms/latest/_modules/google/cloud/kms_v1/types/resources.html
    purpose = kms.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_SIGN
    algorithm = kms.CryptoKeyVersion.CryptoKeyVersionAlgorithm.EC_SIGN_P256_SHA256
    protection_level = kms.ProtectionLevel.HSM
    key = {
        'purpose': purpose,
        'version_template': {
            'algorithm': algorithm,
            'protection_level': protection_level
        }
    }

    # Build the parent key ring name.
    key_ring_name = client.key_ring_path(project_id, location_id, key_ring_id)

    # Call the API.
    created_key = client.create_crypto_key(request={'parent': key_ring_name, 'crypto_key_id': crypto_key_id, 'crypto_key': key})
    print('Created hsm key: {}'.format(created_key.name))

API

これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。

curl "https://cloudkms.googleapis.com/v1/projects/project-id/locations/location-id/keyRings?keyRingId=key-ring-name" \
    --request "POST" \
    --header "authorization: Bearer token" \
    --header "content-type: application/json" \
    --header "x-goog-user-project: project-id" \
    --data "{}"

詳しくは、KeyRing.create API ドキュメントをご覧ください。

curl "https://cloudkms.googleapis.com/v1/projects/project-id/locations/location-id/keyRings/key-ring-name/cryptoKeys?cryptoKeyId=key-name&skipInitialVersionCreation=true" \
    --request "POST" \
    --header "authorization: Bearer token" \
    --header "content-type: application/json" \
    --header "x-goog-user-project: project-id" \
    --data "{"purpose":"purpose", "versionTemplate":{"protectionLevel":"protection-level","algorithm":"algorithm"}}"

詳しくは、CryptoKey.create API ドキュメントをご覧ください。

鍵リングと鍵は存在しますが、この鍵には鍵マテリアルが含まれず、バージョンがなく、アクティブではありません。次に、インポート ジョブを作成します。

インポート ジョブを作成する

インポート ジョブは、インポートした鍵の特性を定義します。これには、鍵のインポート後に変更できないプロパティも含まれます。

保護レベルは、このインポート ジョブから生成された鍵がソフトウェア、HSM、外部の鍵管理システムのうちのどれにあるかを定義します。鍵をインポートした後、保護レベルを変更することはできません。

インポート メソッドは、ローカル システムからターゲットの Google Cloud プロジェクトへの転送中にインポートされた鍵を保護するラッピング鍵の作成に使用されるアルゴリズムを定義します。3,072 ビットまたは 4,096 ビットの RSA 鍵を選択できます。特別の要件がない限り、3072 ビットのラッピング鍵を使用することをおすすめします。

インポート ジョブを作成するには、gcloud ツール、Cloud Console、Cloud Key Management Service API のいずれかを使用します。

ウェブ UI

  1. Cloud Console で [暗号鍵] ページに移動します。

    [暗号鍵] ページに移動

  2. ターゲット キーリングの名前をクリックします。

  3. [保護レベル] を [ソフトウェア] または [HSM] に設定します。ターゲットキーに設定したものと同じ保護レベルを使用します。

  4. [インポート ジョブを作成] をクリックします。

  5. [名前] フィールドに、インポート ジョブの名前を入力します。

  6. [インポートの方法] プルダウンで、インポートの方法を 3,072 ビット RSA または 4,096 ビット RSA に設定します。

  7. [作成] をクリックします。

コマンドライン

コマンドラインで Cloud KMS を使用するには、まず Cloud SDK の最新バージョンをインストールまたはアップグレードします

次のようなコマンドを使用して、インポート ジョブを作成します。

gcloud kms import-jobs create import-job \
  --location location \
  --keyring key-ring-name \
  --import-method import-method \
  --protection-level protection-level
  • ターゲットキーと同じ鍵リングとロケーションを使用します。
  • 保護レベルを software または hsm に設定します。
  • インポート メソッドを rsa-oaep-3072-sha1-aes-256 または rsa-oaep-4096-sha1-aes-256 に設定します。

Python

このコードを実行するには、まず Python 開発環境を設定し、Cloud KMS Python SDK をインストールします。

def create_import_job(project_id, location_id, key_ring_id, import_job_id):
    """
    Create a new import job in Cloud KMS.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        import_job_id (string): ID of the import job (e.g. 'my-import-job').
    """

    # Import the client library.
    from google.cloud import kms

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Retrieve the fully-qualified key_ring string.
    key_ring_name = client.key_ring_path(project_id, location_id, key_ring_id)

    # Set paramaters for the import job, allowed values for ImportMethod and ProtectionLevel found here:
    # https://googleapis.dev/python/cloudkms/latest/_modules/google/cloud/kms_v1/types/resources.html

    import_method = kms.ImportJob.ImportMethod.RSA_OAEP_3072_SHA1_AES_256
    protection_level = kms.ProtectionLevel.HSM
    import_job_params = {"import_method": import_method, "protection_level": protection_level}

    # Call the client to create a new import job.
    import_job = client.create_import_job({"parent": key_ring_name, "import_job_id": import_job_id, "import_job": import_job_params})

    print('Created import job: {}'.format(import_job.name))

API

これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。

  1. ImportJob タイプのインスタンスを作成し、ImportJob.protectionLevel および ImportJob.importMethod フィールドの値を指定します。

  2. リクエスト本文に ImportJob のインスタンスを使用して、ImportJob.create メソッドを呼び出します。

インポート ジョブの状態を確認する

インポート ジョブの初期状態は PENDING_GENERATION です。状態が ACTIVE の場合、それを使用して鍵をインポートできます。

インポート ジョブは 3 日後に期限切れになります。インポート ジョブが期限切れになった場合は、新しいジョブを作成する必要があります。

インポート ジョブの状態は、gcloud コマンドライン ツール、Google Cloud Console、Cloud Key Management Service API のいずれかを使用して確認できます。

ウェブ UI

  1. Cloud Console で [暗号鍵] ページに移動します。

    [暗号鍵] ページに移動

  2. インポート ジョブが含まれる鍵リングの名前をクリックします。

  3. ページの上部にある [インポート ジョブ] タブをクリックします。

  4. 状態は、インポート ジョブの名前の横にある [ステータス] に表示されます。

コマンドライン

コマンドラインで Cloud KMS を使用するには、まず Cloud SDK の最新バージョンをインストールまたはアップグレードします

インポート ジョブがアクティブな場合は、それを使用して鍵をインポートできます。これには数分かかることがあります。このコマンドを使用して、インポート ジョブがアクティブであることを確認します。インポート ジョブを作成したロケーションとキーリングを使用します。

gcloud kms import-jobs describe import-job \
  --location location \
  --keyring key-ring-name \
  --format="value(state)"
state: ACTIVE

Python

このコードを実行するには、まず Python 開発環境を設定し、Cloud KMS Python SDK をインストールします。

def check_state_import_job(project_id, location_id, key_ring_id, import_job_id):
    """
    Check the state of an import job in Cloud KMS.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        import_job_id (string): ID of the import job (e.g. 'my-import-job').
    """

    # Import the client library.
    from google.cloud import kms

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Retrieve the fully-qualified import_job string.
    import_job_name = client.import_job_path(
        project_id, location_id, key_ring_id, import_job_id)

    # Retrieve the state from an existing import job.
    import_job = client.get_import_job(name=import_job_name)

    print('Current state of import job {}: {}'.format(import_job.name, import_job.state))

API

これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。

ImportJob.get メソッドを呼び出して、state フィールドを確認します。statePENDING_GENERATION の場合、インポート ジョブは作成中です。このフィールドが ACTIVE になるまで定期的に状態を確認します。

インポート ジョブがアクティブになるとすぐに、鍵をインポートするリクエストをすることができます。

インポート ジョブの変更を防止する

インポート ジョブによって、鍵のアルゴリズム、インポートした鍵が HSM キーかソフトウェア鍵かなど、インポートされた鍵の多くの特性が決まります。Identity and Access Management の権限を設定して、ユーザーがインポート ジョブを作成できないようにして、鍵をインポートするインポート ジョブを使用できるようにすることが可能です。

  1. 鍵の管理者にのみ importjobs.create を付与します。
  2. 特定のインポート ジョブの importjobs.useToImport 権限を、そのジョブを使用して鍵をインポートするオペレーターに付与します。
  3. インポート ジョブを作成するときに、インポートする鍵の保護レベルとアルゴリズムを指定します。

インポート ジョブが期限切れになるまで、importjobs.useToImport 権限を持ち、特定のインポート ジョブの importjobs.create 権限を持たないユーザーは、鍵はインポートできますが、インポート ジョブの特性を変更できません。

キーをインポート

インポート ジョブの状態を確認したら、インポート リクエストを行うことができます。

gcloud コマンドライン ツールで鍵を自動的にラップするか、すでに鍵を手動でラップしたかに応じて、異なるフラグを使用してインポート リクエストを作成します。

鍵を手動でラップしたか、自動でラップしたかに関係なく、インポートする実際の鍵の長さに一致するサポートされているアルゴリズムにアルゴリズムを設定し、鍵の目的を指定する必要があります。

  • 目的が ENCRYPT_DECRYPT の鍵は google-symmetric-encryption アルゴリズムを使用し、長さは 32 です。

  • 目的が ASYMMETRIC_ENCRYPT または ASYMMETRIC_SIGN の鍵では、さまざまなアルゴリズムと長さがサポートされます。

    鍵の作成後に鍵の目的を変更することはできませんが、後続の鍵バージョンは、最初の鍵バージョンとは異なる長さで作成できます。

鍵の自動ラッピングとインポート

自動ラッピングを使用する場合は、gcloud コマンドライン ツールを使用する必要があります。次のようなコマンドを使用します。--target-key-file を、ラッピングしてインポートするラッピングされていない鍵のロケーションに設定します。-rsa-aes-wrapped-key-file を設定しないでください。

公開鍵がすでにダウンロードされているロケーションに --public-key-file フラグを設定することもできます。多数の鍵をインポートする場合、このフラグによってインポートするごとに公開鍵がダウンロードされるのを防ぎます。たとえば、鍵をインポートする際に公開鍵を 1 度ダウンロードすると、そのロケーションを提供するスクリプトを作成できます。

gcloud kms keys versions import \
  --import-job import-job \
  --location location \
  --keyring key-ring-name \
  --key key-name \
  --algorithm algorithm-name \
  --target-key-file path-to-unwrapped-key-to-import

鍵は、インポート ジョブに関連付けられたラッピング鍵でラッピングされ、Google Cloud に送信され、ターゲットキーの新しい鍵バージョンとしてインポートされます。

手動でラッピングした鍵のインポート

手動でラッピングした鍵をインポートするには、このセクションの手順を使用します。--rsa-aes-wrapped-key-file を手動でラッピングした鍵のロケーションに設定します。 --target-key-file を設定しないでください。

公開鍵がすでにダウンロードされているロケーションに --public-key-file フラグを設定することもできます。多数の鍵をインポートする場合、このフラグによってインポートするごとに公開鍵がダウンロードされるのを防ぎます。たとえば、鍵をインポートする際に公開鍵を 1 度ダウンロードすると、そのロケーションを提供するスクリプトを作成できます。

ウェブ UI

  1. Cloud Console で [暗号鍵] ページを開きます。

  2. インポート ジョブが含まれる鍵リングの名前をクリックします。ターゲットキーが鍵リング上の他の鍵とともに表示されます。

  3. ターゲットキーの名前をクリックし、[鍵バージョンをインポート] をクリックします。

  4. [インポート ジョブを選択] プルダウンからインポート ジョブを選択します。

  5. [ラッピングされた鍵をアップロード] セレクタで、すでにラッピングされている鍵を選択します。

  6. 非対称鍵をインポートする場合は、[アルゴリズム] プルダウンからアルゴリズムを選択します。[鍵バージョンをインポート] ページは次のようになります。

    鍵のバージョンのインポート

  7. [インポート] をクリックします。

コマンドライン

コマンドラインで Cloud KMS を使用するには、まず Cloud SDK の最新バージョンをインストールまたはアップグレードします

次のようなコマンドを使用します。

gcloud kms keys versions import \
  --import-job import-job \
  --location location \
  --keyring key-ring-name \
  --key key-name \
  --algorithm algorithm-name \
  --rsa-aes-wrapped-key-file path-to-wrapped-key-to-import

詳細については、gcloud kms keys versions import --help コマンドの出力をご覧ください。

Python

このコードを実行するには、まず Python 開発環境を設定し、Cloud KMS Python SDK をインストールします。

def import_manually_wrapped_key(project_id, location_id, key_ring_id, crypto_key_id, import_job_id):
    """
    Generates and imports local key material to Cloud KMS.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        crypto_key_id (string): ID of the key to import (e.g. 'my-asymmetric-signing-key').
        import_job_id (string): ID of the import job (e.g. 'my-import-job').
    """

    # Import the client library and Python standard cryptographic libraries.
    import os
    from cryptography.hazmat import backends
    from cryptography.hazmat.primitives import hashes, keywrap, serialization
    from cryptography.hazmat.primitives.asymmetric import ec, padding
    from google.cloud import kms

    # Generate some key material in Python and format it in PKCS #8 DER as
    # required by Google Cloud KMS.
    key = ec.generate_private_key(ec.SECP256R1, backends.default_backend())
    formatted_key = key.private_bytes(
        serialization.Encoding.DER,
        serialization.PrivateFormat.PKCS8,
        serialization.NoEncryption())

    print('Generated key bytes: {}'.format(formatted_key))

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Retrieve the fully-qualified crypto_key and import_job string.
    crypto_key_name = client.crypto_key_path(
        project_id, location_id, key_ring_id, crypto_key_id)
    import_job_name = client.import_job_path(
        project_id, location_id, key_ring_id, import_job_id)

    # Generate a temporary 32-byte key for AES-KWP and wrap the key material.
    kwp_key = os.urandom(32)
    wrapped_target_key = keywrap.aes_key_wrap_with_padding(
        kwp_key, formatted_key, backends.default_backend())

    # Retrieve the public key from the import job.
    import_job = client.get_import_job(name=import_job_name)
    import_job_pub = serialization.load_pem_public_key(
        bytes(import_job.public_key.pem, 'UTF-8'), backends.default_backend())

    # Wrap the KWP key using the import job key.
    wrapped_kwp_key = import_job_pub.encrypt(
        kwp_key,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA1()),
            algorithm=hashes.SHA1(),
            label=None))

    # Import the wrapped key material.
    client.import_crypto_key_version({
        "parent": crypto_key_name,
        "import_job": import_job_name,
        "algorithm": kms.CryptoKeyVersion.CryptoKeyVersionAlgorithm.EC_SIGN_P256_SHA256,
        "rsa_aes_wrapped_key": wrapped_kwp_key + wrapped_target_key,
    })

    print('Imported: {}'.format(import_job.name))

API

これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。

  1. cryptoKeyVersions.import メソッドのリクエスト本文で、インポートされる鍵のアルゴリズムを algorithm フィールドに設定します。 この値は、このバージョンをインポートした CryptoKeyversionTemplate に一致している必要はありません。algorithm フィールドの型は CryptoKeyVersionAlgorithm です。

  2. また、リクエストの本文では、wrappedKeyMaterial フィールドを、すでにラッピングした鍵マテリアルに設定します。

  3. cryptoKeyVersions.import メソッドを呼び出します。cryptoKeyVersions.import レスポンスの型は CryptoKeyVersion です。鍵が正常にインポートされると、状態は ENABLED となり、Cloud KMS で使用できます。

鍵のインポート リクエストが開始されます。このステータスはモニタリングできます。

インポートした鍵の状態を確認する

インポートした鍵の初期状態は PENDING_IMPORT です。状態が ENABLED の場合、鍵は正常にインポートされています。インポートが失敗した場合、状態は IMPORT_FAILED です。

インポート リクエストの状態は、gcloud コマンドライン ツール、Google Cloud Console、Cloud Key Management Service API のいずれかを使用して確認できます。

ウェブ UI

  1. Cloud Console で [暗号鍵] ページを開きます。

  2. インポート ジョブが含まれる鍵リングの名前をクリックします。

  3. ページの上部にある [インポート ジョブ] タブをクリックします。

  4. 状態は、インポート ジョブの名前の横にある [ステータス] に表示されます。

コマンドライン

コマンドラインで Cloud KMS を使用するには、まず Cloud SDK の最新バージョンをインストールまたはアップグレードします

versions list コマンドを使用して状態を確認します。このトピックの前半で作成したのと同じロケーション、ターゲット キーリング、ターゲットキーを使用します。

gcloud kms keys versions list \
  --keyring keyring \
  --location location \
  --key key-name

Python

このコードを実行するには、まず Python 開発環境を設定し、Cloud KMS Python SDK をインストールします。

def check_state_imported_key(project_id, location_id, key_ring_id, import_job_id):
    """
    Check the state of an import job in Cloud KMS.

    Args:
        project_id (string): Google Cloud project ID (e.g. 'my-project').
        location_id (string): Cloud KMS location (e.g. 'us-east1').
        key_ring_id (string): ID of the Cloud KMS key ring (e.g. 'my-key-ring').
        import_job_id (string): ID of the import job (e.g. 'my-import-job').
    """

    # Import the client library.
    from google.cloud import kms

    # Create the client.
    client = kms.KeyManagementServiceClient()

    # Retrieve the fully-qualified import_job string.
    import_job_name = client.import_job_path(
        project_id, location_id, key_ring_id, import_job_id)

    # Retrieve the state from an existing import job.
    import_job = client.get_import_job(name=import_job_name)

    print('Current state of import job {}: {}'.format(import_job.name, import_job.state))

API

これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。

ImportJob.get メソッドを呼び出して、state フィールドを確認します。statePENDING_GENERATION の場合、インポート ジョブは作成中です。このフィールドが ACTIVE になるまで定期的に状態を確認します。

鍵がインポートされると、ステータスが [有効] に変わります。対称鍵を使用する場合は、インポートした鍵のバージョンをメイン バージョンに設定する必要があります。

対称鍵: メイン バージョンを設定する

このステップは、対称鍵をインポートする場合に必要であり、非対称鍵の場合は関係ありません。非対称鍵にはメイン バージョンはありません。メイン バージョンを設定するには、gcloud コマンドライン ツールを使用する必要があります。

gcloud kms keys set-primary-version key-name --version=version-number

次のステップ