このトピックでは、Cloud Key Management Service 対称鍵を使用してデータを再暗号化する方法を説明します。これらの例は、非対称鍵に適応できます。鍵の不正使用が疑われる場合は、その鍵で保護されているデータを再暗号化し、以前の鍵バージョンを無効にするか、破棄をスケジュールする必要があります。
始める前に
このシナリオでは、次の条件が必要です。
Cloud KMS を使用してデータを暗号化済みであること。
暗号化に使用された鍵バージョンは無効になっておらず、破棄がスケジュールされてもおらず、破棄もされていないこと。この鍵バージョンを使用して、暗号化されたデータを復号します。
鍵をローテーションしていること。鍵のローテーションにより、新しいメインの鍵バージョンが作成されます。新しいメインの鍵バージョンを使用して、データを再暗号化します。
非対称鍵を使用したデータの再暗号化
このトピックの例では、対称鍵を使用してデータを再暗号化する方法を示します。対称鍵を使用する場合、Cloud KMS は復号に使用する鍵バージョンを自動的に推測します。非対称鍵を使用する場合は、鍵バージョンを指定する必要があります。
- Google Cloud CLI の使用手順に従う場合は、必ず
--version
フラグを含めてください。 - API の使用手順に従う場合は、
CryptoKeys
ではなくCryptoKeyVersions
を使用します。非対称鍵によるデータの暗号化と復号の詳細をご覧ください。
非対称鍵を使用してデータを再暗号化するためのワークフローは、このトピックで説明しているものと類似しています。
データ ワークフローの再暗号化
次の手順を使用して、データを再暗号化し、元の暗号化に使用された鍵バージョンを無効にするか、破棄をスケジュールします。
以前の鍵バージョンを使用してデータを復号する
Cloud KMS では、鍵バージョンが無効になっておらず、破棄がスケジュールされてもおらず、破棄もされていない限り、自動的に適切な鍵バージョンを使用してデータを復号します。次の例は、データを復号する方法を示しています。これは、暗号化と復号で使用される復号コードと同じです。
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...", }
新しいメインの鍵バージョンを使用してデータを再暗号化する
Cloud KMS は、自動的に新しいメインの鍵バージョンを使用してデータを暗号化します。次の例は、データを暗号化する方法を示しています。これは、暗号化と復号で使用される暗号化コードと同じです。
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=", }
以前の鍵バージョンを無効にする、または破棄をスケジュールする
疑わしいインシデントに対処するために鍵をローテーションした場合は、データを再暗号化した後で以前の鍵バージョンを無効にするか破棄をスケジュール設定します。
有効な鍵バージョンを無効にする
有効になっている鍵バージョンのみ無効にできます。これには UpdateCryptoKeyVersion
メソッドを使用します。
Console
Google Cloud コンソールで、[鍵の管理] ページに移動します。
無効にする鍵バージョンの鍵が含まれる鍵リング名をクリックします。
無効にする鍵バージョンの鍵をクリックします。
無効にする鍵バージョンの横にあるチェック ボックスをオンにします。
ヘッダーの [無効にする] をクリックします。
確認プロンプトで、[無効にする] をクリックします。
gcloud
コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします。
gcloud kms keys versions disable key-version \ --key key \ --keyring key-ring \ --location location
key-version は、無効にする鍵のバージョンに置き換えます。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 をインストールします。
鍵バージョンの破棄をスケジュールする
有効または無効になっている鍵バージョンのみ破棄のスケジュールを設定できます。これには DestroyCryptoKeyVersion
メソッドを使用します。
Console
Google Cloud コンソールで [鍵管理] ページに移動します。
破棄をスケジュールする鍵バージョンの横にあるチェックボックスをオンにします。
ヘッダーの [破棄] をクリックします。
確認プロンプトで、鍵名を入力して [破棄をスケジュール] をクリックします。
gcloud
コマンドラインで Cloud KMS を使用するには、まず Google Cloud CLI の最新バージョンをインストールまたはアップグレードします。
gcloud kms keys versions destroy KEY_VERSION \ --key KEY_NAME \ --keyring KEY_RING \ --location LOCATION
以下を置き換えます。
KEY_VERSION
: 破棄する鍵バージョンのバージョン番号。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
これらの例では、HTTP クライアントとして curl を使用して API の使用例を示しています。アクセス制御の詳細については、Cloud KMS API へのアクセスをご覧ください。
鍵バージョンを破棄するには、CryptoKeyVersions.destroy メソッドを呼び出します。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION:destroy" \ --request "POST" \ --header "authorization: Bearer TOKEN"