デフォルトでは、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 でこの機能を使用する前に、以下の準備を行う必要があります。
コンソール
-
Enable the Cloud KMS and Eventarc APIs.
- キーリングを作成します。
- 指定したキーリングの鍵を作成します。
gcloud
gcloud
コンポーネントを更新します。gcloud components update
- 暗号鍵を格納するプロジェクトで Cloud KMS API と Eventarc API を有効にします。
gcloud services enable cloudkms.googleapis.com eventarc.googleapis.com
- キーリングを作成します。
- 指定したキーリングの鍵を作成します。
すべてのフラグと有効な値については、--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 鍵をトリガーごとに適用することはできません。
コンソール
Google Cloud コンソールで、[Eventarc] > [チャネル] ページに移動します。
Google プロバイダがあるチャネルをクリックします。
[チャネルの編集] ページで、[顧客管理の暗号鍵(CMEK)を使用する] チェックボックスをオンにします。
[暗号鍵を追加] をクリックします。
リージョンを選択し、[CMEK 暗号鍵] リストで、リージョンに作成したキーリングを選択します。チャネルの暗号鍵は、リージョンごとに 1 つだけ追加できます。
(省略可)鍵のリソース名を手動で入力するには、[CMEK 暗号鍵] リストで [鍵が表示されない場合は、鍵のリソース ID を入力してください。] をクリックして、指定された形式で鍵の名前を入力します。
プロンプトが表示されたら、
eventarc.serviceAgent
ロールを持つ Eventarc サービス アカウントにcloudkms.cryptoKeyEncrypterDecrypter
ロールを付与します。(省略可)[暗号鍵を追加] をクリックして、別のリージョン用に作成した別のキーリングを追加します。
[保存] をクリックします。
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 に対応していることを確認するには:
コンソール
Google Cloud コンソールで、[Eventarc] > [トリガー] ページに移動します。
イベント プロバイダとしてソースが表示され、CMEK を使用して保護したリージョンが表示されているトリガーをクリックします。 Google Cloud
[トリガーの詳細] ページで、[暗号化] ステータスに「
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 を有効にするには:
コンソール
Google Cloud コンソールで、[Eventarc] > [チャネル] ページに移動します。
サードパーティのプロバイダがあるチャネルをクリックします。
[チャネルの詳細] ページで、[
編集] をクリックします。[チャネルの編集] ページの [暗号化] で、[Cloud KMS 鍵] を選択します。
[鍵の種類] リストで、鍵を管理する方法を選択します。
鍵を手動で管理することも、Autokey を使用してキーリングと鍵をオンデマンドで生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。
[Cloud KMS 鍵を選択] リストで鍵を選択します。チャネルの暗号鍵は、リージョンごとに 1 つだけ追加できます。
(省略可)鍵のリソース名を手動で入力するには、[Cloud KMS 鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵の名前を入力します。
プロンプトが表示されたら、Eventarc Service Agent に
cloudkms.cryptoKeyEncrypterDecrypter
ロールを付与します。[保存] をクリックします。
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 に対応していることを確認するには:
コンソール
Google Cloud コンソールで、[Eventarc] > [トリガー] ページに移動します。
イベント プロバイダとしてサードパーティのソースが使用され、CMEK を使用して保護したリージョンが使用されているトリガーをクリックします。
[トリガーの詳細] ページで、[暗号化] のステータスに「
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 鍵を表示できます。
コンソール
Google Cloud コンソールで、[Eventarc] > [チャネル] ページに移動します。
チャンネル名をクリックします。
チャネルで使用されている 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 による保護を削除するには:
コンソール
Google Cloud コンソールで、[Eventarc] > [チャネル] ページに移動します。
チャネルの種類に応じて、次の手順を行います。
Google チャネル
- Google プロバイダがあるチャネルをクリックします。
- [チャネルの編集] ページで、[CMEK 暗号鍵] リストにポインタを置くと、 「項目を削除」ボタンが表示されます。
- [項目を削除] をクリックします。
[保存] をクリックします。
[顧客管理の暗号鍵(CMEK)を使用する] チェックボックスを有効にするには、ページを更新する必要があります。
サードパーティ チャネル
- サードパーティのプロバイダがあるチャネルをクリックします。
- [チャネルの詳細] ページで、[ 編集] をクリックします。
- [チャネルの編集] ページの [暗号化] で、[Google が管理する暗号鍵] を選択します。
- [保存] をクリックします。
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 鍵が適用されていない既存のリソースは引き続き存在し、問題なくアクセスできます。
コンソール
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
[フィルタ] を使用して、次の制約を検索します。
constraints/gcp.restrictNonCmekServices
[名前] 列で、[CMEK を使用せずにリソースを作成できるサービスを制限する] をクリックします。
[
ポリシーを管理] をクリックします。[ポリシーの編集] ページの [ポリシーのソース] で、[親のポリシーをオーバーライドする] を選択します。
[ルール] で [ルールを追加] をクリックします。
[ポリシーの値] リストで、[カスタム] を選択します。
[ポリシーの種類] リストで [拒否] を選択します。
[カスタム値] フィールドに次のように入力します。
is:eventarc.googleapis.com
[完了]、[ポリシーを設定] の順にクリックします。
gcloud
ポリシーを保存する一時ファイル
/tmp/policy.yaml
を作成します。name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices spec: rules: - values: deniedValues: - is:eventarc.googleapis.com
PROJECT_ID
は、この制約を適用するプロジェクトの ID に置き換えます。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
からのものでなければならない」というルールを指定できます。
コンソール
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
[フィルタ] を使用して、次の制約を検索します。
constraints/gcp.restrictCmekCryptoKeyProjects
[名前] 列で、[CMEK 用の KMS CryptoKey を提供するプロジェクトを制限する] をクリックします。
[
ポリシーを管理] をクリックします。[ポリシーの編集] ページの [ポリシーのソース] で、[親のポリシーをオーバーライドする] を選択します。
[ルール] で [ルールを追加] をクリックします。
[ポリシーの値] リストで、[カスタム] を選択します。
[ポリシーの種類] リストで [許可] を選択します。
[カスタム値] フィールドに次のように入力します。
under:projects/KMS_PROJECT_ID
KMS_PROJECT_ID
は、使用する Cloud KMS 鍵が配置されているプロジェクトの ID に置き換えます。例:
under:projects/my-kms-project
[完了]、[ポリシーを設定] の順にクリックします。
gcloud
ポリシーを保存する一時ファイル
/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。
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 が鍵を使用してイベントデータを暗号化または復号できないようにするには、次のいずれかを行います。
- チャネルに構成した鍵バージョンを無効にすることをおすすめします。この操作は、特定の鍵に関連付けられている Eventarc チャネルとトリガーにのみ影響します。
- 省略可: Eventarc サービス アカウントで
cloudkms.cryptoKeyEncrypterDecrypter
ロールを取り消します。この操作は、CMEK で暗号化されたイベントをサポートするすべてのプロジェクトの Eventarc チャネルとトリガーに影響します。
いずれのオペレーションでも即時のアクセス取り消しは保証されませんが、通常は Identity and Access Management(IAM)の変更のほうがより速く反映されます。詳細については、Cloud KMS リソースの整合性とアクセス権の変更の伝播をご覧ください。
Cloud KMS 鍵を再度有効にする
イベントの配信と公開を再開するには、Cloud KMS へのアクセスを復元します。
料金
この統合により、鍵オペレーション以外の追加の費用は発生しません。鍵オペレーションの費用は Google Cloudプロジェクトに課金されます。チャネルで CMEK を使用すると、Pub/Sub の料金に基づいて Cloud KMS サービスへのアクセスに対して課金されます。
最新の料金に関する詳細については、Cloud KMS の料金をご覧ください。