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 回呼び出して、鍵がまだ有効であることを確認します。

CMEK をサポートする Looker の種類のインスタンス(Google Cloud のコアインスタンス)は何ですか?

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

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

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

このページでは、Looker(Google Cloud Core)インスタンスに 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. [エディション] を [エンタープライズ] または [埋め込み] に設定します。
    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 Console を使用している場合、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 設定でプライベート IP インスタンスを作成するには、次のいずれかのオプションを選択します。

Console

  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 CryptoKey Encrypter/Decrypter 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 コマンドをご覧ください。

これで、Looker(Google Cloud コア)インスタンスが CMEK で有効になりました。

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

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

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

Console

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

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

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

鍵をローテーションする

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

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

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

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

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

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

鍵バージョンを無効にして、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 鍵バージョンがグローバル リージョンまたはマルチリージョンにある場合は機能しません。 インスタンスを作成するリージョンと同じリージョンに鍵バージョンを作成し、インスタンスの作成手順をもう一度完了します。キーリングと鍵の作成をご覧ください。

次のステップ