ログルーターの顧客管理の暗号鍵の有効化

このページでは、コンプライアンスのニーズを満たすために Cloud Logging のログルーターの顧客管理の暗号鍵(CMEK)を有効にする方法について説明します。この場合、Google がデータを保護する暗号鍵を管理するのではなく、ユーザーが Cloud Key Management Service で暗号鍵を作成、制御、管理します。

暗号化オプションの概要については、保存データの暗号化をご覧ください。

ログルーターの CMEK

CMEK で、保存データの暗号化に使用する鍵を制御できます。次の Google Cloud の組織の要件を満たすために使用できます。

  • コンプライアンスと内部統制: Google Cloud プロダクトに保存されている機密データや規制対象データを管理する際に、CMEK を使用できます。こうした管理は通常、内部コンプライアンス手順として文書化されています。規制当局に開示されるもので、変更するのは難しい場合があります。

  • 高度な暗号化: Google のデフォルトの保存データの暗号化で提供されない高度な暗号化要件(キーの高速削除など)が課せられている場合があります。Cloud KMS との統合により、これらの要件を満たすことができます。

  • 規制要件: 政府の規制(輸出管理規制(EAR)など)により、機密資料を管理する必要がある場合があります。

保存データの暗号化は、ログルーターを含め、Google Cloud サービス全体ですでに提供されています。現在 CMEK を Cloud Logging に保存されているログで使用はできませんが、CMEK を使用して Logs ルーターで使用される一時的な障害復旧ファイルや、Cloud Storage へのエクスポート中に使用される一時ファイルを保護できます。詳細については、制限事項をご覧ください。

ログルーターの説明については、概要をご覧ください。

スタートガイド

  1. Cloud KMS を実行する Google Cloud プロジェクトを作成または特定します。
  2. Cloud KMS を実行する Google Cloud プロジェクトに対して Cloud KMS API を有効にします。
  3. Cloud KMS を実行する Google Cloud プロジェクトのキーリングと鍵を作成します。

    鍵のリージョン スコープを、データのリージョン スコープと一致させる必要があるので注意してください。Cloud KMS のロケーションには、利用可能なリージョンが一覧表示されます。

  4. 以下の必須パラメータを特定します。このページのサンプルでは、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 の取得ご覧ください。

組織の CMEK を有効にする

始めにの手順を完了したら、Google Cloud 組織で CMEK を有効にする手順を行います。

暗号化と復号の権限を付与する

適切なサービス アカウント ID を決定し、サービス アカウントに Cloud KMS 鍵の使用許可を付与します。

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

REST API

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

  2. GET リクエストを発行して、CMEK を有効にする Google Cloud 組織に関連付けられている serviceAccountId を取得します。

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

gcloud

CMEK を有効にする Google Cloud 組織に関連付けられている serviceAccountId を取得するには、次の gcloud コマンドを実行します。

gcloud alpha logging cmek-settings describe --organization=[ORGANIZATION_ID]

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

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

CMEK を使用するには、サービス アカウントに Cloud KMS CryptoKey Encrypter/Decrypter 役割を割り当てて、Cloud KMS の使用権限をそのサービス アカウントに付与します。

REST API

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

[KMS_PROJECT_ID] は、Cloud KMS を実行している Google Cloud プロジェクトの ID で置き換えます。[KMS_KEY_LOCATION][KMS_KEY_RING][KMS_KEY_RING][KMS_KEY] は、クラウド KMS 鍵のロケーション、キーリング、鍵名に置き換えます。

Console

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

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

    右側のウィンドウの [権限] タブが有効になります。

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

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

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

Cloud KMS 鍵を構成する

Google Cloud 組織の CMEK 設定を Cloud KMS 鍵名で更新し、組織でこの機能を有効にします。

[KMS_KEY_NAME] が無効な場合、関連するサービス アカウントに必要な暗号化、復号のロールがない場合、キーへのアクセスが無効になっている場合には、この更新が失敗します。

REST 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 コマンドを実行します。

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

鍵の有効化を確認する

Google Cloud 組織の CMEK 設定を Cloud KMS 鍵名で更新し、組織で CMEK が有効になっていることを確認します。

REST API

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

  2. GET リクエストを発行して、キーの有効化を確認する Google Cloud 組織に関連付けられた CMEK 設定を取得します。kms_key_name を入力すると、組織で 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 コマンドを実行して、キーの使用可能性を確認する Google Cloud 組織に関連付けられた CMEK 設定を取得します。kmsKeyName を入力すると、組織で CMEK が有効になります。

gcloud alpha logging cmek-settings describe --organization=[ORGANIZATION_ID]

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

Cloud KMS 鍵を管理する

Cloud KMS 鍵の変更、アクセス取り消し、削除の方法について説明します。

Cloud KMS 鍵を変更する

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

REST 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 コマンドを実行します。

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

[KMS_KEY_NAME] が無効な場合、関連するサービス アカウントに必要な暗号化、復号のロールがない場合、キーへのアクセスが無効になっている場合には、この更新が失敗します。

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

Logging の Cloud KMS 鍵へのアクセス権は、その鍵に対する Cloud IAM 権限を取り消すことでいつでも削除できます。

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

REST 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 コマンドを実行します。

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 を無効にする

REST 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 コマンドを実行して、CMEK を無効にする組織に関連付けられている serviceAccountId を更新します。

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

[KMS_KEY_NAME] が無効な場合、関連するサービス アカウントに必要な暗号化、復号のロールがない場合、キーへのアクセスが無効になっている場合には、この更新が失敗します。

鍵の破棄の手順については、鍵バージョンの破棄と復元をご覧ください。

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

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

エクスポート用 CMEK

ログシンクを使用して別の宛先にログをエクスポートする場合、宛先に保存されているデータを保護するために CMEK を適切に構成する必要があります。

宛先が CMEK 暗号化されている場合には、Cloud Storage のログ エクスポート用 CMEK が使用できます。詳細については、顧客管理の暗号鍵の使用をご覧ください。

残り 2 つの Logging シンクの宛先(BigQuery と Pub/Sub)の場合、Cloud Logging でエクスポートされたデータを保護するための CMEK はまだ使用できません。

制限事項

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

組織レベルの構成のみ

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

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

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

ログエントリが Cloud Logging ストレージに書き込まれないようにするには、そのエントリを除外します。手順については、除外クエリの使用をご覧ください。

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

Logging の Cloud KMS 鍵へのアクセス権が失われると、ユーザー エクスペリエンスが大幅に低下し、データが失われる可能性があります。これらの CMEK で保護された一時的な障害復旧ファイルのデータと、Cloud Storage へのエクスポートに使用される一時ファイルのデータにはアクセスできなくなります。

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

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

Cloud KMS 鍵が使用不能になると、ログルーターは一時的な障害復旧ファイルを書き込めなくなります。この期間中に処理されたデータに、障害復旧ファイルは使用できません。

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

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

Logging のクライアント ライブラリは、CMEK を構成するコマンドをサポートしていません。

料金

Logging の使用量の上限について詳しくは、割り当てと上限をご覧ください。発生する可能性のある費用の詳細については、料金をご覧ください。

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

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

構成エラーを特定する

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

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

    Google Cloud Console に移動

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

    プロジェクト ID は次の gcloud コマンドで確認できます。

    gcloud alpha 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
    

    コマンドの出力の Cloud KMS 鍵のフルネームには、kmsKeyName フィールドのプロジェクト ID が含まれています。

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

  4. 選択したプロジェクトの Cloud Logging の Stackdriver Logging CMEK Configuration Error 通知を確認します。

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

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

問題を解決するには、エラーの通知メッセージに記載されている手順に従ってください。

鍵の有用性の確認

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

    gcloud kms keys list 
--location=[KMS_KEY_LOCATION]
--keyring=[KMS_KEY_RING]

NAME    PURPOSE   ALGORITHM   PROTECTION_LEVEL  LABELS  PRIMARY_ID  PRIMARY_STATE
<var>[KMS_KEY_NAME]</var>  ENCRYPT_DECRYPT  GOOGLE_SYMMETRIC_ENCRYPTION  SOFTWARE  1  ENABLED

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

必要に応じて、新しい鍵を作成します。手順は上記のセクションをご覧ください。

アクセス権の構成の確認

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

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

    gcloud kms keys get-iam-policy [KMS_KEY_NAME]
   

必要に応じて、Cloud KMS CryptoKey Encrypter/Decrypter Cloud IAM 役割を含むサービス アカウントを鍵に追加します。