1. 概要
Cloud KMS は、クラウドでホストされる鍵管理サービスです。オンプレミスと同じ方法でクラウド サービスの暗号鍵を管理できます。ハードウェア格納型鍵用の Cloud HSM など、さまざまな鍵のタイプとソースを使用した暗号化、復号、署名、検証のサポートが含まれています。このチュートリアルでは、非対称 Cloud KMS 鍵を使用してデータを暗号化および復号する方法について説明します。
学習内容
- Cloud KMS API を有効にする方法
- KeyRing の作成方法
- 非対称暗号化/復号用の暗号鍵を作成する方法
2. 設定と要件
セルフペース型の環境設定
- Cloud Console にログインし、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します(Gmail アカウントまたは G Suite アカウントをお持ちでない場合は、アカウントを作成する必要があります)。
プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID
と呼びます。
- 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。
このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは $300 の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
この Codelab では、Google Cloud 上で動作する無料の仮想環境である Cloud Shell を使用します。GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。
プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。
この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 5 GB 用意されており、Google Cloud で稼働します。ネットワークのパフォーマンスと認証が大幅に向上しています。特に指示がない限り、このシェルからすべてのコマンドを実行します。
3. Cloud KMS サービスを有効にする
Cloud KMS を使用するには、まずプロジェクトでサービスを有効にする必要があります。この操作はプロジェクトごとに 1 回だけ行います。Cloud KMS サービスを有効にするには、次のコマンドを実行します。
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
有効になるまでに 1 分ほどかかる場合があります。コマンドが終了すると、成功が報告されます。
4. KMS 鍵を作成
Cloud KMS キーリングを作成します。Cloud KMS のキーリングは、暗号鍵の論理的な集合体です。KeyRing には、鍵の場所など、鍵に関するメタデータが含まれます。global
リージョンに my-keyring
という名前の KeyRing を作成します。
$ gcloud kms keyrings create "my-keyring" \ --location "global"
次に、先ほど作成したキーリング内に、目的が asymmetric-encryption
の my-asymmetric-encryption-key
という名前の暗号鍵を作成します。
$ gcloud kms keys create "my-asymmetric-encryption-key" \ --location "global" \ --keyring "my-keyring" \ --purpose "asymmetric-encryption" \ --default-algorithm "rsa-decrypt-oaep-4096-sha512"
5. データの暗号化
非対称鍵の場合、Cloud KMS は暗号化を実行しません。代わりに公開鍵にアクセスできるので、その公開鍵を使用して公開鍵暗号でデータを暗号化します。非対称鍵を使用すると、暗号化は完全にオフラインで実行でき、Cloud KMS や他の Google Cloud APIs にアクセスする必要がありません。暗号化には、openssl
などの暗号ツールを使用するか、公開鍵暗号をサポートするプログラミング言語やライブラリを使用します。
Cloud KMS から公開鍵をダウンロードします。
$ gcloud kms keys versions get-public-key "1" \ --location "global" \ --keyring "my-keyring" \ --key "my-asymmetric-encryption-key" \ --output-file ./key.pub
暗号化するデータを含むファイルを作成し、openssl
コマンドライン ツールを使用してファイル内のデータを暗号化します。
$ echo "my-contents" > ./data.txt
$ openssl pkeyutl -encrypt -pubin \ -in ./data.txt \ -inkey ./key.pub \ -pkeyopt "rsa_padding_mode:oaep" \ -pkeyopt "rsa_oaep_md:sha512" \ -pkeyopt "rsa_mgf1_md:sha512" > ./data.txt.enc
暗号化されたデータ(「暗号テキスト」とも呼ばれます)は、ディスク上の data.txt.enc
に保存されます。data.txt.enc
ファイルを開くと、奇妙で印刷できない文字が含まれていることがわかります。これは、生成されるデータがバイナリ形式であるためです。
暗号テキストをデータベースに保存する場合や、HTTP リクエストの一部として送信する場合は、データのエンコードが必要になることがあります。暗号テキストの最も一般的なエンコード メカニズムは base64 です。
Cloud KMS は、提供された平文を保存しません。平文の値を取得するには暗号テキストが必要になるため、暗号テキストを安全な場所に保存する必要があります。
6. データの復号
暗号化とは異なり、非対称 Cloud KMS 鍵で暗号化されたデータを復号するには、Cloud KMS サービスへのオンライン アクセスが必要です。gcloud
コマンドライン ツールを使用して、ファイル内の暗号テキストを復号します。
$ gcloud kms asymmetric-decrypt \ --location "global" \ --keyring "my-keyring" \ --key "my-asymmetric-encryption-key" \ --version "1" \ --plaintext-file - \ --ciphertext-file ./data.txt.enc
gcloud
コマンドライン ツールは、ファイルから暗号テキストを読み取り、Cloud KMS を使用して復号します。この例では、--plaintext-file
引数を -
として指定しています。これにより、結果をターミナルに出力するように gcloud
に指示します。
コンソールには my-contents
が出力されます。これは、上記のファイルと同じ平文値です。
7. 完了
これで、Cloud KMS API を有効にし、非対称暗号鍵を作成し、データを暗号化および復号できました。Cloud KMS は強力なプロダクトであり、暗号化/復号はそのほんの一部にすぎません。
クリーンアップ
確認を終えた場合は、プロジェクトを削除することをおすすめします。
- Cloud Platform コンソールに移動します。
- シャットダウンするプロジェクトを選択し、[削除] をクリックします。これにより、プロジェクトの削除がスケジュールされます。
詳細
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。