Cloud KMS Autokey でリソースを簡単に暗号化

1. はじめに

Cloud KMS Autokey は、プロビジョニングと割り当てを自動化することで、顧客管理の暗号鍵(CMEK)の作成と使用を簡素化します。Autokey により、キーリング、鍵、サービス アカウントが必要になる前に、これらを計画しプロビジョニングする必要はありません。代わりに、Autokey が、Cloud KSM 管理者の代わりに、委任された権限に依存してリソースの作成時にオンデマンドで鍵を作成します。

Autokey によって生成された鍵を使用すると、HSM 保護レベル、職掌分散、鍵のローテーション、ロケーション、鍵の限定性など、データ セキュリティの業界標準と推奨されるプラクティスに一貫して対応できます。Autokey は、一般的なガイドラインと、Cloud KMS Autokey と統合される Google Cloud サービスのリソースタイプに固有のガイドラインの両方に準拠した鍵を作成します。作成後は、Autokey を使用してリクエストされた鍵は、同じ設定を持つ他の Cloud HSM 鍵と同じように機能します。

作成するアプリの概要

この Codelab では、次のものを作成して Cloud KMS Autokey を使用して保護されたリソースを起動します。

  • フォルダ リソース
  • 鍵を格納するプロジェクト
  • 鍵管理アシスタントとして機能するサービス エージェント
  • 保護対象リソースをホストするプロジェクト
  • Cloud KMS Autokey で暗号化された BigQuery データセット、永続ディスク、Cloud Storage バケット

必要なもの

2. フォルダを作成する

フォルダは、Cloud Platform リソース階層のノードです。フォルダには、プロジェクト、他のフォルダ、またはその両方を格納できます。組織リソースは、フォルダを使用して、階層内の組織リソースノードにあるプロジェクトをグループ化できます。フォルダを作成するには:

  1. Google Cloud コンソールの [ リソースの管理 ] ページに移動します。
  2. ページの上部にある組織プルダウン リストで組織リソース名が選択されていることを確認します。
  3. [フォルダを作成] をクリックします。

9328ef3bd4840817.png

  1. [標準フォルダ] を選択します。

20a094fe0c7a0924.png

  1. [フォルダ名] ボックスに、新しいフォルダの名前を入力します。このラボでは、「Autokey-Folder」を検討します。
  2. [宛先] で [参照] をクリックして、新しいフォルダを作成する組織リソースまたはフォルダを選択します。
  3. [作成] をクリックします。

3. リソース プロジェクトを作成する

Cloud KMS Autokey で暗号化するリソース(BigQuery データセット、永続ディスク、Cloud Storage バケットなど)を含むリソース プロジェクトを作成することが重要です。鍵プロジェクトに Autokey で保護されたリソースを作成しようとすると、Autokey は新しい鍵のリクエストを拒否します。リソース プロジェクトを作成するには:

  1. Google Cloud コンソールの [ リソースの管理 ] ページに移動します。
  2. [プロジェクトを作成] をクリックします。

93e4e224322c68a7.png

  1. ページの上部にある [組織の選択] プルダウン リストで、[Autokey-Folder] フォルダを選択します。
  2. 表示される [新しいプロジェクト] ウィンドウで、プロジェクト名を入力し、該当する請求先アカウントを選択します。このラボでは、「Autokey Encrypted Resources」を検討します。
  3. [場所] ボックスで、[Autokey-Folder] フォルダを選択します。このリソースが新しいプロジェクトの階層上の親になります。設定は次のようになります。

187ece37daf50835.png

  1. プロジェクト ID をコピーします。上記の例ではプロジェクト ID は「causal-hour-43319-m4」ですが、実際の ID は異なります。任意のテキスト エディタにコピーします。
  2. [作成] をクリックする
  3. 画面の右上にある Cloud Shell アイコンを選択します。

16c8476c4991f448.png

  1. Cloud Shell がアクティブになったら、次のコマンドを実行して Autokey プロジェクト ID を変数として保存します。
export RESOURCE_PROJECT=<paste your Resource Project ID>

プロジェクト ID が「key-management-433319」なので、コマンドは次のようになります。

export AUTOKEY_PROJECT=causal-hour-43319-m4
  1. 次のコマンドを実行して、Key Project からコマンドを実行します。
gcloud config set project $RESOURCE_PROJECT

プロンプトが表示されたら、[承認] をクリックして Cloud Shell を承認します。

a6c755d4921bc728.png

  1. このプロジェクトにはリソースが含まれるため、Autokey が保護するサービスの API を有効にする必要があります。次のコマンドを実行します。
gcloud services enable storage.googleapis.com bigquery.googleapis.com compute.googleapis.com

4. キー プロジェクトを作成する

Autokey で作成された Cloud KMS リソースを格納するプロジェクトを作成することをおすすめします。以降、このプロジェクトを「鍵プロジェクト」と呼びます。鍵プロジェクトは、Autokey を有効にするフォルダと同じフォルダ内に作成できます。鍵プロジェクト内に他のリソースを作成しないでください。鍵プロジェクトに Autokey で保護されたリソースを作成しようとすると、Autokey は新しい鍵のリクエストを拒否します。鍵プロジェクトを作成するには:

  1. Google Cloud コンソールの [ リソースの管理 ] ページに移動します。
  2. [プロジェクトを作成] をクリックします。

93e4e224322c68a7.png

  1. ページの上部にある [組織の選択] プルダウン リストで、[Autokey-Folder] フォルダを選択します。
  2. 表示される [新しいプロジェクト] ウィンドウで、プロジェクト名を入力し、該当する請求先アカウントを選択します。このラボでは、「キー管理」について説明します。
  3. [場所] ボックスで、[Autokey-Folder] フォルダを選択します。このリソースが新しいプロジェクトの階層上の親になります。設定は次のようになります。

157894b5c9048c06.png

  1. プロジェクト ID(上記の例では「key-management-433319」ですが、実際の ID は異なります)をコピーして、任意のテキスト エディタに貼り付けます。
  2. [作成] をクリックします。

5. Autokey 鍵プロジェクトを準備する

各プロジェクトが作成されたので、Cloud KMS Autokey を使用するように鍵プロジェクトを構成します。

  1. 画面の右上にある Cloud Shell アイコンを選択します。

16c8476c4991f448.png

  1. Cloud Shell がアクティブになったら、次のコマンドを実行して Autokey プロジェクト ID を変数として保存します。
export AUTOKEY_PROJECT=<paste your Autokey Project ID>

プロジェクト ID が「key-management-433319」なので、コマンドは次のようになります。

export AUTOKEY_PROJECT=key-management-433319
  1. 次のコマンドを実行して、Key Project からコマンドを実行します。
gcloud config set project $AUTOKEY_PROJECT

プロンプトが表示されたら、[承認] をクリックして Cloud Shell を承認します。

a6c755d4921bc728.png

  1. 次のコマンドを実行して Cloud KMS API を有効にします。
gcloud services enable cloudkms.googleapis.com  kmsinventory.googleapis.com
  1. 次のコマンドを実行して、プロジェクト番号を AUTOKEY_PROJECT_NUMBER という名前の変数として保存します。
export AUTOKEY_PROJECT_NUMBER=$(gcloud projects list \
--filter="$(gcloud config get-value project)" \
--format="value(PROJECT_NUMBER)")
  1. 次のコマンドを実行して、プリンシパルのメールアドレスを変数として保存します。
export KEY_ADMIN_EMAIL=<paste your Principal's email>
  1. 鍵プロジェクトに対する Cloud KMS 管理者権限を Cloud KMS 管理者ユーザーに付与する
gcloud projects add-iam-policy-binding $AUTOKEY_PROJECT_NUMBER \
    --role=roles/cloudkms.admin \
    --member=user:$KEY_ADMIN_EMAIL

6. Cloud KMS サービス エージェントを設定する

鍵プロジェクトの Cloud KMS サービス エージェントは、リソースの作成時に、Cloud KMS 管理者に代わって鍵を作成し、IAM ポリシー バインディングを適用します。鍵を作成して割り当てるには、Cloud KMS サービス エージェントに Cloud KMS 管理者の権限が必要です。

  1. 次のコマンドで組織 ID を確認します。
gcloud organizations list | grep -P -i 'ID:' | grep -i '[0-9]'
  1. 組織 ID をコピーします。これは、赤でハイライト表示された数値の結果です。
  2. 組織 ID を ORG_ID という名前の変数として保存します。
export ORG_ID=<paste your Organization ID>
  1. 次のコマンドを実行して、Cloud KMS サービス エージェントを作成します。
gcloud beta services identity create --service=cloudkms.googleapis.com \
    --project=$AUTOKEY_PROJECT_NUMBER
  1. サービス エージェントに Cloud KMS 管理者のロールを付与します。
gcloud projects add-iam-policy-binding $AUTOKEY_PROJECT_NUMBER \
    --role=roles/cloudkms.admin \
    --member=serviceAccount:service-$AUTOKEY_PROJECT_NUMBER@gcp-sa-cloudkms.iam.gserviceaccount.com
  1. Cloud KMS 鍵の使用状況を表示できるように、IAM ポリシー バインディングを追加します。鍵の使用状況には、各鍵に関する情報(鍵を使用する保護されたリソース、プロジェクト、固有の Google Cloud プロダクトの数など)が表示されます。この詳細レベルは、鍵に対する Cloud KMS 閲覧者のロールを持つユーザーが利用できます。次のコマンドを実行します。
gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \
    --member="serviceAccount:service-org-$ORGANIZATION_ID@gcp-sa-cloudkms.iam.gserviceaccount.com" \
    --role='roles/cloudkms.orgServiceAgent'
  1. Cloud KMS サービス アカウントに、組織リソースに対する Cloud KMS 組織サービス エージェント(cloudkms.orgServiceAgent)ロールを付与します。
gcloud organizations add-iam-policy-binding $ORG_ID \
    --member="serviceAccount:service-org-$ORG_ID@gcp-sa-cloudkms.iam.gserviceaccount.com" \
    --role='roles/cloudkms.orgServiceAgent'
  1. 鍵の使用状況の詳細を表示する必要があるすべてのユーザーに、組織リソースに対する Cloud KMS Protected Resources 閲覧者のロールを付与します。
gcloud organizations add-iam-policy-binding $ORG_ID \
    --member="user:$KEY_ADMIN_EMAIL" \
    --role='roles/cloudkms.protectedResourcesViewer'

7. Autokey のユーザーロールを付与する

デベロッパーが Autokey を使用できるようにするには、必要なロールを付与する必要があります。このロールは、フォルダレベルまたはプロジェクト レベルで付与できます。このロールを使用すると、デベロッパーは、そのフォルダまたはプロジェクトでリソースを作成するときに、Cloud KMS サービス エージェントから鍵をリクエストできます。

ロールを付与する最初の手順は、フォルダ ID を保存することです。

  1. 次のコマンドでフォルダ ID を確認します。
gcloud projects describe $AUTOKEY_PROJECT | grep 'id' | grep -P -i '[0-9]+'
  1. フォルダ ID をコピーします(赤色でハイライト表示されている部分)。
  2. フォルダ ID を FOLDER_ID という名前の変数として保存します。
export FOLDER_ID=<paste the folder ID>

このラボでは、鍵管理者を Autokey ユーザーとして定義します。ただし、本番環境のユースケースや複数の個人が所属する組織では、鍵管理者は Autokey を使用するデベロッパーとは異なる必要があります。

  1. フォルダレベルで roles/cloudkms.autokeyUser ロールを付与します。
gcloud resource-manager folders add-iam-policy-binding \
    $FOLDER_ID --role=roles/cloudkms.autokeyUser \
    --member=user:$KEY_ADMIN_EMAIL

8. リソース フォルダで Cloud KMS Autokey を有効にする

このステップでは、リソース フォルダで Cloud KMS Autokey を有効にして、フォルダの Autokey リソースを格納する Cloud KMS プロジェクトを確認します。このフォルダで Autokey を有効にすると、フォルダ内のすべてのリソース プロジェクトで Autokey が有効になります。

  1. Google Cloud コンソールで、KMS コントロール ページに移動します。
  2. [フォルダを選択] をクリックします。

785f338e1860029c.png

  1. コンテキスト選択ツールから、Autokey を有効にするフォルダを選択します。これは、以前に作成したフォルダと同じで、リソース プロジェクトと鍵管理プロジェクトが含まれています。次のようになります。

f0ee5141dc6fa40e.png

  1. [有効にする] をクリックします。
  2. [参照] をクリックして、鍵プロジェクトを選択します
  3. 鍵管理プロジェクトを選択し、[送信] をクリックします。

5acd9e68eb972e15.png

Cloud KMS Autokey がフォルダで有効であることを確認するメッセージが表示されます。[KMS コントロール] ページは次のようになります。

8bddb3d688ba842d.png

9. Cloud KMS Autokey を使用して保護されたリソースを作成する

Compute Engine 永続ディスク

Autokey では、作成中のリソースと同じ場所に、ディスク、イメージ、マシンイメージごとに新しい鍵が作成されます。

ディスクを作成する手順は次のとおりです。

  1. Google Cloud コンソールで、[ディスク] ページに移動します。
  2. [ディスクを作成] をクリックし、新しいディスクのプロパティを入力します。
  3. [暗号化] で、[Cloud KMS 鍵] を選択します。

dcc63e9ae03c5fbe.png

  1. [鍵のタイプ] で [Cloud KMS with Autokey] を選択し、[新しい鍵をリクエスト] をクリックします。鍵が正常に作成され、使用できるようになったことを示すメッセージが表示されます。

4b2283a0d52cc98d.png

  1. ディスクの作成を完了するには、[作成] をクリックします。

同様のプロセスで、保護された VM インスタンス、イメージ、マシンイメージのリソースを作成できます。

Google Cloud Storage バケット

Autokey は、バケットと同じロケーションに新しい鍵を作成します。Autokey によって作成された鍵がバケットのデフォルト鍵として割り当てられます。

Autokey はオブジェクトの鍵を作成しません。デフォルトでは、バケットに作成されたオブジェクトはバケットのデフォルト鍵を使用します。バケットのデフォルト以外の鍵を使用してオブジェクトを暗号化する場合は、CMEK を手動で作成し、オブジェクトの作成時にその鍵を使用できます。

  1. Google Cloud コンソールで、[バケットの作成] ページに移動します。
  2. グローバルに一意の永続的な名前を選択します。
  3. データ ロケーションを選択します。
  4. [オブジェクト データを保護する方法を選択する] セクションに進む

e31bbeff5c7aabdf.png

  1. [オブジェクト データを保護する方法を選択する] をクリックしてセクションを開きます。

9c68ce19dac932de.png

  1. [データ暗号化] セクションを開き、[Cloud KMS 鍵] を選択します。d8caca08891be9dc.png
  2. [鍵のタイプ] で [Cloud KMS with Autokey] を選択し、[新しい鍵をリクエスト] をクリックします。鍵が正常に作成され、使用できるようになったことを示すメッセージが表示されます。

a10d1ae243c44811.png

  1. バケットの作成を完了するには、[作成] をクリックします。[公開アクセスの防止] というダイアログ ボックスが表示されたら、[確認] をクリックします。

BigQuery データセット

新しいデータセットごとに、Autokey はリソース自体と同じ場所に新しい鍵を作成します。この鍵はデータセットのデフォルト鍵になります。Autokey は、テーブル、クエリ、一時テーブル、モデルの鍵を作成しません。デフォルトでは、これらのリソースはデータセットのデフォルト鍵で保護されます。データセットのデフォルト以外の鍵を使用してデータセット内のリソースを保護する場合は、CMEK を手動で作成し、リソースの作成時にその鍵を使用できます。

BigQuery データセットを作成するには、まず BigQuery ユーザーロールが必要です。

  1. Cloud Shell に戻る
  2. リソース プロジェクトからコマンドを実行するように Cloud Shell を設定する
gcloud config set project $RESOURCE_PROJECT
  1. 次のコマンドを実行して、プロジェクト番号を RESOURCE_PROJECT_NUMBER という名前の変数として保存します。
export RESOURCE_PROJECT_NUMBER=$(gcloud projects list --filter="$(gcloud config get-value project)" --format="value(PROJECT_NUMBER)")
  1. BigQuery ユーザーロールを自分に付与する
gcloud projects add-iam-policy-binding $RESOURCE_PROJECT_NUMBER \
    --role=roles/bigquery.user \
    --member=user:$KEY_ADMIN_EMAIL

BigQuery ユーザーのロールを取得したので、データセットを作成して Autokey で保護できます。

  1. Google Cloud コンソールで [BigQuery] ページに移動します。
  2. [詳細オプション] > [暗号化] が表示されるまで、データセットの作成の手順に沿って操作します。
  3. [暗号化] で [Cloud KMS 鍵] を選択します。
  4. [鍵のタイプ] で [Cloud KMS with Autokey] を選択し、[新しい鍵をリクエスト] をクリックします。鍵が正常に作成され、使用できるようになったことを示すメッセージが表示されます。
  5. データセットの作成を終了するには、[データセットを作成] をクリックします。

10. キーを確認する

このステップでは、鍵インベントリ ページにアクセスして、Cloud KMS Autokey がユーザーに代わって作成した鍵を確認します。[鍵のインベントリ] ページには、プロジェクトの暗号鍵に関する包括的な情報が表示されます。データが遅延する場合があります。たとえば、新しい保護されたリソースを作成しても、保護されたリソースと関連付けられた鍵バージョンは、すぐに [使用状況の追跡] タブに追加されません。その他の制限事項はこちらをご覧ください。

  1. Google Cloud コンソールで、キー インベントリ ページに移動します。
  2. 省略可: キーのリストをフィルタリングするには、[filter_list] の [フィルタ] ボックスに検索キーワードを入力し、Enter キーを押します。たとえば、キーのロケーション、キーリング、ステータスなどのプロパティでフィルタできます。
  3. 使用状況情報を表示する鍵の名前をクリックします。
  4. [概要] をクリックします。作成されたリソースごとにキーがあることに注意してください。各鍵名には、鍵が保護するリソースの名前(compute-disk や storage-bucket など)が含まれます。Cloud KMS Autokey では、各鍵の作成から 365 日後にローテーションがスケジュールされ、各鍵に「HSM」保護レベルが割り当てられます。

9acbce68acb653d4.png

  1. [使用状況のトラッキング] タブをクリックします。表示される情報のレベルに注目してください。鍵で暗号化されている各リソースが、プロジェクト、ロケーション、作成日とともに表示されます。
  2. 省略可: 保護されたリソースのリストをフィルタリングするには、[filter_list] の [フィルタ] ボックスに検索キーワードを入力し、Enter キーを押します。

7def6fe9a023d063.png

11. 完了

お疲れさまでした。これで、Google Cloud リソースを作成し、Cloud KMS Autokey を使用してオンデマンドで自動的に暗号化することができました。

Autokey を設定し、Cloud KMS 鍵を使用してリソースを自動的に暗号化するために必要な主な手順について説明しました。

12. 次のステップ

Autokey で暗号化されたリソースにデータをアップロードする

リファレンス ドキュメント