Cloud Logging の CMEK を構成する

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

組織とフォルダにデフォルト設定を構成できます。新しいリソースを作成すると、そのリソースは親のデフォルト設定を継承します。たとえば、CMEK を組織のデフォルトのリソース設定として構成すると、その組織内のプロジェクト、フォルダ、または請求先アカウントで作成される新しい _Default ログバケットと _Required ログバケットは、デフォルトの鍵で暗号化されます。さらに、その組織の子プロジェクトにカスタム ログバケットを作成する場合、ログバケットの作成時に別の鍵を指定しないかぎり、デフォルトの鍵が自動的に使用されます。

このガイドの手順では、Google Cloud CLI を使用します。

概要

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

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

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

Logging のデフォルトのリソース設定として CMEK を構成すると、次のようになります。

  • 組織またはフォルダの新しいログバケットは、構成された鍵で自動的に暗号化されます。ただし、その鍵を変更することも、ログバケットを作成して異なる鍵を指定することもできます。詳細については、ログバケット用の CMEK を構成するをご覧ください。
  • ログ分析を使用して複数のログバケットに対してクエリを実行する場合、デフォルトの鍵が一時データの暗号化に使用されることがあります。詳細については、ログ分析の概要をご覧ください。

始める前に

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

  1. CMEK を有効にしてログバケットを作成する前に、制限事項を確認してください。

  2. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  3. 鍵を作成する Google Cloud プロジェクトを構成します。

    1. 鍵の作成に必要な権限を取得するには、プロジェクトの Cloud KMS 管理者 roles/cloudkms.admin)の IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

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

    2. Cloud KMS API を有効化します。

    3. キーリングと鍵を作成します。

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

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

  4. デフォルト設定を構成する組織またはフォルダの IAM ロールに、次の Cloud Logging 権限が含まれていることを確認します。

    • logging.settings.get
    • logging.settings.update

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

Google Cloud フォルダまたは組織で CMEK を有効にするには、次の手順を行います。

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

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

フォルダ

 gcloud logging settings describe --folder=FOLDER_ID

前のコマンドを実行する前に、次のように置き換えます。

組織

gcloud logging settings describe --organization=ORGANIZATION_ID

前のコマンドを実行する前に、次のように置き換えます。

  • ORGANIZATION_ID: 組織の一意の数値識別子。この ID を取得する方法については、組織 ID の取得をご覧ください。

上記のコマンドは、組織またはフォルダのサービス アカウントが存在しない場合に生成します。このコマンドでは、2 つのサービス アカウントの ID も返されます。1 つは kmsServiceAccountId フィールドに、もう 1 つは loggingServiceAccountId フィールドに返されます。CMEK をデフォルト設定として構成するには、kmsServiceAccountId フィールドの値を使用します。

組織が指定されている場合の、前のコマンドに対するレスポンスの例を以下に示します。

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

プロビジョニング プロセスをリソースごとに 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: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_PROJECT_ID: Cloud KMS を実行している Google Cloud プロジェクトの一意の英数字識別子で、Google Cloud プロジェクト名とランダムに割り当てられた番号で構成されます。この ID を取得する方法については、プロジェクトの識別をご覧ください。
  • KMS_SERVICE_ACCT_NAME: gcloud logging settings describe コマンドのレスポンスの kmsServiceAccountId フィールドに表示されるサービス アカウントの名前。
  • KMS_KEY_LOCATION: Cloud KMS 鍵のリージョン。
  • KMS_KEY_RING: Cloud KMS キーリングの名前。
  • KMS_KEY_NAME: Cloud KMS 鍵の名前。次のような形式になります。projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY

Console

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

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

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

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

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

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

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

Logging では、CMEK による保護を必須にし、CMEK 保護に使用できる Cloud KMS CryptoKey を制限でき組織のポリシーがサポートされています。

  • 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

次のコマンドを実行する前に、次のように置き換えます。

  • FOLDER_ID: フォルダの一意の数値 ID。フォルダの使用方法については、フォルダの作成と管理をご覧ください。
  • KMS_KEY_LOCATION: Cloud KMS 鍵のリージョン。
  • KMS_KEY_NAME: Cloud KMS 鍵の名前。次のような形式になります。projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
  • KMS_KEY_RING: Cloud KMS キーリングの名前。
  • KMS_PROJECT_ID: Cloud KMS を実行している Google Cloud プロジェクトの一意の英数字識別子で、Google Cloud プロジェクト名とランダムに割り当てられた番号で構成されます。この ID を取得する方法については、プロジェクトの識別をご覧ください。

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

--storage-location = KMS_KEY_LOCATION

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

組織

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

次のコマンドを実行する前に、次のように置き換えます。

  • ORGANIZATION_ID: 組織の一意の数値識別子。この ID を取得する方法については、組織 ID の取得をご覧ください。
  • KMS_KEY_LOCATION: Cloud KMS 鍵のリージョン。
  • KMS_KEY_NAME: Cloud KMS 鍵の名前。次のような形式になります。projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
  • KMS_KEY_RING: Cloud KMS キーリングの名前。
  • KMS_PROJECT_ID: Cloud KMS を実行している Google Cloud プロジェクトの一意の英数字識別子で、Google Cloud プロジェクト名とランダムに割り当てられた番号で構成されます。この 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

前のコマンドを実行する前に、次のように置き換えます。

組織

gcloud logging settings describe --organization=ORGANIZATION_ID

前のコマンドを実行する前に、次のように置き換えます。

  • ORGANIZATION_ID: 組織の一意の数値識別子。この ID を取得する方法については、組織 ID の取得をご覧ください。

上記のコマンドで kmsKeyName フィールドに Cloud KMS 鍵名が返された場合、組織またはフォルダで CMEK が有効になっています。

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

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

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

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

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

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

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

Cloud KMS 鍵を管理する

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

Cloud KMS 鍵を変更する

組織またはフォルダに関連付けられた Cloud KMS 鍵を変更するには、鍵を作成し、gcloud logging settings update コマンドを実行して、新しい Cloud KMS 鍵に関する情報を指定します。

フォルダ

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 時間ほどかかる場合があります。

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

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

次のコマンドを実行する前に、次のように置き換えます。

  • KMS_PROJECT_ID: Cloud KMS を実行している Google Cloud プロジェクトの一意の英数字識別子で、Google Cloud プロジェクト名とランダムに割り当てられた番号で構成されます。この ID を取得する方法については、プロジェクトの識別をご覧ください。
  • KMS_SERVICE_ACCT_NAME: gcloud logging settings describe コマンドのレスポンスの kmsServiceAccountId フィールドに表示されるサービス アカウントの名前。
  • KMS_KEY_LOCATION: Cloud KMS 鍵のリージョン。
  • KMS_KEY_RING: Cloud KMS キーリングの名前。
  • KMS_KEY_NAME: Cloud KMS 鍵の名前。次のような形式になります。projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY

CMEK を無効にする

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

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

フォルダ

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

前のコマンドを実行する前に、次のように置き換えます。

組織

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

前のコマンドを実行する前に、次のように置き換えます。

  • ORGANIZATION_ID: 組織の一意の数値識別子。この ID を取得する方法については、組織 ID の取得をご覧ください。

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

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

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

制限事項

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

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

Cloud KMS 鍵は、次の両方の条件が満たされている場合に、Logging で使用でき、アクセス可能とみなされます。

  • その鍵が有効になっている。
  • gcloud logging settings describe コマンドのレスポンスの kmsServiceAccountId フィールドにリストされているサービス アカウントには、鍵に対する暗号化と復号の権限があります。

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 とデフォルトの設定エラーのトラブルシューティングをご覧ください。