Looker(Google Cloud コア)用の CMEK を有効にする

Google Cloud では、デフォルトで、Google が管理する暗号鍵を使用して、自動的に保存されているデータを暗号化します。データを保護する鍵について特定のコンプライアンス要件や規制要件がある場合は、Looker(Google Cloud コア)のアプリケーション レベルの暗号化に顧客管理の暗号鍵(CMEK)を使用できます。

CMEK 全般についての詳細は、Cloud Key Management Service のドキュメントをご覧ください。

このページでは、CMEK を使用するように Looker(Google Cloud コア)インスタンスを構成する方法について説明します。

Looker(Google Cloud コア)は CMEK とどのように連携しますか?

Looker(Google Cloud コア)は、(セカンダリ鍵の階層を通じて)単一の CMEK 鍵を使用して、Looker(Google Cloud コア)インスタンスによって管理される機密データを保護します。起動時には、Looker インスタンス内の各プロセスが Cloud Key Management Service(KMS)を 1 回呼び出して鍵を復号します。通常の動作中(起動後)、Looker インスタンス全体が約 5 分ごとに KMS を 1 回呼び出して、鍵が引き続き有効であることを確認します。

どのような種類の Looker(Google Cloud コア)インスタンスが CMEK をサポートしていますか?

Looker(Google Cloud コア)インスタンスは、次の 2 つの条件が満たされている場合に CMEK をサポートします。

  • このページで説明する CMEK 構成手順は、Looker(Google Cloud Core)インスタンスが作成される前に完了します。顧客管理の暗号鍵を既存のインスタンスで有効にすることはできません。
  • インスタンスのエディションは、Enterprise または Embed にする必要がある。

CMEK を使用して Looker(Google Cloud コア)インスタンスを作成するためのワークフロー

このページでは、Looker(Google Cloud コア)インスタンスに CMEK を設定する手順について説明します。

  1. 環境の設定
  2. Google Cloud CLI、Terraform、API ユーザーのみ、 顧客管理の暗号鍵が必要なプロジェクトごとにサービス アカウントを作成します(プロジェクトに対する Looker サービス アカウントをすでに設定していない場合)。
  3. キーリングと鍵を作成し、鍵のロケーションを設定します。ロケーションは、Looker(Google Cloud コア)インスタンスを作成する Google Cloud リージョンです。
  4. Google Cloud CLI、Terraform、API のユーザーのみ: 鍵の鍵 ID(KMS_KEY_ID)とロケーション、およびキーリングの ID(KMS_KEYRING_ID)をコピーまたは書き留めます。この情報は、サービス アカウントに鍵へのアクセス権を付与するときに必要になります。
  5. Google Cloud CLI、Terraform、API ユーザーのみ: サービス アカウントに鍵へのアクセス権を付与します。
  6. プロジェクトに移動し、次のオプションを使用して Looker(Google Cloud コア)インスタンスを作成します。
    1. 顧客管理の暗号鍵で使用されているロケーションを選択します。
    2. エディションEnterprise または Embed に設定します。
    3. 顧客管理の暗号鍵の構成を有効にします。
    4. 顧客管理の暗号鍵を名前または ID で追加します。

これらの手順がすべて完了すると、Looker(Google Cloud コア)インスタンスで CMEK が有効になります。

始める前に

まだ行っていない場合は、このページの手順に沿って操作できるように環境が構成されていることを確認してください。このセクションの手順に沿って、設定が正しいことを確認します。

  1. Google Cloud コンソールの [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。注: この手順で作成するリソースをそのまま保持する予定でない場合、既存のプロジェクトを選択するのではなく、新しいプロジェクトを作成してください。これらの手順が完了したら、プロジェクトを削除できます。これにより、プロジェクトに関連付けられているリソースが削除されます。

    プロジェクト セレクタに移動

  2. Google Cloud プロジェクトの課金が有効になっていることを確認します。プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. Google Cloud CLI をインストールします。
  4. gcloud CLI を初期化するには:

    gcloud init
    

  5. Cloud Key Management Service API を有効にします。

    API を有効にする

  6. Looker(Google Cloud コア)API を有効にする

    API を有効にする

必要なロール

CMEK の設定に必要なロールについては、Cloud Key Management Service のドキュメントの IAM によるアクセス制御ページをご覧ください。

Looker(Google Cloud コア)インスタンスを作成するには、Looker(Google Cloud コア)インスタンスが作成されるプロジェクトに対する Looker 管理者 IAM ロールがあることを確認してください。Google Cloud コンソールでインスタンスの CMEK を有効にするには、CMEK 用に使用されている鍵に対する Cloud KMS CryptoKey Encrypter/Decrypter IAM ロールがあることを確認します。

Looker サービス アカウントに Cloud KMS 鍵へのアクセス権を付与する必要がある場合は、使用されている鍵に対する Cloud KMS 管理者 IAM ロールが必要です。

サービス アカウントを作成する

Google Cloud CLI、Terraform、または API を使用して Looker(Google Cloud コア)インスタンスを作成する場合で、そこに配置する Google Cloud プロジェクトに対する Looker サービス アカウントがすでに作成されていない場合、プロジェクトのサービス アカウントを作成する必要があります。プロジェクトに複数の Looker(Google Cloud コア)インスタンスを作成する場合、同じサービス アカウントをそのプロジェクト内のすべての Looker(Google Cloud コア)インスタンスに適用するため、サービス アカウントの作成は 1 回で済みます。コンソールを使用してインスタンスを作成する場合、[顧客管理の暗号鍵を使用する] オプションを構成すると、Looker(Google Cloud コア)によってサービス アカウントが自動的に作成され、CMEK 鍵へのアクセス権が付与されます。

ユーザーがサービス アカウントを管理できるようにするには、次のいずれかの役割を付与します。

  • サービス アカウント ユーザー(roles/iam.serviceAccountUser): サービス アカウントを一覧表示する権限、サービス アカウントの詳細を取得する権限、サービス アカウントの権限借用の権限が含まれます。
  • サービス アカウント管理者(roles/iam.serviceAccountAdmin): サービス アカウントを一覧表示する権限、サービス アカウントの詳細を取得する権限が含まれます。サービス アカウントの作成、更新、削除の権限も含まれます。

現在、顧客管理の暗号鍵に必要なサービス アカウントを作成するには、Google Cloud CLI コマンドを使用する必要があります。Google Cloud コンソールを使用している場合、Looker(Google Cloud コア)によってこのサービス アカウントが自動的に作成されます。

gcloud

次のコマンドを実行して、サービス アカウントを作成します。

gcloud beta services identity create \
--service=looker.googleapis.com \
--project=PROJECT_ID

PROJECT_ID は、Looker(Google Cloud コア)インスタンスが存在するプロジェクトに置き換えます。

このコマンドはサービス アカウントを作成し、サービス アカウント名を返します。このサービス アカウント名は、サービス アカウントに鍵へのアクセス権を付与するの手順で使用します。

サービス アカウントを作成した後、サービス アカウントが反映されるまで数分待ちます。

キーリングと鍵を作成する

鍵は、Looker(Google Cloud コア)インスタンスと同じ Google Cloud プロジェクトで作成するか、別のユーザー プロジェクトで作成します。Cloud KMS キーリングの場所は、Looker(Google Cloud コア)インスタンスを作成するリージョンと一致する必要があります。マルチリージョンまたはグローバル リージョン鍵は使用できません。リージョンが一致しない場合、Looker(Google Cloud コア)インスタンスの作成リクエストは失敗します。

キーリングの作成鍵の作成のドキュメント ページの手順に沿って、次の 2 つの条件を満たすキーリングと鍵を作成します。

  • [キーリングのロケーション] フィールドは、Looker(Google Cloud コア)インスタンスに設定するリージョンと一致している必要があります。
  • 鍵の [目的] フィールドは [対称暗号化 / 復号] にする必要があります。

鍵のローテーションと新しい鍵バージョンの作成については、鍵をローテーションするをご覧ください。

KMS_KEY_IDKMS_KEYRING_ID をコピーするか書き留める

Google Cloud CLI、Terraform、または API を使用して Looker(Google Cloud コア)インスタンスを設定する場合は、Cloud KMS リソース ID の取得のドキュメント ページの手順に従って、作成したキーリングと鍵のリソース ID を確認してください。鍵の鍵 ID(KMS_KEY_ID)とロケーション、およびキーリングの ID(KMS_KEYRING_ID)をコピーするか書き留めます。この情報は、サービス アカウントに鍵へのアクセス権を付与するときに必要になります。

サービス アカウントにリソースへのアクセス権を付与する

この手順は、次の両方に該当する場合にのみ必要です。

  • Google Cloud CLI、Terraform、または API を使用している。
  • サービス アカウントに鍵へのアクセス権がまだ付与されていない。たとえば、同じ鍵を使用する Looker(Google Cloud コア)インスタンスが同じプロジェクト内にすでに存在する場合、アクセス権を付与する必要はありません。または、鍵へのアクセス権が他のユーザーにすでに付与されている場合は、アクセス権を付与する必要はありません。

サービス アカウントにアクセス権を付与するには、使用している鍵に対する Cloud KMS 管理者 IAM ロールが必要です。

サービス アカウントにアクセス権を付与するには:

gcloud

gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
--location=REGION \
--keyring=KMS_KEYRING_ID \
--member=serviceAccount:SERVICE_ACCOUNT_NAME \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter

以下を置き換えます。

  • KMS_KEY_ID: KMS 鍵の ID
  • REGION: Looker(Google Cloud コア)が作成されるリージョンとキーリングのロケーション
  • KMS_KEYRING_ID: KMS キーリングの ID
  • SERVICE_ACCOUNT_NAME: サービス アカウントの作成時に返されたサービス アカウント名

サービス アカウントに IAM ロールを付与した後、権限が反映されるまで数分待ちます。

CMEK を使用して Looker(Google Cloud コア)インスタンスを作成する

Google Cloud コンソールで顧客管理の暗号鍵を使用してインスタンスを作成するには、まず上記のキーリングと鍵を作成するセクションの手順に従って、Looker(Google Cloud コア)インスタンスに使用するリージョンのキーリングと鍵を作成します。次に、次の設定を使用して、Looker(Google Cloud コア)インスタンスを作成する手順を行います。

CMEK 設定を使用して Looker(Google Cloud コア)インスタンスを作成するには、次のいずれかのオプションを選択します。

コンソール

  1. CMEK 用に使用されている鍵に対する Cloud KMS CryptoKey Encrypter/Decrypter IAM ロールがあることを確認します。
  2. [インスタンスの作成] ページの [エディション] セクションで、使用する Enterprise または Embedded エディションを選択してCMEKを使用する必要があります。
  3. [インスタンスの作成] ページの [暗号化] セクションで、[顧客管理の暗号鍵(CMEK)] ラジオボタンを選択します。[顧客管理の暗号鍵を選択] プルダウン フィールドが表示されます。
  4. [顧客管理の暗号鍵を選択] フィールドで、使用する鍵を設定します。鍵は、作成する Looker(Google Cloud コア)インスタンスと同じリージョンにロケーションが設定されているキーリングに存在する必要があります。そうしないと、インスタンスの作成に失敗します。鍵は、次の 2 つの方法のいずれかで選択できます。
    1. プルダウン リストから鍵の名前を選択します。Google Cloud プロジェクトで使用可能な鍵がプルダウン リストに表示されます。キーを選択したら、[OK] をクリックします。
    2. 鍵の入力リソース ID:テキストをクリックします。鍵が表示されない場合は、鍵のリソース ID の入力] をクリックします。これにより、[鍵のリソース ID の入力] ダイアログが表示され、鍵の ID を入力できます。ID を入力したら、[保存] を選択します。
  5. キーを選択すると、キーを使用するための権限をサービス アカウントに付与することを求めるメッセージが表示されます。[付与] ボタンをクリックします。
  6. 選択した鍵で暗号化 / 復号を行う権限がサービス アカウントにない場合、メッセージが表示されます。この場合は、[付与] をクリックして、選択した KMS 鍵に対する Cloud KMS 暗号鍵の暗号化 / 復号 IAM ロールをサービス アカウントに付与します。
  7. Looker(Google Cloud コア)インスタンスの構成が完了したら、[作成] をクリックします。

gcloud

gcloud looker instances create INSTANCE_NAME \
--project=PROJECT_ID \
--oauth-client-id=OAUTH_CLIENT_ID\
--oauth-client-secret=OAUTH_CLIENT_SECRET \
--kms-key=KMS_KEY_ID
--region=REGION \
--edition=EDITION
[--consumer-network=CONSUMER_NETWORK --private-ip-enabled --reserved-range=RESERVED_RANGE]
[--no-public-ip-enabled]
[--public-ip-enabled]

以下を置き換えます。

  • INSTANCE_NAME: Looker(Google Cloud コア)インスタンスの名前。インスタンス URL には関連付けられていません。
  • PROJECT_ID: Looker(Google Cloud コア)インスタンスを作成する Google Cloud プロジェクトの名前。
  • OAUTH_CLIENT_IDOAUTH_CLIENT_SECRET: OAuth クライアントを設定したときに作成した OAuth クライアント ID と OAuth シークレット。インスタンスが作成されたら、OAuth クライアントの [承認済みのリダイレクト URI] セクションにインスタンスの URL を入力します。
  • KMS_KEY_ID: KMS 鍵の ID
  • REGION: Looker(Google Cloud コア)インスタンスがホストされるリージョン。使用可能なリージョンは、Looker(Google Cloud コア)のロケーション ドキュメント ページに記載されています。
  • EDITION: CMEK を有効にするには、EDITIONcore-embed-annual または core-enterprise-annual にする必要があります。
  • CONSUMER_NETWORK: VPC ネットワークまたは共有 VPC。プライベート IP インスタンスを作成する場合は設定する必要があります。
  • RESERVED_RANGE: Google が Looker(Google Cloud コア)インスタンスのサブネットワークをプロビジョニングする VPC 内の IP アドレスの範囲。プライベート IP インスタンスを作成する場合は設定する必要があります。

次のフラグを含めることができます。

  • --private-ip-enabled は、プライベート IP を有効にします。
  • --public-ip-enabled は、パブリック IP を有効にします。
  • --no-public-ip-enabled は、パブリック IP を無効にします。

Terraform

以下の Terraform リソースを使用して、プライベート ネットワーク接続を有する Enterprise Looker(Google Cloud コア)インスタンスをプロビジョニングします。

# Creates an Enterprise edition Looker (Google Cloud core) instance with full, Private IP functionality.
resource "google_looker_instance" "main" {
  name               = "my-instance"
  platform_edition   = "LOOKER_CORE_ENTERPRISE_ANNUAL"
  region             = "us-central1"
  private_ip_enabled = true
  public_ip_enabled  = false
  reserved_range     = google_compute_global_address.main.name
  consumer_network   = data.google_compute_network.main.id
  admin_settings {
    allowed_email_domains = ["google.com"]
  }
  encryption_config {
    kms_key_name = google_kms_crypto_key.main.id
  }
  maintenance_window {
    day_of_week = "THURSDAY"
    start_time {
      hours   = 22
      minutes = 0
      seconds = 0
      nanos   = 0
    }
  }
  deny_maintenance_period {
    start_date {
      year  = 2050
      month = 1
      day   = 1
    }
    end_date {
      year  = 2050
      month = 2
      day   = 1
    }
    time {
      hours   = 10
      minutes = 0
      seconds = 0
      nanos   = 0
    }
  }
  oauth_config {
    client_id     = "my-client-id"
    client_secret = "my-client-secret"
  }
  depends_on = [
    google_service_networking_connection.main,
    google_kms_crypto_key.main
  ]
}

resource "google_kms_key_ring" "main" {
  name     = "keyring-example"
  location = "us-central1"
}

resource "google_kms_crypto_key" "main" {
  name     = "crypto-key-example"
  key_ring = google_kms_key_ring.main.id
}

resource "google_service_networking_connection" "main" {
  network                 = data.google_compute_network.main.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.main.name]
}

resource "google_compute_global_address" "main" {
  name          = "looker-range"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 20
  network       = data.google_compute_network.main.id
}

data "google_project" "main" {}

data "google_compute_network" "main" {
  name = "default"
}

resource "google_kms_crypto_key_iam_member" "main" {
  crypto_key_id = google_kms_crypto_key.main.id
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
  member        = "serviceAccount:service-${data.google_project.main.number}@gcp-sa-looker.iam.gserviceaccount.com"
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

CMEK で Looker(Google Cloud コア)インスタンスが有効になります。

CMEK 対応インスタンスの鍵情報を表示する

Looker(Google Cloud コア)インスタンスが正常に作成されたら、CMEK が有効になっているかどうかを確認できます。

CMEK が有効になっているかどうかを確認するには、次のいずれかのオプションを選択します。

コンソール

  1. Google Cloud コンソールで、[Looker インスタンス] ページに移動します。
  2. インスタンス名をクリックして [インスタンスの詳細] ページを開きます。インスタンスで CMEK が有効になっている場合、[暗号化] 行にインスタンスに使用されている暗号化が表示されます。[顧客管理の暗号鍵(CMEK)] フィールドに鍵の識別子が表示されます。

gcloud

gcloud looker instances describe INSTANCE_NAME --region=REGION --format config

以下を置き換えます。

  • INSTANCE_NAME: Looker(Google Cloud コア)インスタンスの名前。インスタンス URL には関連付けられていません。
  • REGION: インスタンスが作成されたリージョン

このコマンドは、kmsKeyNamekmsKeyNameVersionkmsKeyState を返します。これは、インスタンスが CMEK で構成されていることを確認します。

Cloud External Key Manager(Cloud EKM)を使用する

Looker(Google Cloud コア)インスタンス内のデータを保護するには、サポートされている外部鍵管理パートナー内で管理する鍵を使用します。詳細については、Cloud External Key Manager のドキュメント ページ(考慮事項のセクションを含む)をご覧ください。

Cloud EKM 鍵を作成する準備ができたら、Cloud External Key Manager のドキュメント ページの仕組みセクションをご覧ください。鍵を作成したら、Looker(Google Cloud コア)インスタンスを作成するときに鍵の名を指定します。

Google は、外部の鍵管理パートナー システムで鍵の可用性を制御しません。

鍵をローテーションする

セキュリティを強化するために、鍵をローテーションすることをおすすめします。鍵をローテーションするたびに、新しい鍵バージョンが作成されます。鍵のローテーションの詳細については、鍵のローテーションのドキュメント ページをご覧ください。

Looker(Google Cloud コア)インスタンスの保護に使用されている鍵をローテーションする場合、その鍵バージョンが使用されていたときに作成されたバックアップまたはエクスポートにアクセスするには、以前の鍵バージョンが必要です。そのため、これらのアイテムに引き続きアクセスできるように、ローテーション後少なくとも 45 日間は以前の鍵バージョンを有効にしておくことをおすすめします。鍵バージョンは、無効化または破棄されるまでデフォルトで保持されます。

鍵バージョンを無効にしてから再度有効にする

次のドキュメントのページをご覧ください。

Looker(Google Cloud コア)インスタンスの保護に使用される鍵バージョンが無効になっている場合、Looker(Google Cloud コア)インスタンスは動作を停止し、メモリ内に存在する暗号化されていない機密データをすべて消去して、鍵が再び使用可能になるまで待機する必要があります。プロセスは次のとおりです。

  1. Looker(Google Cloud コア)インスタンスの保護に使用される鍵バージョンが無効になっています。
  2. 約 15 分以内に、Looker(Google Cloud コア)インスタンスは鍵バージョンが取り消されたことを検出し、オペレーションを停止して、メモリ内の暗号化されたデータをすべて消去します。
  3. インスタンスの動作が停止すると、Looker API の呼び出しからエラー メッセージが返されます。
  4. インスタンスの動作が停止すると、Looker(Google Cloud コア)UI にエラー メッセージが返されます。
  5. 鍵バージョンを再度有効にする場合、インスタンスのrestartを手動でトリガーする必要があります。

鍵バージョンを無効にして、Looker(Google Cloud コア)インスタンスが自動的に停止するのを待たない場合は、手動でインスタンスを再起動することで、Looker(Google Cloud コア)インスタンスが取り消された鍵バージョンをすぐに検出できます。

鍵バージョンの破棄

次のドキュメント ページをご覧ください。

Looker(Google Cloud コア)インスタンスの保護に使用される鍵バージョンが破棄されると、Looker インスタンスにアクセスできなくなります。インスタンスは削除され、データにアクセスできなくなります。

トラブルシューティング

ここでは、CMEK 対応インスタンスの設定中または使用中にエラー メッセージが表示された場合の対処方法について説明します。

Cloud KMS エラーやロールまたは権限がないために、作成や更新などの Looker(Google Cloud コア)管理者のオペレーションが失敗する場合があります。失敗の一般的な理由には、Cloud KMS 鍵バージョンがない、Cloud KMS 鍵バージョンが無効かまたは破棄されている、Cloud KMS 鍵バージョンにアクセスするための IAM 権限が不足している、Cloud KMS 鍵バージョンが Looker(Google Cloud コア)インスタンスと別のリージョンにあるなどがあります。一般的な問題を診断して解決するには、次のトラブルシューティングの表を使用しください。

顧客管理の暗号鍵のトラブルシューティングの表

エラー メッセージ 考えられる原因 トラブルシューティングの手法
プロダクトごと、プロジェクトごとのサービス アカウントが見つかりません サービス アカウント名が正しくありません。 正しいユーザー プロジェクトのサービス アカウントが作成されていることを確認します。

[サービス アカウント] ページに移動

サービス アカウントへのアクセスを許可できません ユーザー アカウントに、この鍵バージョンへのアクセスを許可する権限がありません。

ユーザー アカウントまたはサービス アカウントで組織管理者のロールを追加してください。

IAM アカウントのページに移動

Cloud KMS 鍵バージョンが破棄されています 鍵バージョンが破棄されています。 鍵バージョンが破棄されている場合、データの暗号化や復号に使用できません。Looker(Google Cloud コア)インスタンスを削除する必要があります。
Cloud KMS 鍵バージョンが無効です 鍵バージョンが無効です。

Cloud KMS 鍵バージョンを再度有効にします。

[鍵管理] ページに移動

Cloud KMS 鍵を使用するための十分な権限がありません Looker(Google Cloud コア)インスタンスでオペレーションに使用しているユーザー アカウントまたはサービス アカウントに cloudkms.cryptoKeyEncrypterDecrypter のロールがないか、Cloud KMS 鍵バージョンが存在しません。

ユーザー アカウントまたはサービス アカウントに cloudkms.cryptoKeyEncrypterDecrypter のロールを追加します。

IAM アカウントのページに移動

アカウントにすでにロールがある場合は、キーリングと鍵の作成を参照して、新しい鍵バージョンの作成方法を確認してください。その後、インスタンスの作成手順をもう一度行います。

Cloud KMS 鍵が見つかりません 鍵バージョンが存在しません。 新しい鍵バージョンを作成し、インスタンスの作成手順をもう一度完了します。キーリングと鍵の作成をご覧ください。
Looker(Google Cloud コア)インスタンスと Cloud KMS 鍵バージョンが異なるリージョンにあります Cloud KMS 鍵バージョンと Looker(Google Cloud コア)インスタンスは同じリージョン内になければなりません。Cloud KMS 鍵バージョンがグローバル リージョンまたはマルチリージョンにある場合は機能しません。 インスタンスを作成するリージョンと同じリージョンに鍵バージョンを作成し、インスタンスの作成手順をもう一度完了します。キーリングと鍵の作成をご覧ください。

次のステップ