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

1. はじめに

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

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」です。任意のテキスト エディタで開きます。
  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. 次のコマンドを実行して、鍵プロジェクトからコマンドを実行します。
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 をコピーします。上記の例では、プロジェクト ID は「key-management-433319」です。任意のテキスト エディタで開いてください。
  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. 次のコマンドを実行して、鍵プロジェクトからコマンドを実行します。
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. IAM ポリシー バインディングを追加して、Cloud KMS 鍵の使用状況を表示できるようにします。鍵の使用状況には、保護されたリソース、プロジェクト、鍵を使用する一意の 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 保護対象リソース閲覧者のロールを、鍵の使用状況の詳細を確認する必要があるユーザーに付与します。
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 Controls] ページは次のようになります。

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 を設定し、Autokey を使用して Cloud KMS 鍵でリソースを自動的に暗号化するために必要な主な手順を学習しました。

12. 次のステップ

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

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