ログバケットに CMEK を構成する

このドキュメントでは、ログバケットに保存されているログに対して顧客管理の暗号鍵(CMEK)を構成する手順について説明します。このドキュメントでは、これらの鍵を管理する方法と、CMEK の使用に関連する制限事項についても説明します。

CMEK は、組織またはフォルダのデフォルトのリソース設定として構成できます。構成すると、Cloud Logging によって、組織またはフォルダ内のすべての新しいログバケットが顧客管理の暗号鍵で暗号化されます。 ログバケットを作成するときに鍵を指定しない場合は、デフォルトの鍵が使用されます。詳細については、Cloud Logging 用の CMEK を構成するをご覧ください。

概要

Cloud Logging では、お客様のコンテンツを保存時に暗号化するのがデフォルトの動作です。Logging によってログバケットに保存されたデータは、暗号鍵を使用して暗号化されます。これはエンベロープ暗号化と呼ばれるプロセスです。ロギングデータにアクセスするには、これらの鍵暗号鍵にアクセスする必要があります。この鍵は Google がお客様の代わりに管理します。

お客様の組織には、デフォルトの保存時の暗号化で提供されない規制、コンプライアンス関連の暗号化、高度な暗号化要件がある場合があります。組織の要件を満たすため、データを保護する暗号鍵を Google が管理するのではなく、ユーザーが管理することもできます。

CMEK の使用状況に関する具体的な情報(利点や制限など)については、顧客管理の暗号鍵をご覧ください。

対称暗号化では、セキュリティのために、定期的に自動で鍵をローテーションすることをおすすめします。詳細については、鍵のローテーションをご覧ください。

前提条件

次の手順を行います。

  1. CMEK を使用する場合、いくつかの制限事項があります。CMEK を有効にしてログバケットを作成する前に、制限事項を確認してください。

  2. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

    gcloud init

    このガイドでは、Google Cloud CLI の手順について説明します。

  3. Cloud KMS を実行する Google Cloud プロジェクトを作成または特定します。

  4. 鍵の作成に必要な権限を取得するには、プロジェクトまたは親リソースの Cloud KMS 管理者roles/cloudkms.admin)IAM ロールの付与を管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  5. 次の Cloud Logging 権限があることを確認します。

    • logging.settings.get
    • logging.buckets.get
    • logging.buckets.list
    • logging.buckets.create
    • logging.buckets.update
  6. Cloud KMS を実行する Google Cloud プロジェクトに対して Cloud KMS API を有効にします。

  7. Cloud KMS を実行する Google Cloud プロジェクトのキーリングと鍵を作成します。

    障害発生ドメインをアライメントするには、ロケーションがデータのリージョン スコープと一致するキーリングを使用する必要があります。

    global リージョンで作成されたログバケットに対して CMEK を有効にすることはできません。

  8. 次の変数の値を特定します。

    • BUCKET_ID は、作成する Logging バケットの一意の数値識別子です。
    • BUCKET_PROJECT_ID は、新しいログバケットを含む Google Cloud プロジェクトの名前です。
    • KMS_PROJECT_ID Cloud KMS を実行している Google Cloud プロジェクトの一意の英数字識別子で、Google Cloud プロジェクト名とランダムに割り当てられた番号で構成されます。
    • KMS_KEY_LOCATION は、Cloud KMS 鍵のリージョンです。
    • KMS_KEY_RING は、Cloud KMS キーリングの名前です。
    • Cloud KMS 鍵の名前付きの KMS_KEY_NAME。次のような形式になります。projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY

    リソース ID の確認方法については、プロジェクトの識別をご覧ください。

CMEK を有効にする

前提条件の手順を完了したら、次の手順で個々のログバケットに対して CMEK を有効にします。

サービス アカウント ID を特定する

CMEK が適用される Google Cloud リソースに関連付けられているサービス アカウント ID を特定するには、次の操作を行います。

  1. 次の gcloud logging settings describe コマンドを実行します。

    gcloud logging settings describe --project=BUCKET_PROJECT_ID
    

    上記のコマンドは、指定されたリソース用のサービス アカウントがまだ存在しない場合に生成し、そのサービス アカウントの ID が kmsServiceAccountId フィールドに返されます。

    kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    name: projects/BUCKET_PROJECT_ID/settings
    

    kmsServiceAccountId フィールドには、Cloud Logging が Cloud Key Management Service の呼び出しに使用するサービス アカウントが一覧表示されます。KMS_SERVICE_ACCT_NAME フィールドの形式は service-PROJECT_NUMBER または cmek-pPROJECT_NUMBER です。

  2. KMS_SERVICE_ACCT_NAME フィールドの形式が cmek-pPROJECT_NUMBER の場合で、VPC Service Controls を使用している場合、またはドメインで制限された共有を有効にする場合、CMEK サービス アカウントを移行する必要があるかどうかを判断します。移行のタイミングと移行の手順については、VPC Service Controls とドメインで制限された共有のトラブルシューティングをご覧ください。

暗号化 / 復号のロールを割り当てる

ログバケット レベルで CMEK を構成する場合は、Cloud KMS CryptoKey の暗号化 / 復号 のロールを kmsServiceAccountId フィールドで識別されるサービス アカウントに割り当てることで、Cloud KMS の使用権限をサービス アカウントに付与します。

gcloud kms keys add-iam-policy-binding \
--project=KMS_PROJECT_ID \
--member serviceAccount:KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING \
KMS_KEY_NAME

上記のコマンドの変数は次のように設定します。

  • KMS_SERVICE_ACCT_NAME は、前のステップで特定した kmsServiceAccountId 値に置き換えます。

  • 他の変数は、前提条件の手順で特定した値に置き換えます。

ログバケットを作成して Cloud KMS 鍵を指定する

ログバケットを作成して、ログバケットで CMEK を有効にするには、次の gcloud logging buckets create コマンドを実行します。

gcloud logging buckets create BUCKET_ID \
--location=LOCATION \
--cmek-kms-key-name=KMS_KEY_NAME

鍵の有効化を確認する

CMEK を有効にしてログバケットが正常に作成されたことを確認するには、次のコマンドを実行します。

gcloud logging buckets list --project=BUCKET_PROJECT_ID

表形式の出力に、CMEK という列が表示されます。CMEK 列の値が TRUE であれば、ログバケットに対して CMEK が有効になります。

特定のログバケットの詳細(鍵の詳細を含む)を表示するには、次のコマンドを実行します。

gcloud logging buckets describe BUCKET_ID

Cloud KMS 鍵を管理する

以降のセクションでは、Cloud KMS 鍵の最新のメインの鍵バージョンを使用するようにログバケットを更新する方法について説明します。また、Cloud KMS 鍵の変更、アクセス取り消し、無効化の方法についても説明します。

Cloud KMS 鍵をローテーションする

Cloud KMS 鍵を作成するときに、ローテーション期間を構成できます。Cloud KMS 鍵を手動でローテーションすることもできます。 鍵をローテーションするたびに、その鍵の新しいバージョンが作成されます。

Cloud KMS 鍵をローテーションすると、新しい鍵バージョンは鍵のローテーション後に作成されたログバケットにのみ適用されます。鍵が既存のログバケットで使用されている場合、鍵をローテーションしても、ログバケットでデータを保護する方法は変更されません。

たとえば、ログバケットを作成して CMEK を有効にし、Cloud KMS 鍵をローテーションするとします。作成したログバケットは、新しい鍵バージョンを使用しません。代わりに、ログバケットの作成時にメインとしてマークされた鍵バージョンでデータを保護します。

Cloud KMS 鍵の最新の主キーバージョンを使用するようにログバケットを更新するには、次の操作を行います。

  1. ログバケットの現在の Cloud KMS 鍵を特定します。 詳細については、鍵の有効化を確認するをご覧ください。
  2. 使用できる別の Cloud KMS 鍵を特定します。キーリングに鍵が 1 つしかない場合は、鍵を作成します。
  3. 前の手順で作成した Cloud KMS 鍵に、ログバケットの Cloud KMS 鍵を変更します。
  4. 元の Cloud KMS 鍵に、ログバケットの Cloud KMS 鍵を変更します。

Cloud KMS 鍵を変更する

ログバケットに関連付けられた Cloud KMS 鍵を変更するには、鍵を作成し、ログバケットの CMEK 設定を更新します。

gcloud logging buckets update BUCKET_ID --cmek-kms-key-name=NEW_KMS_KEY_NAME

Cloud KMS 鍵へのアクセス権を取り消す

Logging の Cloud KMS 鍵へのアクセス権をいつでも取り消すには、その鍵に対する構成済みサービス アカウントの IAM 権限を削除します。

Logging の鍵へのアクセス権を削除した際、変更が反映されるまで 1 時間ほどかかる場合があります。

リンクされた BigQuery データセットがある場合、BigQuery はこのアクセス権を使用して新しい BigQuery テーブルに鍵を適用することはできません。Logging にリンクされていない鍵を BigQuery テーブルで使用する場合は、BigQuery のドキュメントに従ってそうしてください。Logging の鍵へのアクセス権を取り消して、リンクされた BigQuery データセットがある場合は、同じ鍵に対する BigQuery のアクセス権を取り消すこともできます。

Logging のアクセス権を保持したまま、リンクされたデータセットの鍵への BigQuery のアクセス権を取り消すことはできません。

アクセス権の取り消しの影響の詳細については、制限事項をご覧ください。

鍵への Logging のアクセス権を削除するには、次のコマンドを実行します。

gcloud kms keys remove-iam-policy-binding \
--project=KMS_PROJECT_ID \
--member serviceAccount:KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING \
KMS_KEY_NAME

制限事項

既知の制限事項は次のとおりです。

CMEK では Error Reporting が無効になる

Error Reporting を使用する場合は、ログバケットで顧客管理の暗号鍵(CMEK)を有効にしないでください。 詳細については、トラブルシューティングをご覧ください。

ログバケットから CMEK を削除できない

ログバケットを再構成して、CMEK を変更または削除することはできません。

Cloud KMS 鍵が使用できないことによる縮退

次の両方に該当する場合、Cloud KMS 鍵は Logging で使用でき、アクセス可能とみなされます。

  • その鍵が有効になっている。
  • Logging サービス アカウントに、鍵の暗号化と復号の権限がある。

ロギングでは、すべての鍵が適切に構成され、常に使用可能であることを確認することを強くおすすめします。

障害復旧の喪失

Cloud Logging のプライマリ ストレージで重大な障害が発生した場合、Logging はロギングデータを障害復旧ファイルにミラーリングします。Google Cloud 組織などのリソースで CMEK が有効になっている場合、そのリソースに属するログは構成済みの CMEK 鍵で保護されます。CMEK 鍵にアクセスできない場合、そのリソースの障害復旧ファイルは書き込めません。

障害復旧ファイルが失われても、通常のロギング オペレーションには影響しません。ただし、ストレージの障害が発生した場合、Cloud Logging は CMEK が適切に構成されていないリソースからログを復元できない可能性があります。

サポートの制約

Cloud カスタマーケアでは、鍵が正しく構成されていないか、利用できなくなると、リソースのログを読み取ることができません。

クエリ パフォーマンスの低下

顧客管理の暗号鍵にアクセスできない場合でも、Cloud Logging は引き続きデータの暗号化を行い、データをログバケットに保存します。ただし、Cloud Logging はこのデータに対してバックグラウンド最適化を実行できません。鍵へのアクセスが回復するとデータは利用可能になりますが、最初はデータが最適化されていない状態で保存されるため、クエリのパフォーマンスが低下する可能性があります。

Cloud EKM 鍵が使用できないことによる縮退

Cloud EKM 鍵を使用する場合、Google は外部の鍵管理パートナー システム内の外部管理鍵の可用性をコントロールできません。バケットレベルの CMEK では、外部管理された鍵が使用できない場合、Cloud Logging は引き続きログバケットにログを保存しますが、ユーザーはそれらのログにアクセスできません。

外部鍵を使用する場合の考慮事項と可能な代替手段については、Cloud External Key Manager のドキュメントをご覧ください。

リージョン

ログバケットを作成して CMEK を有効にする場合は、鍵のリージョンがデータのリージョン スコープと一致する鍵を使用する必要があります。globalリージョンで作成されたログバケットに CMEK を構成することはできません。

クライアント ライブラリの可用性

Logging のクライアント ライブラリには、CMEK を構成する方法が用意されていません。

割り当て

ロギングの使用量上限について詳しくは、割り当てと上限をご覧ください。

構成エラーのトラブルシューティング

CMEK 構成エラーのトラブルシューティングについては、CMEK と組織の設定エラーのトラブルシューティングをご覧ください。