Cloud KMS でデータを暗号化、復号する

1. 概要

Cloud KMS は、クラウドでホストされる鍵管理サービスです。オンプレミスと同じ方法でクラウド サービスの暗号鍵を管理できます。ハードウェア格納型鍵用の Cloud HSM など、さまざまな鍵のタイプとソースを使用した暗号化、復号、署名、検証のサポートが含まれています。このチュートリアルでは、Cloud KMS 対称鍵を使用してデータの暗号化と復号を行う方法について説明します。

学習内容

  • Cloud KMS API を有効にする方法
  • Cloud KMS キーリングの作成方法
  • 対称暗号化/復号用の Cloud KMS 暗号鍵を作成する方法
  • 対称 Cloud KMS 暗号鍵のローテーション方法

2. 設定と要件

セルフペース型の環境設定

  1. Cloud Console にログインし、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します(Gmail アカウントまたは G Suite アカウントをお持ちでない場合は、アカウントを作成する必要があります)。

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは $300 の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

この Codelab では、Google Cloud 上で動作する無料の仮想環境である Cloud Shell を使用します。GCP Console で右上のツールバーにある Cloud Shell アイコンをクリックします。

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

プロビジョニングと環境への接続にはそれほど時間はかかりません。完了すると、次のように表示されます。

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

この仮想マシンには、必要な開発ツールがすべて用意されています。永続的なホーム ディレクトリが 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"

次に、先ほど作成したキーリング内に、目的が encryptionmy-symmetric-key という名前の暗号鍵を作成します。

$ gcloud kms keys create "my-symmetric-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

5. データの暗号化

暗号化するデータを含むファイルを作成し、gcloud コマンドライン ツールを使用してファイル内のデータを暗号化します。

$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file ./data.txt \
    --ciphertext-file ./data.txt.enc

暗号化されたデータ(「暗号テキスト」とも呼ばれます)は、ディスク上の data.txt.enc に保存されます。data.txt.enc ファイルを開くと、奇妙で印刷できない文字が含まれていることがわかります。これは、生成されるデータがバイナリ形式であるためです。

暗号テキストをデータベースに保存する場合や、HTTP リクエストの一部として送信する場合は、データのエンコードが必要になることがあります。よく使用されるエンコード メカニズムは base64 です。

Cloud KMS は、提供された平文を保存しません。平文の値を取得するには暗号テキストが必要になるため、暗号テキストを安全な場所に保存する必要があります。

6. データの復号

gcloud コマンドライン ツールを使用して、ファイル内の暗号テキストを復号します。

$ gcloud kms decrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

gcloud コマンドライン ツールは、ファイルから暗号テキストを読み取り、Cloud KMS を使用して復号します。この例では、--plaintext-file 引数を - として指定しています。これにより、結果をターミナルに出力するように gcloud に指示します。

コンソールには my-contents が出力されます。これは、上記のファイルと同じ平文値です。

7. 鍵をローテーションする

Cloud KMS では、暗号鍵は実際には暗号鍵バージョンのコレクションです。新しい暗号鍵バージョンを作成して、鍵のローテーションを行うことができます。Cloud KMS では、スケジュールに従って鍵を自動的にローテーションすることもできます。

鍵を手動でローテーションするには、新しい暗号鍵バージョンを作成し、それをメインのバージョンとして設定します。

$ gcloud kms keys versions create \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --primary

今後のデータの暗号化リクエストでは、すべてこの新しい鍵が使用されます。それらの鍵を使用して以前に暗号化されたデータの復号には、引き続き古い鍵を使用できます。Cloud KMS は、提供された暗号テキストに基づいて適切な復号鍵を自動的に決定します。復号に使用する暗号鍵バージョンを指定する必要はありません。

古い暗号鍵バージョンを使用して暗号化された暗号テキスト値が Cloud KMS を使用して復号されないようにするには、その暗号鍵バージョンを無効にするか破棄します。無効化すると元に戻せませんが、破棄は元に戻せません。バージョンを無効にするには:

$ gcloud kms keys versions disable "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key"

8. 完了

これで、Cloud KMS API を有効にし、対称暗号鍵を作成し、データを暗号化および復号できました。Cloud KMS は強力なプロダクトであり、暗号化/復号はそのほんの一部にすぎません。

クリーンアップ

確認を終えた場合は、プロジェクトを削除することをおすすめします。

  • Cloud Platform コンソールに移動します。
  • シャットダウンするプロジェクトを選択し、[削除] をクリックします。これにより、プロジェクトの削除がスケジュールされます。

詳細

ライセンス

この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。