Cloud Logging 用に CMEK を構成する

このドキュメントでは、Cloud Logging 用の顧客管理の暗号鍵(CMEK)を組織のコンプライアンスのニーズを満たすように構成、管理する方法について説明します。CMEK は、組織フォルダ、またはその両方のデフォルトのリソース設定として構成できます。Cloud Logging を構成すると、組織またはフォルダ内のすべての新しいログバケットが顧客管理の暗号鍵で暗号化されます。

概要

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

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

CMEK の利点と制限などの特定の情報については、顧客管理の暗号鍵をご覧ください。

CMEK を Logging のデフォルトのリソース設定として構成すると、組織またはフォルダ内の新しいログバケットは、構成した鍵で自動的に暗号化されます。ただし、その鍵を変更することも、ログバケットを作成して異なる鍵を指定することもできます。詳細については、ログバケット用の CMEK を構成するをご覧ください。

前提条件

開始するには、次の手順を完了します。

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

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

    gcloud init

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

  3. CMEK を有効にする組織またはフォルダの識別子を見つけます。

    • ORGANIZATION_ID CMEK を有効にする Google Cloud 組織の一意の数値識別子です。 フォルダに対して CMEK を構成する予定しかない場合は、この値は必要ありません。この ID を取得する方法については、組織 ID の取得をご覧ください。
    • FOLDER_ID CMEK を有効にする Google Cloud フォルダの一意の数値識別子です。組織の CMEK を構成する予定しかない場合は、この値は必要ありません。フォルダの使い方については、フォルダの作成と管理をご覧ください。
  4. 鍵の作成に必要な権限を取得するには、プロジェクトまたは親リソースの Cloud KMS 管理者roles/cloudkms.admin)IAM ロールの付与を管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。

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

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

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

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

    Cloud Logging では、任意のリージョンの鍵を使用できます。ただし、ログバケットを作成するときは、ログバケットのロケーションが鍵のロケーションと一致する必要があります。サポートされているリージョンについては、以下をご覧ください。

    このドキュメントの手順で CMEK を Logging のデフォルトのリソース設定として構成すると、組織またはフォルダに作成された新しいログバケットが CMEK 用に自動的に構成されます。また、ログバケットのロケーションは鍵のロケーションと一致する必要があるため、CMEK をデフォルトのリソース設定として構成した後、global リージョンにログバケットを作成できません。

  8. 次の Cloud KMS パラメータの値を特定します。

    • KMS_PROJECT_ID Cloud KMS を実行している Google Cloud プロジェクトの一意の英数字識別子で、Google Cloud プロジェクト名とランダムに割り当てられた番号で構成されます。この ID を取得する方法については、プロジェクトの識別をご覧ください。
    • 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

組織またはフォルダで CMEK を有効にする

前提条件の作業が完了したら、Google Cloud 組織で CMEK を有効にする手順を行います。

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

CMEK が適用される組織かフォルダに関連付けられているサービス アカウント ID を特定するには、次の gcloud logging settings describe コマンドを実行します。

フォルダ

 gcloud logging settings describe --folder=FOLDER_ID

ORGANIZATION

gcloud logging settings describe --organization=ORGANIZATION_ID

上記のコマンドを実行すると、組織またはフォルダのサービス アカウントがまだ存在しない場合は生成され、kmsServiceAccountId フィールドに ID が返されます。組織が指定されている場合の、前のコマンドに対するレスポンスの例を以下に示します。

kmsServiceAccountId: cmek-p12345@gcp-sa-logging.iam.gserviceaccount.com
name: organizations/ORGANIZATION_ID/settings

この例では、SERVICE_ACCT_NAME の値は cmek-p12345 です。

プロビジョニング プロセスを、リソースごとに 1 回だけ実行します。describe コマンドを複数回実行すると、kmsServiceAccountId フィールドと同じ値が返却されます。

Google Cloud CLI を使用できない場合は、Cloud Logging API メソッド getSettings を実行します。

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

CMEK を使用するには、サービス アカウントに Cloud KMS 暗号鍵の暗号化 / 復号のロールを割り当てて、Cloud KMS の使用権限をそのサービス アカウントに付与します。

gcloud

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

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

  • SERVICE_ACCT_NAME は、前のステップで確認した serviceAccountId 値に置き換えます。

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

コンソール

  1. Google Cloud コンソールで Cloud Key Management Service 鍵のブラウザを開きます。
    Cloud KMS 鍵のブラウザを開く
  2. 目的の鍵を含むキーリングの名前をクリックします。

  3. 使用する鍵のチェックボックスをオンにします。

    [権限] タブが有効になります。

  4. [メンバーの追加] ダイアログで、アクセス権を付与するロギング サービス アカウントのメールアドレスを指定します。

  5. [役割を選択] プルダウンで、[クラウド KMS 暗号鍵の暗号化 / 復号] を選択します。

  6. [Add(追加)] をクリックします。

組織のポリシーを構成する

Logging は、CMEK 保護を要求できる組織のポリシーをサポートし、CMEK 保護に使用できる Cloud KMS 暗号鍵を制限できます。

  • logging.googleapis.com が制約 constraints/gcp.restrictNonCmekServices のサービスの Deny ポリシーリストにある場合は、Logging が CMEK で保護されていない新しいユーザー定義バケットを作成することを拒否します。ただし、この制約により、Google Cloud プロジェクトが作成される際に作成される _Required_Default のログバケットは、Cloud Logging によって作成されます。

  • constraints/gcp.restrictCmekCryptoKeyProjects が適用されると、Logging は許可されたプロジェクト、フォルダ、または組織からの CryptKey によって保護された、CMEK で保護されたリソースを作成します。

CMEK と組織のポリシーの詳細については、CMEK の組織のポリシーをご覧ください。

CMEK 制約を指定する組織のポリシーが存在する場合は、それらの制約が組織またはフォルダに対する Logging のデフォルトのリソース設定と一致していることを確認します。さらに、デフォルトのリソース設定を変更する場合は、デフォルトのリソース設定を更新する前に、組織のポリシーを確認し、必要に応じて更新してください。

組織のポリシーを表示または構成するには、次のようにします。

  1. Google Cloud コンソールのナビゲーション パネルで [IAM と管理] を選択し、[組織のポリシー] を選択します。

    [組織のポリシー] に移動

  2. 組織を選択する。
  3. CMEK に固有の制約を確認し、必要に応じて更新します。

    組織のポリシーを変更する方法については、ポリシーの作成と編集をご覧ください。

Cloud KMS 鍵を使用して Cloud Logging を構成する

CMEK を Logging のデフォルトのリソース設定として構成するには、次の gcloud logging settings update コマンドを実行します。

フォルダ

gcloud logging settings update \
    --folder=FOLDER_ID \
    --kms-location=KMS_KEY_LOCATION \
    --kms-key-name=KMS_KEY_NAME \
    --kms-keyring=KMS_KEY_RING \
    --kms-project=KMS_PROJECT_ID

上記のコマンドは、デフォルトのリソース設定を更新して、Cloud KMS 鍵に関する情報を保存します。フォルダのデフォルトのストレージ ロケーションKMS_KEY_LOCATION の値に設定されていることを確認する必要があります。デフォルトのストレージ ロケーションを設定していない場合、またはロケーションの値が KMS_KEY_LOCATION の値と一致しない場合は、前のコマンドに以下を追加します。

--storage-location = KMS_KEY_LOCATION

--storage-location フラグを使用すると、フォルダのデフォルトのストレージ ロケーションを設定または更新できます。

ORGANIZATION

gcloud logging settings update \
    --organization=ORGANIZATION_ID \
    --kms-location=KMS_KEY_LOCATION \
    --kms-key-name=KMS_KEY_NAME \
    --kms-keyring=KMS_KEY_RING \
    --kms-project=KMS_PROJECT_ID

上記のコマンドは、デフォルトのリソース設定を更新して、Cloud KMS 鍵に関する情報を保存します。組織のデフォルトのストレージ ロケーションKMS_KEY_LOCATION の値に設定されていることを確認する必要があります。デフォルトのストレージ ロケーションを設定していない場合、またはロケーションの値が KMS_KEY_LOCATION の値と一致しない場合は、前のコマンドに以下を追加します。

--storage-location = KMS_KEY_LOCATION

--storage-location フラグを使用すると、組織のデフォルトのストレージ ロケーションを設定または更新できます。

鍵が適用されると、組織またはフォルダ内の新しいログバケットが、この鍵を使用して保存データを暗号化するように構成されます。個別のログバケットの鍵を変更することもできます。global リージョンにログバケットを作成することはできません。これは、リージョンがデータのリージョン スコープと一致する鍵を使用する必要があるためです。

Google Cloud CLI を使用できない場合は、Cloud Logging API メソッド updateSettings を実行します。

鍵の有効化を確認する

組織またはフォルダで CMEK が正常に有効化されたことを確認するには、次の gcloud logging settings describe コマンドを実行します。

フォルダ

gcloud logging settings describe --folder=FOLDER_ID

ORGANIZATION

gcloud logging settings describe --organization=ORGANIZATION_ID

上記のコマンドは、Cloud KMS 鍵名を返します。

kmsKeyName: KMS_KEY_NAME
kmsServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com

kmsKeyName フィールドに値が入力されると、組織またはフォルダに対して CMEK が有効になります。

サポートされている宛先にログをルーティングする

  • CMEK を使用してデータを暗号化するように Cloud Logging ログバケットを構成できます。組織またはフォルダのデフォルトのリソース設定として CMEK を構成すると、組織またはフォルダの新しいログバケットは自動的に CMEK を使用します。これらのログバケットの鍵を変更でき、デフォルトのリソース設定で指定された KMS 鍵と異なるものを使用するログバケットを作成できます。

    ログバケットで CMEK を有効にする場合に鍵と制限を変更する方法を含む、ログバケットに適用される CMEK の詳細については、ログバケットに CMEK を構成するをご覧ください。

  • Cloud Storage では、ログのルーティングに CMEK がサポートされています。Cloud Storage の CMEK を構成する手順については、顧客管理の暗号鍵の使用をご覧ください。

    ログデータの Cloud Storage へのルーティング時に鍵が使用できないためにデータが失われる場合は、ログがログバケットにも保管されていれば、それらのログを遡って一括で Cloud Storage にコピーできます。詳細については、ログエントリのコピーをご覧ください。

  • BigQuery では、お客様のコンテンツを保存時に暗号化するのがデフォルトの動作です。詳細については、Cloud Key Management Service 鍵によるデータの保護をご覧ください。

  • Pub/Sub はデフォルトで、保存されている顧客コンテンツを暗号化します。詳細については、メッセージ暗号化の構成をご覧ください。

Cloud KMS 鍵を管理する

以降のセクションでは、Cloud KMS 鍵の変更、アクセス権の取り消し、無効化の方法について説明します。

Cloud KMS 鍵を変更する

組織またはフォルダに関連付けられた Cloud KMS 鍵を変更するには、鍵を作成し、新しい Cloud KMS 鍵名で CMEK 設定を更新します。

フォルダ

gcloud logging settings update \
    --folder=FOLDER_ID
    --kms-key-name=NEW_KMS_KEY_NAME
    --kms-location=NEW_KMS_KEY_LOCATION \
    --kms-keyring=NEW_KMS_KEY_RING \
    --kms-project=NEW_KMS_PROJECT_ID

フォルダのデフォルトのストレージ ロケーションKMS_KEY_LOCATION の値に設定されていることを確認する必要があります。デフォルトのストレージ ロケーションを設定していない場合、またはロケーションの値が KMS_KEY_LOCATION の値と一致しない場合は、前のコマンドに以下を追加します。

--storage-location = NEW_KMS_KEY_LOCATION

ORGANIZATION

gcloud logging settings update \
    --organization=ORGANIZATION_ID
    --kms-key-name=NEW_KMS_KEY_NAME
    --kms-location=NEW_KMS_KEY_LOCATION \
    --kms-keyring=NEW_KMS_KEY_RING \
    --kms-project=NEW_KMS_PROJECT_ID

組織のデフォルトのストレージ ロケーションKMS_KEY_LOCATION の値に設定されていることを確認する必要があります。デフォルトのストレージ ロケーションを設定していない場合、またはロケーションの値が KMS_KEY_LOCATION の値と一致しない場合は、前のコマンドに以下を追加します。

--storage-location = NEW_KMS_KEY_LOCATION

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

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

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

Logging の Cloud KMS 鍵へのアクセス権を取り消すには、次の Google Cloud CLI コマンドを実行します。

gcloud kms keys remove-iam-policy-binding \
    --project=KMS_PROJECT_ID \
    --member serviceAccount: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 を無効にする

組織またはフォルダで CMEK を無効にすると、将来のオペレーションに対してのみ CMEK ポリシーの適用が削除されます。以前に適用した構成はそのまま残ります。

CMEK がデフォルトのリソース設定として構成されているリソースで CMEK を無効にするには、次の Google Cloud CLI コマンドを実行します。

フォルダ

gcloud logging settings update --folder=FOLDER_ID --clear-kms-key

ORGANIZATION

gcloud logging settings update --organization=ORGANIZATION_ID --clear-kms-key

鍵を破棄する場合は、鍵バージョンの破棄と復元をご覧ください。

Cloud KMS 鍵のローテーションに関する考慮事項

Google Cloud 組織またはフォルダに関連付けられた Cloud KMS 鍵がローテーションされても、Cloud Logging は一時的な障害復旧ファイルの暗号鍵を自動的にローテーションしません。既存のリカバリ ファイルでは引き続き、作成時に使用された鍵バージョンが使用されます。新しいリカバリ ファイルでは、現在の、メインの鍵バージョンが使用されます。

制限事項

CMEK を Logging のデフォルトのリソース設定として構成する場合の既知の制限事項は以下の通りです。

障害復旧ファイルの使用不能

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

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

Logging の Cloud KMS 鍵へのアクセス権が失われると、Logging は一時的な障害復旧ファイルに書き込めなくなり、ユーザーに対してクエリが機能しなくなります。鍵へのアクセスが復元されても、クエリのパフォーマンスが低下する可能性があります。

Logging はルーティングを容易にするために必要な一時ファイルを書き込むことができないため、Cloud Storage へのルーティングも影響を受ける可能性があります。データの暗号化や復号中にエラーが発生すると、Cloud KMS 鍵を含む Google Cloud プロジェクトに通知が送信されます。

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

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

Cloud EKM 鍵が使用できないことによる低下

Cloud EKM 鍵を使用する場合、Google は外部の鍵管理パートナー システム内の外部管理鍵の可用性をコントロールできません。

CMEK が組織またはフォルダのデフォルトのリソース設定として構成されている場合、外部管理された鍵が使用できない場合、Cloud Logging はその鍵へのアクセスを継続的に再試行します。また、Cloud Logging は、受信ログデータを最長 1 時間バッファリングすることもします。1 時間経っても Cloud Logging が外部管理の鍵にアクセスできない場合、Cloud Logging はデータの削除を開始します。

CMEK がログバケットに適用され、外部で管理する鍵が使用できない場合、Cloud Logging はログにログの保存を継続しますが、ユーザーはそのデータにアクセスできません。

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

ログバケットに関する制限

ログバケットで CMEK を使用する場合の制限事項については、制限事項をご覧ください。

割り当て

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

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

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