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

デフォルトでは、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 を使用して外部で保存されます。

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

CMEK による保護対象

Eventarc Standard が使用するチャネルに CMEK を構成し、そのチャネルを通過するイベントを暗号化できます。

CMEK でチャネルを有効にすると、本人だけがアクセスできる暗号鍵を使用して、関連するデータ(トランスポート レイヤとして使用される Pub/Sub トピックなど)が保護されます。

プロジェクトで Google チャネルに対して CMEK を有効にすると、そのプロジェクトとリージョンの Google イベントタイプのすべての Eventarc Standard トリガーがその CMEK 鍵で完全に暗号化されます。 Google CloudCMEK 鍵をトリガーごとに適用することはできません。

始める前に

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 フラグを指定してコマンドを実行してください。

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

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

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

コンソール

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

gcloud

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

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

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

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

Google イベントタイプで CMEK を有効にする

Google イベントタイプをルーティングする Eventarc トリガーは、プロジェクトとリージョンに固有の仮想チャネル(Google チャネル)にイベントを公開します。この仮想チャネルは、すべての Eventarc リージョンで使用できます。

プロジェクトで Google チャネルに対して CMEK を有効にすると、そのプロジェクトとリージョンの Google イベントタイプのすべての Eventarc トリガーがその CMEK 鍵で完全に暗号化されます。 Google Cloud 複数の CMEK 鍵を追加して、それぞれを Google チャネルの特定のリージョンに関連付けることができます。CMEK 鍵をトリガーごとに適用することはできません。

コンソール

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

    [チャンネル] に移動

  2. Google プロバイダがあるチャネルをクリックします。

  3. [チャネルの編集] ページで、[顧客管理の暗号鍵(CMEK)を使用する] チェックボックスをオンにします。

  4. [暗号鍵を追加] をクリックします。

  5. リージョンを選択し、[CMEK 暗号鍵] リストで、リージョンに作成したキーリングを選択します。チャネルの暗号鍵は、リージョンごとに 1 つだけ追加できます。

  6. (省略可)鍵のリソース名を手動で入力するには、[CMEK 暗号鍵] リストで [鍵が表示されない場合は、鍵のリソース ID を入力してください。] をクリックして、指定された形式で鍵の名前を入力します。

  7. プロンプトが表示されたら、eventarc.serviceAgent ロールを持つ Eventarc サービス アカウントに cloudkms.cryptoKeyEncrypterDecrypter ロールを付与します。

  8. (省略可)[暗号鍵を追加] をクリックして、別のリージョン用に作成した別のキーリングを追加します。

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

gcloud

 gcloud eventarc google-channels update \
    --location=LOCATION \
    --crypto-key=KEY

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

  • LOCATION: 保護される Google チャネルのロケーション。使用する鍵の場所と一致する必要があります。
  • KEY: Cloud KMS 鍵の完全修飾名。projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME 形式で指定します。

CMEK で包括的な保護を行うために、独自のトピックを使用して Pub/Sub トリガーを作成する場合は、トピックで KMS 鍵を構成することをおすすめします。詳細については、Pub/Sub トピックの構成をご覧ください。

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

チャネルが CMEK に対応していることを確認するには:

コンソール

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

    [トリガー] に移動

  2. イベント プロバイダとしてソースが表示され、CMEK を使用して保護したリージョンが表示されているトリガーをクリックします。 Google Cloud

  3. [トリガーの詳細] ページで、[暗号化] ステータスに「Events encrypted using Customer-managed encryption keys」というメッセージが表示されます。

gcloud

 gcloud eventarc google-channels describe \
     --location=LOCATION

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

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

cryptokeyName 値は、Google チャネルに使用される Cloud KMS 鍵を示しています。

サードパーティ チャネルで CMEK を有効にする

サードパーティの Eventarc チャネルは、Eventarc ソースを提供するGoogle Cloud 以外のエンティティが宛先とやり取りするためのリソースです。このチャネルはリージョンに固有であり、サードパーティ チャネルごとに鍵を 1 つだけ追加できます。

サードパーティ チャネルで CMEK を有効にするには:

コンソール

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

    [チャンネル] に移動

  2. サードパーティのプロバイダがあるチャネルをクリックします。

  3. [チャネルの詳細] ページで、[ 編集] をクリックします。

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

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

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

  6. [Cloud KMS 鍵を選択] リストで鍵を選択します。チャネルの暗号鍵は、リージョンごとに 1 つだけ追加できます。

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

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

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

gcloud

 gcloud eventarc channels update CHANNEL_NAME \
    --location=LOCATION \
    --crypto-key=KEY

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

  • CHANNEL_NAME: サードパーティ チャネルの名前。新しいサードパーティ チャネルを作成するには、チャネルを作成するをご覧ください。
  • LOCATION: 保護するサードパーティ チャネルのロケーション。鍵の場所と一致する必要があります。
  • KEY: Cloud KMS 鍵の完全修飾名。projects/PROJECT_NAME/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME 形式で指定します。

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

チャネルが CMEK に対応していることを確認するには:

コンソール

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

    [トリガー] に移動

  2. イベント プロバイダとしてサードパーティのソースが使用され、CMEK を使用して保護したリージョンが使用されているトリガーをクリックします。

  3. [トリガーの詳細] ページで、[暗号化] のステータスに「Events encrypted using Customer-managed encryption keys」というメッセージが表示されます。

gcloud

 gcloud eventarc channels describe CHANNEL_NAME \
    --location=LOCATION

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

 createTime: '2022-06-28T18:05:52.403999904Z'
 cryptoKeyName: projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 name: projects/PROJECT_ID/locations/LOCATION/googleChannelConfig
 pubsubTopic: projects/PROJECT_ID/topics/PUBSUB_TOPIC_ID
 state: ACTIVE
 uid: 5ea277f9-b4b7-4e7f-a8e0-6ca9d7204fa3
 updateTime: '2022-06-28T18:09:18.650727516Z'

cryptokeyName 値は、サードパーティ チャネルに使用される Cloud KMS 鍵を示しています。

チャネルに使用されている鍵を表示する

Eventarc チャネルの説明を取得し、チャネルに使用されている Cloud KMS 鍵を表示できます。

コンソール

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

    [チャンネル] に移動

  2. チャンネル名をクリックします。

  3. チャネルで使用されている CMEK 暗号鍵が表示されます。

gcloud

チャネルのタイプに応じて、次のコマンドを実行します。

Google チャネル

gcloud eventarc google-channels describe \
    --location=LOCATION

サードパーティ チャネル

gcloud eventarc channels describe CHANNEL_NAME \
    --location=LOCATION

出力には、次のような行が含まれます。

cryptoKeyName: projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME

cryptoKeyName 値は、チャネルに使用されている Cloud KMS 鍵を示します。

CMEK を無効にする

チャネルに関連付けられた CMEK による保護を無効にできます。このようなチャネルを通じて配信されるイベントは、Google-owned and Google-managed encryption keys で保護されています。チャネルに関連付けられた CMEK による保護を削除するには:

コンソール

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

    [チャンネル] に移動

  2. チャネルの種類に応じて、次の手順を行います。

    Google チャネル

    1. Google プロバイダがあるチャネルをクリックします。
    2. [チャネルの編集] ページで、[CMEK 暗号鍵] リストにポインタを置くと、項目を削除」ボタンが表示されます。
    3. [項目を削除] をクリックします。
    4. [保存] をクリックします。

      [顧客管理の暗号鍵(CMEK)を使用する] チェックボックスを有効にするには、ページを更新する必要があります。

    サードパーティ チャネル

    1. サードパーティのプロバイダがあるチャネルをクリックします。
    2. [チャネルの詳細] ページで、[ 編集] をクリックします。
    3. [チャネルの編集] ページの [暗号化] で、[Google が管理する暗号鍵] を選択します。
    4. [保存] をクリックします。

gcloud

チャネルのタイプに応じて、次のコマンドを実行します。

Google チャネル

gcloud eventarc google-channels \
    update --clear-crypto-key

サードパーティ チャネル

gcloud eventarc channels CHANNEL_NAME \
    update --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 Standard チャネルを作成してみます。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 Standard チャネルを作成してみることができます。このプロセスは失敗します。

Cloud KMS 鍵の無効化と有効化

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

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

Cloud KMS 鍵を無効にする

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

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

Cloud KMS 鍵を再度有効にする

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

料金

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

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

次のステップ