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 では、キーリングは暗号鍵の論理コレクションです。キーリングには、鍵のロケーションなどのメタデータが含まれています。global リージョンに my-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 です。

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

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 Console に移動します。
  • シャットダウンするプロジェクトを選択し、上部の [削除] をクリックします。これにより、プロジェクトの削除がスケジュールされます。

詳細

ライセンス

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