顧客管理の暗号鍵(CMEK)を使用する

デフォルトでは、Eventarc はお客様のコンテンツを保存時に暗号化します。暗号化は Eventarc が行うため、ユーザー側での操作は必要ありません。このオプションは、Google のデフォルトの暗号化と呼ばれます。

暗号鍵を管理する場合は、Cloud KMS の顧客管理の暗号鍵(CMEK)を、Eventarc などの CMEK 統合サービスで使用できます。Cloud KMS 鍵を使用すると、保護レベル、ロケーション、ローテーション スケジュール、使用とアクセスの権限、暗号境界を制御できます。Cloud KMS を使用すると、監査ログを表示し、鍵のライフサイクルを管理することもできます。データを保護する対称鍵暗号鍵(KEK)は Google が所有して管理するのではなく、ユーザーが Cloud KMS でこれらの鍵の制御と管理を行います。

CMEK を使用してリソースを設定した後は、Eventarc リソースへのアクセスは、Google のデフォルトの暗号化を使用する場合と同様です。暗号化オプションの詳細については、顧客管理の暗号鍵(CMEK)をご覧ください。

顧客管理の暗号鍵は、ソフトウェア鍵として Cloud HSM クラスタに保存されるか、Cloud External Key Manager を使用して外部で保存されます。

CMEK による保護対象

次の Eventarc Advanced リソースを通過するイベント メッセージを暗号化するように CMEK を構成できます。

  • MessageBus - Eventarc Advanced バス
  • Pipeline - Eventarc Advanced パイプライン
  • GoogleApiSource - 特定のバスに対する Google API イベントのサブスクリプションを表す Eventarc Advanced リソース

詳細については、Eventarc Advanced の概要をご覧ください。

リソースで CMEK を有効にすると、本人だけがアクセスできる暗号鍵を使用して、そのリージョンのリソースに関連付けられたデータが保護されます。

Cloud KMS と Eventarc はリージョン サービスです。Cloud KMS 鍵と保護された Eventarc Advanced リソースのリージョンは同じにする必要があります。

始める前に

Eventarc でこの機能を使用する前に、次の操作を行う必要があります。

コンソール

  1. Enable the Cloud KMS and Eventarc APIs.

    Enable the APIs

  2. キーリングを作成します
  3. 指定したキーリングの鍵を作成します

gcloud

  1. gcloud コンポーネントを更新します。
    gcloud components update
  2. 暗号鍵を格納するプロジェクトで Cloud KMS API と Eventarc API を有効にします。
    gcloud services enable cloudkms.googleapis.com eventarc.googleapis.com
  3. キーリングを作成します
  4. 指定したキーリングの鍵を作成します

すべてのフラグと有効な値については、--help フラグを指定してコマンドを実行してください。

Eventarc サービス アカウントに鍵へのアクセス権を付与する

Eventarc サービス アカウントに Cloud KMS 鍵へのアクセス権を付与するには、サービス アカウントを鍵のプリンシパルとして追加し、サービス アカウントに Cloud KMS 暗号鍵の暗号化/復号ロールを付与します。

コンソール

Google Cloud コンソールを使用してバスまたはパイプラインで CMEK を有効にすると、サービス アカウントに Cloud KMS 暗号鍵の暗号化/復号ロールを付与するように求められます。詳細については、このドキュメントの バスで CMEK を有効にするまたはパイプラインで CMEK を有効にするをご覧ください。

gcloud

 gcloud kms keys add-iam-policy-binding KEY_NAME \
     --keyring KEY_RING \
     --location REGION \
     --member serviceAccount:SERVICE_AGENT_EMAIL \
     --role roles/cloudkms.cryptoKeyEncrypterDecrypter

次のように置き換えます。

  • KEY_NAME: 鍵の名前(例: my-key
  • KEY_RING: キーリングの名前(例: my-keyring
  • REGION: 鍵のロケーション(例: us-central1
  • SERVICE_AGENT_EMAIL: eventarc.serviceAgent ロールを持つサービス アカウントのメールアドレス

    たとえば、service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com とします。詳細については、サービス エージェントをご覧ください。

バスの CMEK を有効にする

Eventarc Advanced バスで CMEK を有効にすると、バスを通過するすべてのメッセージがその CMEK 鍵で完全に暗号化されます。

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。

    [バス] に移動

  2. バスを作成するか、バスを更新する場合はバスの名前をクリックします。

  3. [バスの詳細] ページで、 [編集] をクリックします。

  4. [バスの編集] ページの [暗号化] で、[Cloud KMS 鍵] を選択します。

  5. [鍵の種類] リストで、鍵を管理する方法を選択します。

    鍵を手動で管理することも、Autokey を使用してキーリングと鍵をオンデマンドで生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。

  6. [Cloud KMS 鍵を選択] リストで鍵を選択します。

  7. (省略可)鍵のリソース名を手動で入力するには、[Cloud KMS 鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵の名前を入力します。

  8. プロンプトが表示されたら、Eventarc Service Agentcloudkms.cryptoKeyEncrypterDecrypter ロールを付与します。

  9. [保存] をクリックします。

gcloud

gcloud beta eventarc message-buses update コマンドを使用して、バスの CMEK を有効にします。

gcloud beta eventarc message-buses update BUS_NAME \
    --location=REGION \
    --crypto-key=KEY

次のように置き換えます。

Cloud KMS の使用状況を確認する

バスが CMEK に準拠していることを確認します。

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。

    [バス] に移動

  2. CMEK を使用して保護したバスの名前をクリックします。

  3. [バスの詳細] ページの [暗号化] ステータスには、使用中の顧客管理の暗号鍵が表示されます。キーをクリックすると、Security Command Center に移動できます。

    それ以外の場合は、ステータス メッセージは Event messages encrypted using Google-managed encryption keys です。

gcloud

gcloud beta eventarc message-buses describe コマンドを使用して、バスを記述します。

 gcloud beta eventarc message-buses describe BUS_NAME \
     --location=REGION

出力例を以下に示します。

 cryptoKeyName: projects/PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 name: projects/PROJECT_ID/locations/REGION/messageBuses/BUS_NAME
 updateTime: '2022-06-28T17:24:56.365866104Z'

cryptokeyName 値は、バスに使用される Cloud KMS 鍵を示しています。

バスの CMEK を無効にする

バスに関連付けられた CMEK による保護を無効にできます。バス経由で配信されるイベントは、引き続き Google-owned and Google-managed encryption keys で保護されます。

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。

    [バス] に移動

  2. バスの名前をクリックします。

  3. [バスの詳細] ページで、 [編集] をクリックします。

  4. [バスの編集] ページで、[暗号化] で [Google が管理する暗号鍵] を選択します。

  5. [保存] をクリックします。

gcloud

gcloud beta eventarc message-buses update コマンドを使用して、バスの CMEK を無効にします。

gcloud beta eventarc message-buses update BUS_NAME \
    --location=REGION \
    --clear-crypto-key

パイプラインの CMEK を有効にする

Eventarc Advanced パイプラインで CMEK を有効にすると、パイプラインを通過するすべてのメッセージがその CMEK 鍵で完全に暗号化されます。

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。

    [Pipelines] に移動

  2. パイプラインを作成するか、パイプラインを更新する場合はパイプライン名をクリックします。

  3. [パイプラインの詳細] ページで、 [編集] をクリックします。

  4. [パイプラインの編集] ページで、[暗号化] で [Cloud KMS 鍵] を選択します。

  5. [鍵の種類] リストで、鍵を管理する方法を選択します。

    鍵を手動で管理することも、Autokey を使用してキーリングと鍵をオンデマンドで生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。

  6. [Cloud KMS 鍵を選択] リストで鍵を選択します。

  7. (省略可)鍵のリソース名を手動で入力するには、[Cloud KMS 鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵の名前を入力します。

  8. プロンプトが表示されたら、Eventarc Service Agentcloudkms.cryptoKeyEncrypterDecrypter ロールを付与します。

  9. [保存] をクリックします。

gcloud

gcloud beta eventarc pipelines update コマンドを使用して、パイプラインで CMEK を有効にします。

 gcloud beta eventarc pipelines update PIPELINE_NAME \
     --location=REGION \
     --crypto-key=KEY

次のように置き換えます。

Cloud KMS の使用状況を確認する

パイプラインが CMEK に準拠していることを確認します。

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。

    [Pipelines] に移動

  2. CMEK を使用して保護したパイプラインの名前をクリックします。

  3. [パイプラインの詳細] ページの [暗号化] ステータスには、使用中の顧客管理の暗号鍵が表示されます。キーをクリックすると、Security Command Center に移動できます。

    それ以外の場合は、ステータス メッセージは Event messages encrypted using Google-managed encryption keys です。

gcloud

gcloud beta eventarc pipelines describe コマンドを使用して、パイプラインの CMEK を確認します。

 gcloud beta eventarc pipelines describe PIPELINE_NAME \
     --location=REGION

出力例を以下に示します。

 createTime: '2022-06-28T18:05:52.403999904Z'
 cryptoKeyName: projects/PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 destinations: ...
 name: projects/PROJECT_ID/locations/REGION/pipelines/PIPELINE_NAME
 uid: 5ea277f9-b4b7-4e7f-a8e0-6ca9d7204fa3
 updateTime: '2022-06-28T18:09:18.650727516Z'

cryptokeyName 値は、パイプラインに使用される Cloud KMS 鍵を示しています。

パイプラインの CMEK を無効にする

パイプラインに関連付けられた CMEK による保護を無効にできます。パイプラインを介して配信されるイベントは、引き続き Google-owned and Google-managed encryption keys によって保護されます。

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。

    [Pipelines] に移動

  2. パイプラインの名前をクリックします。

  3. [パイプラインの詳細] ページで、 [編集] をクリックします。

  4. [パイプラインの編集] ページで、[暗号化] で [Google が管理する暗号鍵] を選択します。

  5. [保存] をクリックします。

gcloud

gcloud beta eventarc pipelines update コマンドを使用して、パイプラインの CMEK を無効にします。

gcloud beta eventarc pipelines update PIPELINE_NAME \
    --location=REGION \
    --clear-crypto-key

Google API ソースで CMEK を有効にする

GoogleApiSource リソースで CMEK を有効にすると、そのリソースに対して収集されたすべてのメッセージが CMEK 鍵で完全に暗号化されます。

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。

    [バス] に移動

  2. バスを作成するか、バスを更新する場合はバスの名前をクリックします。

  3. [バスの詳細] ページで、 [編集] をクリックします。

  4. メッセージの送信元を追加するには、[] [ソースを追加] をクリックします。

    メッセージソースがすでに存在する場合は、まずそのソースを削除してから、新しいメッセージソースを追加する必要があります。

  5. [メッセージ送信元を追加] ペインで、Google API メッセージ プロバイダのデフォルト値 google-api-source を受け入れます。

  6. [暗号化] で [Cloud KMS 鍵] を選択し、次の操作を行います。

    1. [鍵の種類] リストで、鍵を管理する方法を選択します。

      鍵を手動で管理することも、Autokey を使用してキーリングと鍵をオンデマンドで生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。

    2. [Cloud KMS 鍵を選択] で鍵を選択します。

      顧客管理の暗号鍵を表示する前に、リージョンを選択する必要があります。

    3. (省略可)鍵のリソース名を手動で入力するには、[Cloud KMS 鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵の名前を入力します。

    4. プロンプトが表示されたら、Eventarc Service Agentcloudkms.cryptoKeyEncrypterDecrypter ロールを付与します。

  7. [作成] をクリックします。

    これにより、Google ソースから直接イベントを自動的に収集できます。すべてのイベント メッセージは CMEK 鍵で完全に暗号化されます。

    GoogleApiSource と同じ Google Cloud プロジェクト内のリソースのイベントのみが公開されます。詳細については、Google ソースからイベントを公開するをご覧ください。

  8. [保存] をクリックします。

gcloud

gcloud beta eventarc google-api-sources update コマンドを使用して、GoogleApiSource リソースで CMEK を有効にします。

gcloud beta eventarc google-api-sources update GOOGLE_API_SOURCE_NAME \
    --location=REGION \
    --crypto-key=KEY

次のように置き換えます。

Cloud KMS の使用状況を確認する

リソースが CMEK に準拠していることを確認します。

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。

    [バス] に移動

  2. Cloud KMS 鍵を使用してメッセージ ソースを保護したバスの名前をクリックします。

  3. [バスの詳細] ページで、 [編集] をクリックします。

    メッセージの送信元を暗号化する鍵が一覧表示されます。キーをクリックすると、Security Command Center に移動できます。

    それ以外の場合、暗号化ステータス メッセージは Event messages encrypted using Google-managed encryption keys です。

gcloud

gcloud beta eventarc google-api-sources describe コマンドを使用して、GoogleApiSource リソースの CMEK を確認します。

  gcloud beta eventarc google-api-sources describe GOOGLE_API_SOURCE_NAME \
      --location=REGION

出力例を以下に示します。

  createTime: '2022-06-28T18:05:52.403999904Z'
  cryptoKeyName: projects/PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
  destination: projects/PROJECT_ID/locations/REGION/messageBuses/BUS_NAME
  name: projects/PROJECT_ID/locations/REGION/googleApiSources/GOOGLE_API_SOURCE_NAME
  uid: 5ea277f9-b4b7-4e7f-a8e0-6ca9d7204fa3
  updateTime: '2022-06-28T18:09:18.650727516Z'

cryptokeyName 値は、パイプラインに使用される Cloud KMS 鍵を示しています。

Google API ソースの CMEK を無効にする

Google API ソースに関連付けられた CMEK による保護を無効にできます。GoogleApiSource リソースで収集されたイベントは、引き続き Google-owned and Google-managed encryption keys によって保護されます。

コンソール

  1. Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。

    [バス] に移動

  2. CMEK を使用してメッセージ ソースを保護したバスの名前をクリックします。

  3. [バスの詳細] ページで、 [編集] をクリックします。

  4. Cloud KMS 鍵で暗号化されたメッセージ送信元を削除するには、[ リソースを削除] をクリックします。

  5. 必要に応じて、メッセージの送信元を再度追加します。

gcloud

gcloud beta eventarc google-api-sources update コマンドを使用して、GoogleApiSource リソースの CMEK を無効にします。

gcloud beta eventarc google-api-sources update GOOGLE_API_SOURCE_NAME \
    --location=REGION \
    --clear-crypto-key

CMEK の組織のポリシーの適用

Eventarc は、組織全体で CMEK が使用されるように、2 つの組織のポリシーの制約と統合されています。

  • constraints/gcp.restrictNonCmekServices は、CMEK 保護を要求するために使用されます。
  • constraints/gcp.restrictCmekCryptoKeyProjects は、CMEK の保護に使用される Cloud KMS 鍵を制限するために使用されます。

この統合により、組織内の Eventarc リソースに次の暗号化コンプライアンス要件を指定できます。

組織のポリシーを適用する際の考慮事項

CMEK の組織のポリシーを適用する前に、次の点に注意する必要があります。

  • 伝播の遅延に備える

    組織のポリシーを設定または更新してから、新しいポリシーが有効になるまで最大 15 分かかることがあります。

  • 既存のリソースを考慮する

    既存のリソースには、新しく作成された組織のポリシーは適用されません。たとえば、組織のポリシーは既存のパイプラインに遡及的に適用されません。これらのリソースには CMEK なしでアクセスできます。また、該当する場合は、既存の鍵で暗号化されたままになります。

  • 組織のポリシーを設定するために必要な権限を確認する

    組織のポリシーを、テスト目的で設定または更新する権限の取得は難しい場合があります。組織ポリシー管理者ロールが付与されている必要があります。このロールは、プロジェクト レベルやフォルダレベルではなく、組織レベルでのみ付与できます。

    そのロールは組織レベルで付与する必要がありますが、特定のプロジェクトやフォルダにのみ適用されるポリシーを指定することもできます。

新しい Eventarc リソースで CMEK を必須にする

constraints/gcp.restrictNonCmekServices 制約を使用すると、組織内の新しい Eventarc リソースの保護に CMEK を使用するように要求できます。

この組織のポリシーを設定すると、指定された Cloud KMS 鍵を持たないすべてのリソース作成リクエストは失敗します。

このポリシーを設定すると、それはプロジェクト内の新しいリソースにのみ適用されます。Cloud KMS 鍵が適用されていない既存のリソースは引き続き存在し、問題なくアクセスできます。

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

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

  2. [フィルタ] を使用して、次の制約を検索します。

    constraints/gcp.restrictNonCmekServices
    
  3. [名前] 列で、[CMEK を使用せずにリソースを作成できるサービスを制限する] をクリックします。

  4. [ ポリシーを管理] をクリックします。

  5. [ポリシーの編集] ページの [ポリシーのソース] で、[親のポリシーをオーバーライドする] を選択します。

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

  7. [ポリシーの値] リストで、[カスタム] を選択します。

  8. [ポリシーの種類] リストで [拒否] を選択します。

  9. [カスタム値] フィールドに次のように入力します。

    is:eventarc.googleapis.com
    
  10. [完了]、[ポリシーを設定] の順にクリックします。

gcloud

  1. ポリシーを保存する一時ファイル /tmp/policy.yaml を作成します。

      name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices
      spec:
        rules:
        - values:
            deniedValues:
            - is:eventarc.googleapis.com

    PROJECT_ID は、この制約を適用するプロジェクトの ID に置き換えます。

  2. org-policies set-policy コマンドを実行します。

    gcloud org-policies set-policy /tmp/policy.yaml

ポリシーが正常に適用されていることを確認するには、プロジェクトに Eventarc Advanced パイプラインを作成してみてください。Cloud KMS 鍵を指定しない限り、プロセスは失敗します。

Eventarc プロジェクトの Cloud KMS 鍵を制限する

Eventarc プロジェクトでは、constraints/gcp.restrictCmekCryptoKeyProjects 制約を使用してリソースの保護に使用できる Cloud KMS 鍵を制限できます。

たとえば、「projects/my-company-data-project の該当する Eventarc リソースに対して、このプロジェクトで使用される Cloud KMS 鍵は projects/my-company-central-keys または projects/team-specific-keys からのものでなければならない」というルールを指定できます。

コンソール

  1. Google Cloud コンソールで、[組織のポリシー] ページに移動します。

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

  2. [フィルタ] を使用して、次の制約を検索します。

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. [名前] 列で、[CMEK 用の KMS CryptoKey を提供するプロジェクトを制限する] をクリックします。

  4. [ ポリシーを管理] をクリックします。

  5. [ポリシーの編集] ページの [ポリシーのソース] で、[親のポリシーをオーバーライドする] を選択します。

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

  7. [ポリシーの値] リストで、[カスタム] を選択します。

  8. [ポリシーの種類] リストで [許可] を選択します。

  9. [カスタム値] フィールドに次のように入力します。

    under:projects/KMS_PROJECT_ID
    

    KMS_PROJECT_ID は、使用する Cloud KMS 鍵が配置されているプロジェクトの ID に置き換えます。

    例: under:projects/my-kms-project

  10. [完了]、[ポリシーを設定] の順にクリックします。

gcloud

  1. ポリシーを保存する一時ファイル /tmp/policy.yaml を作成します。

      name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects
      spec:
        rules:
        - values:
            allowedValues:
            - under:projects/KMS_PROJECT_ID

    次のように置き換えます

    • PROJECT_ID: この制約を適用するプロジェクトの ID。
    • KMS_PROJECT_ID: 使用する Cloud KMS 鍵が配置されているプロジェクトの ID。
  2. org-policies set-policy コマンドを実行します。

    gcloud org-policies set-policy /tmp/policy.yaml

ポリシーが正常に適用されていることを確認するには、別のプロジェクトの Cloud KMS 鍵を使用して Eventarc Advanced パイプラインを作成してみることができます。このプロセスは失敗します。

Cloud KMS 鍵の無効化と有効化

鍵バージョンには、データの暗号化、復号、署名、検証に使用する暗号鍵マテリアルが保存されます。この鍵バージョンを無効にすると、鍵で暗号化されたデータにアクセスできなくなります。

Eventarc が Cloud KMS 鍵にアクセスできない場合、イベント ルーティングは FAILED_PRECONDITION エラーで失敗し、イベントの配信が停止します。無効状態の鍵を有効にすると、暗号化されたデータに再度アクセスできます。

Cloud KMS 鍵を無効にする

Eventarc が鍵を使用してイベントデータを暗号化または復号できないようにするには、次のいずれかを行います。

  • バスまたはパイプラインに構成した鍵バージョンを無効にすることをおすすめします。これは、特定の鍵に関連付けられている Eventarc Advanced バスまたはパイプラインにのみ影響します。
  • 省略可: Eventarc サービス アカウントで cloudkms.cryptoKeyEncrypterDecrypter ロールを取り消します。この操作は、CMEK で暗号化されたイベントをサポートするプロジェクトのすべての Eventarc リソースに影響します。

いずれのオペレーションでも即時のアクセス取り消しは保証されませんが、通常は Identity and Access Management(IAM)の変更のほうがより速く反映されます。詳細については、Cloud KMS リソースの整合性アクセス権の変更の伝播をご覧ください。

Cloud KMS 鍵を再度有効にする

イベントの配信とルーティングを再開するには、Cloud KMS へのアクセスを復元します。

監査ロギングとトラブルシューティング

鍵を有効または無効にすると、Cloud KMS により監査ログが生成されます。このログは、メッセージの暗号化または復号で Eventarc Advanced リソースが鍵を使用したときにも生成されます。詳細については、Cloud KMS 監査ロギングの情報をご覧ください。

Cloud External Key Manager(Cloud EKM)を介して外部管理鍵を使用する場合に発生する可能性のある問題を解決するには、Cloud EKM エラー リファレンスをご覧ください。

料金

バスの統合により、鍵オペレーション以外の追加の費用は発生しません。鍵オペレーションの費用はプロジェクトに課金されます。 Google Cloud パイプラインで CMEK を使用すると、Pub/Sub の料金に基づいて Cloud KMS サービスへのアクセスに対して課金されます。

最新の料金に関する詳細については、Cloud KMS の料金をご覧ください。

次のステップ