ログルーター データを保護する鍵を管理します

このページでは、ログルーターの顧客管理の暗号鍵(CMEK)を組織のコンプライアンスのニーズを満たすように構成および管理する方法について説明します。

ログルーターの CMEK は、Google Cloud 組織レベルで構成されます。Google Cloud 組織に含まれるすべての Cloud プロジェクトとフォルダに適用されます。

概要

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

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

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

現在、Cloud Logging に保存されているログに CMEK を使用することはできませんが、ログルーターで使用される一時的な災害復旧ファイルと、ログを Cloud Storage にルーティングする際に使用する一時ファイルの両方を保護するために CMEK を使用することができます。

前提条件

ログルーターで CMEK の有効化を開始するには、次の手順を行います。

  1. Cloud SDK をインストールして初期化します。

    このガイドでは、Cloud SDK を使用してインストールされる gcloud コマンドライン ツールの使用方法について説明します。

  2. CMEK を有効にする組織を特定します。

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

    Cloud プロジェクトを含む Google Cloud 組織が、logging.cmekSettings.{get,update} 権限を持つ IAM ロールを付与していることを確認します。必要な権限が含まれているログ構成書き込みのロールを付与されている状態を推奨します。

  4. Cloud KMS を実行する Google Cloud プロジェクトに対して Cloud KMS API を有効にします

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

    ログルーターを使用すると、1 つの組織が複数のリージョンにデータを転送できるため、任意のリージョンの鍵を使用できます。組織内のすべてのデータまたは大部分のデータが 1 つのリージョンに制限されている場合は、リージョンがデータのリージョン スコープと一致する鍵を使用することをおすすめします。

  6. 以下の必須パラメータを特定します。このページのサンプルでは、Google Cloud リソースのメタデータを示すために、以下の変数が使用されています。

    • ORGANIZATION_ID CMEK を有効にする Google Cloud 組織の一意の数値識別子です。
    • KMS_PROJECT_ID Cloud KMS を実行しているプロジェクトの一意の英数字識別子で、プロジェクト名とランダムに割り当てられた番号で構成されます。
    • KMS_KEY_NAME Cloud KMS 鍵のリソース名です。次のような形式になります。projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY

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

組織の CMEK を有効にする

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

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

組織レベルで CMEK を構成するには、CMEK が適用される組織に関連付けられたサービス アカウント ID を取得する必要があります。次のコマンドを実行します。

API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を設定します。

  2. GET リクエストを発行して、CMEK を有効にする Google Cloud 組織に関連付けられているサービス アカウント ID を取得します。

     curl -H "Authorization: Bearer AUTH_TOKEN" \
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings
    

gcloud

gcloud logging cmek-settings describe --organization=ORGANIZATION_ID

このコマンドを実行すると、組織のサービス アカウントがまだ存在しない場合は生成され、serviceAccountId フィールドに ID が返されます。

serviceAccountId: "SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com"

このプロビジョニング プロセスは、リソースごとに 1 回だけ実行する必要があります。このコマンドを複数回実行すると、serviceAccountId フィールドに同じ値が返されます。

暗号化 / 復号の役割を割り当てる

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

API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を設定します。 手順については、API 認証をご覧ください。
  2. 次の情報が含まれる JSON ファイルを作成します。

    {
      "policy": {
        "bindings": {
          "role": "roles/cloudkms.cryptoKeyEncrypterDecrypter",
          "members": "serviceAccount:SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com"
        },
      }
    }
  3. cURL を使用して、POST setIamPolicy リクエストで Cloud KMS API を呼び出します。

    curl -X POST --data-binary @JSON_FILE_NAME.json \
    -H "Authorization: Bearer OAUTH2_TOKEN" \
    -H "Content-Type: application/json" \
    "https://cloudkms.googleapis.com/v1/KEY_RESOURCE:setIamPolicy"

gcloud

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

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

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

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

    • KMS_PROJECT_ID は、Cloud KMS を実行している Cloud プロジェクトの ID に置き換えます。
    • KMS_KEY_LOCATION は、Cloud KMS 鍵のリージョンに置き換えます。
    • KMS_KEY_RING は、Cloud KMS キーリングの名前に置き換えます。
    • KMS_KEY は、Cloud KMS 鍵の名前に置き換えます。

Console

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

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

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

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

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

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

Cloud KMS 鍵を構成する

CMEK の有効化を終了するには、Cloud KMS 鍵名を組織に追加します。次のコマンドを実行します。

API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。

  2. 次の情報が含まれる JSON ファイルを作成します。

    {
        "kms_key_name": "KMS_KEY_NAME"
    }
    
  3. PATCH リクエストを発行して、CMEK を有効にする Google Cloud 組織に関連付けるように kms_key_name を更新します。

    curl -X PATCH \
        -H "Authorization: Bearer AUTH_TOKEN \
        -H "Content-Type: application/json" \
        --data-binary @JSON_FILE_NAME
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings?update_mask="kms_key_name"
    

gcloud

gcloud logging cmek-settings update \
    --organization=ORGANIZATION_ID --kms-key-name=KMS_KEY_NAME

鍵の有効化を確認する

組織の CMEK が正常に有効になっていることを確認するには、次のコマンドを実行します。

API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を設定します。

  2. GET リクエストを発行して、キーの有効化を確認する Google Cloud 組織に関連付けられた CMEK 設定を取得します。

     curl -H "Authorization: Bearer AUTH_TOKEN" \
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings
    
    {
        "kmsKeyName": "KMS_KEY_NAME",
        "serviceAccountId": "SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com"
    }
    

gcloud

gcloud logging cmek-settings describe --organization=ORGANIZATION_ID

このコマンドを実行すると、Cloud KMS の鍵の名前が返されます。

kmsKeyName: KMS_KEY_NAME
serviceAccountId: SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com

kmsKeyName フィールドに値が入力されると、組織で CMEK が有効になります。

Cloud KMS 鍵を管理する

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

Cloud KMS 鍵を変更する

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

次のコマンドを実行します。

API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。

  2. 次の情報が含まれる JSON ファイルを作成します。

    {
        "kms_key_name": "NEW_KMS_KEY_NAME"
    }
    
  3. 次のように PATCH リクエストを発行して kms_key_name を更新します。

    curl -X PATCH \
        -H "Authorization: Bearer AUTH_TOKEN \
        -H "Content-Type: application/json" \
        --data-binary @JSON_FILE_NAME
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings?update_mask="kms_key_name"
    

gcloud

gcloud logging cmek-settings update \
    --organization=ORGANIZATION_ID
    --kms-key-name=NEW_KMS_KEY_NAME

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

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

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

次のコマンドを実行します。

API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。

  2. 次の情報が含まれる JSON ファイルを作成します。

    revoke.json:
    {
      "policy": {
        "bindings": {
          "role": "roles/cloudkms.cryptoKeyEncrypterDecrypter",
          "members":
        },
      }
    }
    
  3. POST リクエストを発行します。

    curl -X POST --data-binary @revoke.json -H "Authorization: Bearer
    ${OAUTH_TOKEN}" -H "Content-Type: application/json"
    "https://cloudkms.googleapis.com/v1/{$KEY}:setIamPolicy"
    

gcloud

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

組織の CMEK を無効にする

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

組織の CMEK を無効にするには、次のコマンドを実行します。

API

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。

  2. 次の情報が含まれる JSON ファイルを作成します。

    {
        "kms_key_name": ""
    }
    
  3. 次のように PATCH リクエストを発行して kms_key_name を更新します。

    curl -X PATCH \
        -H "Authorization: Bearer AUTH_TOKEN \
        -H "Content-Type: application/json" \
        --data-binary @JSON_FILE_NAME
        https://logging.googleapis.com/v2/organizations/ORGANIZATION_ID/cmekSettings?update_mask="kms_key_name"
    

gcloud

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

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

Cloud KMS 鍵のローテーションによる影響

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

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

ログシンクを使用して、サポートされている宛先にログをルーティングする場合は、次の点を考慮してください。

  • Cloud Storage では、ログのルーティングに CMEK がサポートされています。このページの手順に従って、データを適切に暗号化してください。詳細については、顧客管理の暗号鍵の使用をご覧ください。

    Cloud Storage にログデータをルーティングするときに、鍵が使用できないためにデータが失われる場合は、過去にさかのぼってログを Cloud Storage に一括でコピーできます。詳細については、ログエントリのコピーをご覧ください。

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

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

外部の主な考慮事項

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

外部で管理されている鍵を利用できない場合、Cloud Logging は鍵へのアクセスを再試行し、受信したログデータを最長 1 時間バッファリングします。1 時間経っても Cloud Logging が外部管理の鍵にアクセスできない場合、Cloud Logging はデータの削除を開始します。

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

制限事項

ログルーター用の CMEK に関する既知の制限事項は以下の通りです。

組織レベルの構成のみ

現在、ログルーター用の CMEK は Google Cloud 組織に対してのみ構成できます。構成が完了すると、CMEK は Google Cloud 組織内のすべての Cloud プロジェクトとフォルダに伝播されます。

Cloud Logging ストレージの CMEK はサポートされていません

CMEK は、Cloud Logging に保存されているログに対してはサポートされません。CMEK を使用して、ログルーターで使用される一時的な障害復旧ファイルと、ログを Cloud Storage にルーティングするときに使用される一時ファイルを保護できます。

ログエントリが Cloud Logging ストレージに書き込まれないようにするには、除外フィルタを使用してシンクを作成します。

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

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

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

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

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

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

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

割り当て

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

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

以下のセクションでは、一般的な CMEK の構成エラーを検出して軽減する方法について説明します。

CMEK を構成すると、Cloud KMS 鍵を含む Cloud プロジェクトに対して、関連する問題について通知されます。たとえば、KMS_KEY_NAME が無効になっていると、関連するサービス アカウントに必要な Cloud Key Management Service 暗号鍵の暗号化 / 復号のロールが付与されていない、または鍵へのアクセス権が無効になっている場合に更新は失敗します。

構成エラーを特定する

CMEK の構成エラーを検索して表示する方法は次のとおりです。

  1. Google Cloud Console に移動します。

    Google Cloud Console に移動

  2. 暗号鍵を含むCloud プロジェクトを選択します。

    プロジェクト ID を確認するには、次の コマンドを実行します。

    gcloud logging cmek-settings describe --organization=ORGANIZATION_ID
    
    

    このコマンドを実行すると、次の出力が返されます。

     kmsKeyName: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEYRING/cryptoKeys/KEY
     serviceAccountId: SERVICE_ACCOUNT_ID@gcp-sa-logging.iam.gserviceaccount.com
     

    kmsKeyName フィールドの値には、鍵のプロジェクト ID が含まれます。

  3. Cloud Console で [アクティビティ] タブを選択します。

  4. Cloud Logging の Cloud Logging CMEK Configuration Error 通知を確認します。

    それぞれのエラー通知に、問題を軽減するために実行できる手順が記載されています。

    エラー 推奨
    暗号鍵に対するアクセスが拒否されました Cloud プロジェクトに関連付けられている Logging サービス アカウントに、指定した Cloud KMS 鍵を操作するための十分な IAM 権限がありません。エラーまたは暗号化 / 復号の権限を付与するの手順に沿って、適切な IAM 権限を付与してください。
    暗号鍵が無効になっています 指定された Cloud KMS 鍵は無効になりました。エラーの指示に従って鍵を再度有効にしてください。
    暗号鍵が破棄されました 指定された Cloud KMS 鍵は破棄されました。エラーまたは Cloud KMS 鍵を構成するの手順に沿って、別の鍵を使用して CMEK 暗号化を構成します。

鍵の有用性の確認

鍵の有用性を確認するために、次のコマンドを実行して、すべての鍵を一覧表示します。

gcloud kms keys list \
--location=KMS_KEY_LOCATION \
--keyring=KMS_KEY_RING

このコマンドは、各鍵に関する情報を表形式で返します。出力の最初の行は、列名のリストです。

NAME PURPOSE ...

コマンドの出力で Cloud KMS Key がENABLEDとして有効とリストされていること、および鍵の目的が対称暗号化(PURPOSE 列には ENCRYPT_DECRYPT を、PRIMARY_STATE 列には ENABLED を含む)であることを確認します。

必要に応じて、新しい鍵を作成します

アクセス権の構成の確認

組織の CMEK 設定に関連付けられているサービス アカウントには、構成された鍵に対する Cloud KMS CryptoKeyの暗号化/復号の役割が必要です。

鍵の IAM ポリシーを一覧表示するには、次のコマンドを実行します。

gcloud kms keys get-iam-policy KMS_KEY_NAME

必要に応じて、Cloud KMS CryptoKeyの暗号化/復号のロールを含むサービス アカウントを鍵に追加します。