このトピックでは、Cloud HSM の概要と、HSM で保護された暗号鍵を Cloud Key Management Service で作成および使用する方法を説明します。
Cloud HSM とは
Cloud HSM は、FIPS 140-2 レベル 3 認定 HSM のクラスタで暗号鍵のホスティングや暗号化オペレーションを実行できるようにする、クラウドでホストされたハードウェア セキュリティ モジュール(HSM)サービスです。HSM クラスタは Google によって管理されるため、クラスタリング、スケーリング、パッチ適用などについて心配する必要はありません。Cloud HSM は Cloud KMS をフロントエンドとして使用するため、Cloud KMS によって提供されるすべての利便性と機能を活用できます。
鍵リングの作成
鍵を作成するときは、その鍵を指定された Google Cloud ロケーションの鍵リングに追加します。キーリングは新しく作成するか、既存のものを使用できます。ここでは、鍵リングを新規作成して、新しい鍵をそこに追加します。
Cloud HSM をサポートする Google Cloud ロケーションに鍵リングを作成します。
Console
Google Cloud コンソールで、[鍵の管理] ページに移動します。
[キーリングを作成] をクリックします。
[キーリング名] に、キーリングの名前を入力します。
[キーリングのロケーション] で、
"us-east1"
などのロケーションを選択します。[作成] をクリックします。
gcloud
-
In the Google Cloud console, activate Cloud Shell.
- 開発環境で、
gcloud kms keyrings create
コマンドを実行します。gcloud kms keyrings create KEY_RING \ --location LOCATION
以下を置き換えます。
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
これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?key_ring_id=KEY_RING" \ --request "POST" \ --header "authorization: Bearer TOKEN"
以下を置き換えます。
PROJECT_ID
: キーリングを含むプロジェクトの ID。KEY_RING
: 鍵を含むキーリングの名前LOCATION
: キーリングの Cloud KMS のロケーション
詳しくは、KeyRing.create
API ドキュメントをご覧ください。
鍵を作成
指定した鍵リングとロケーションに Cloud HSM 鍵を作成する手順は次のとおりです。
Console
Google Cloud コンソールで、[鍵の管理] ページに移動します。
鍵を作成するキーリングの名前をクリックします。
[鍵を作成] をクリックします。
[作成する鍵の種類] で [生成された鍵] を選択します。
[鍵名] フィールドに、鍵の名前を入力します。
[保護レベル] プルダウンをクリックし、[HSM] を選択します。
[目的] プルダウンをクリックし、[対称暗号化 / 復号化] を選択します。
[ローテーション期間] と [開始日] はデフォルト値のままにします。
[作成] をクリックします。
gcloud
コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします。
gcloud kms keys create key \ --keyring key-ring \ --location location \ --purpose "encryption" \ --protection-level "hsm"
key を新しい鍵の名前に置き換えます。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 をインストールします。
データの暗号化
鍵が作成されたので、その鍵を使用してテキストまたはバイナリのコンテンツを暗号化できます。
gcloud
コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします。
gcloud kms encrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --plaintext-file FILE_TO_ENCRYPT \ --ciphertext-file ENCRYPTED_OUTPUT
以下を置き換えます。
KEY_NAME
: 暗号化に使用する鍵の名前。KEY_RING
: 鍵を含むキーリングの名前LOCATION
: キーリングを含む Cloud KMS のロケーション。FILE_TO_ENCRYPT
: 暗号化するファイルへのパス。ENCRYPTED_OUTPUT
: 暗号化された出力を保存するパス。
すべてのフラグと有効な値については、--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
これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。
JSON と REST API を使用する場合は、Cloud KMS で暗号化する前にコンテンツを base64 でエンコードする必要があります。
データを暗号化するには、POST
リクエストを行い、適切なプロジェクトと鍵情報を指定し、リクエスト本文の plaintext
フィールドに、暗号化する base64 でエンコードされたテキストを指定します。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:encrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"plaintext\": \"PLAINTEXT_TO_ENCRYPT\"}"
以下を置き換えます。
PROJECT_ID
: 暗号化に使用するキーリングと鍵を含むプロジェクトの ID。LOCATION
: キーリングを含む Cloud KMS のロケーション。KEY_RING
: 暗号化に使用する鍵を含むキーリング。KEY_NAME
: 暗号化に使用する鍵の名前。PLAINTEXT_TO_ENCRYPT
: 暗号化する平文データ。encrypt
メソッドを呼び出す前に、平文を base64 でエンコードする必要があります。
base64 でエンコードされたデータを含むペイロードの例を次に示します。
{ "plaintext": "U3VwZXIgc2VjcmV0IHRleHQgdGhhdCBtdXN0IGJlIGVuY3J5cHRlZAo=", }
暗号テキストの復号
暗号化されたコンテンツを復号するには、コンテンツの暗号化に使用したものと同じ鍵を使用する必要があります。
gcloud
コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします。
gcloud kms decrypt \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION \ --ciphertext-file FILE_TO_DECRYPT \ --plaintext-file DECRYPTED_OUTPUT
以下を置き換えます。
KEY_NAME
: 復号に使用する鍵の名前。KEY_RING
: 鍵を含むキーリングの名前LOCATION
: キーリングを含む Cloud KMS のロケーション。FILE_TO_DECRYPT
: 復号するファイルへのパス。DECRYPTED_OUTPUT
: 復号された出力を保存するパス。
すべてのフラグと有効な値については、--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
これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。
Cloud KMS から JSON で返される復号されたテキストは、base64 でエンコードされています。
暗号化されたデータを復号するには、POST
リクエストを行い、適切なプロジェクトと鍵情報を指定し、リクエスト本文の ciphertext
フィールドに、復号する暗号化されたテキスト(暗号テキストとも呼ばれます)を指定します。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \ --request "POST" \ --header "authorization: Bearer TOKEN" \ --header "content-type: application/json" \ --data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
以下を置き換えます。
PROJECT_ID
: 復号に使用するキーリングと鍵を含むプロジェクトの ID。LOCATION
: キーリングを含む Cloud KMS のロケーション。KEY_RING
: 復号に使用する鍵を含むキーリング。KEY_NAME
: 復号に使用する鍵の名前。ENCRYPTED_DATA
: 復号する暗号化されたデータ。
base64 でエンコードされたデータを含むペイロードの例を次に示します。
{ "ciphertext": "CiQAhMwwBo61cHas7dDgifrUFs5zNzBJ2uZtVFq4ZPEl6fUVT4kSmQ...", }
次のステップ
このトピックの暗号化の例では、保護レベルが HSM の対称鍵を使用しました。保護レベルが HSM の非対称鍵を使用して暗号化するには、以下の点を変更して非対称鍵によるデータの暗号化と復号の手順を行ってください。
- Cloud HSM がサポートされているリージョンのいずれかに鍵リングを作成する。
- 保護レベル HSM で鍵を作成する。
保護レベルが HSM の非対称鍵を楕円曲線署名や RSA 署名に使用するには、以下の点を変更して署名の作成と検証の手順を行います。
- Cloud HSM がサポートされているリージョンのいずれかに鍵リングを作成する。
- 保護レベル HSM で鍵を作成する。
API の使用を始めます。
Cloud KMS API リファレンスを参照する。
入門ガイドを読み、鍵の作成、ローテーション、権限の設定を行う。
コンセプトを読み、オブジェクト階層、鍵の状態、鍵のローテーションについての理解を深めます。
Cloud KMS のロギングについて説明します。ロギングはオペレーションに基づいており、HSM とソフトウェア保護レベルの両方の鍵に適用されます。
Cloud HSM でデータを保護する方法については、Cloud HSM アーキテクチャのホワイトペーパーをご覧ください。
既知の制限事項
追加認証データを含む、ユーザー指定の平文と暗号テキストのメッセージ サイズは、8 KiB(これに対し Cloud KMS ソフトウェア鍵は 64 KiB)に制限されています。
Cloud HSM は、特定のマルチリージョンまたはデュアルリージョンでは使用できません。詳しくは、Cloud HSM がサポートされているリージョンをご覧ください。
他の Google Cloud サービスで Cloud HSM 鍵を顧客管理の暗号鍵(CMEK)と統合して使用する場合、サービスに使用するロケーションは Cloud HSM 鍵のロケーションと完全に一致する必要があります。これは、リージョン、デュアル リージョン、マルチリージョン ロケーションに適用されます。
CMEK 統合の詳細については、保存時の暗号化の関連セクションをご覧ください。
現在、Cloud HSM に保管されている非対称鍵のオペレーションでは、Cloud KMS ソフトウェア鍵を使用する場合と比較して、レイテンシが大幅に増加する可能性があります。
Bare Metal Rack HSM
Google Cloud は、単一テナンシーなどの追加の HSM オプションを提供しています。ベアメタル ラック HSM を使用すると、Google 提供スペースで独自の HSM をホストできます。詳細については、アカウント担当者までお問い合わせください。