デフォルトでは、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 による保護対象
CMEK を構成して、次の Eventarc Advanced リソースを通過するイベント メッセージを暗号化できます。
MessageBus- Eventarc Advanced バスPipeline- Eventarc Advanced パイプラインGoogleApiSource- 特定のバスの Google API イベントのサブスクリプションを表す Eventarc Advanced リソース
詳細については、Eventarc Advanced の概要をご覧ください。
リソースで CMEK を有効にすると、自分だけがアクセスできる暗号鍵を使用して、そのリージョンのリソースに関連付けられたデータが保護されます。
Cloud KMS と Eventarc はリージョン サービスです。Cloud KMS 鍵と保護された Eventarc Advanced リソースのリージョンは同じにする必要があります。
始める前に
Eventarc でこの機能を使用する前に、次の操作を行う必要があります。
コンソール
-
Enable the Cloud KMS and Eventarc APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - キーリングを作成します。
- 指定したキーリングの鍵を作成します。
gcloud
gcloudコンポーネントを更新します。gcloud components update
- 暗号鍵を格納するプロジェクトで Cloud KMS API と Eventarc API を有効にします。
gcloud services enable cloudkms.googleapis.com eventarc.googleapis.com
- キーリングを作成します。
- 指定したキーリングの鍵を作成します。
すべてのフラグと有効な値については、--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 鍵で完全に暗号化されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
バスを作成するか、バスを更新する場合はバスの名前をクリックします。
[バスの詳細] ページで、 [編集] をクリックします。
[バスの編集] ページの [暗号化] で、[Cloud KMS 鍵] を選択します。
[鍵の種類] リストで、鍵を管理する方法を選択します。
鍵は手動で管理することも、オンデマンドでキーリングと鍵を生成できる Autokey を使用することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。
[Cloud KMS 鍵の選択] リストで、鍵を選択します。
(省略可)鍵のリソース名を手動で入力するには、[Cloud KMS 鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵の名前を入力します。
プロンプトが表示されたら、Eventarc サービス エージェントに
cloudkms.cryptoKeyEncrypterDecrypterロールを付与します。[保存] をクリックします。
gcloud
gcloud eventarc message-buses update コマンドを使用して、バスの CMEK を有効にします。
gcloud eventarc message-buses update BUS_NAME \ --location=REGION \ --crypto-key=KEY
次のように置き換えます。
BUS_NAME: バスの ID または完全修飾識別子REGION: Eventarc Advanced でサポートされているロケーションKEY: Cloud KMS 鍵の完全修飾名。projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME形式で指定します。鍵の
REGIONは、保護するバスのロケーションと一致している必要があります。
Cloud KMS の使用状況を確認する
バスが CMEK に対応していることを確認します。
コンソール
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
CMEK を使用して保護したバスの名前をクリックします。
[バスの詳細] ページの [暗号化] ステータスには、使用中の顧客管理の暗号鍵が表示されます。キーをクリックすると、Security Command Center でそのキーに移動できます。
それ以外の場合、ステータス メッセージは
Event messages encrypted using Google-managed encryption keysです。
gcloud
gcloud eventarc message-buses describe コマンドを使用して、バスの説明を取得します。
gcloud 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 によって引き続き保護されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
バスの名前をクリックします。
[バスの詳細] ページで、 [編集] をクリックします。
[バスの編集] ページの [暗号化] で、[Google が管理する暗号鍵] を選択します。
[保存] をクリックします。
gcloud
gcloud eventarc message-buses update コマンドを使用して、バスの CMEK を無効にします。
gcloud eventarc message-buses update BUS_NAME \ --location=REGION \ --clear-crypto-key
パイプラインの CMEK を有効にする
Eventarc Advanced パイプラインに対して CMEK を有効にすると、パイプラインを通過するすべてのメッセージがその CMEK 鍵で完全に暗号化されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。
パイプラインを作成するか、パイプラインを更新する場合は、パイプラインの名前をクリックします。
[パイプラインの詳細] ページで、 [編集] をクリックします。
[パイプラインの編集] ページの [暗号化] で、[Cloud KMS 鍵] を選択します。
[鍵の種類] リストで、鍵を管理する方法を選択します。
鍵は手動で管理することも、Autokey を使用してオンデマンドでキーリングと鍵を生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。
[Cloud KMS 鍵の選択] リストで、鍵を選択します。
(省略可)鍵のリソース名を手動で入力するには、[Cloud KMS 鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵の名前を入力します。
プロンプトが表示されたら、Eventarc サービス エージェントに
cloudkms.cryptoKeyEncrypterDecrypterロールを付与します。[保存] をクリックします。
gcloud
パイプラインの CMEK を有効にするには、gcloud eventarc pipelines update コマンドを使用します。
gcloud eventarc pipelines update PIPELINE_NAME \ --location=REGION \ --crypto-key=KEY
次のように置き換えます。
PIPELINE_NAME: パイプラインの ID または完全修飾識別子REGION: Eventarc Advanced でサポートされているロケーションKEY: Cloud KMS 鍵の完全修飾名。projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME形式で指定します。鍵の
REGIONは、保護するパイプラインのロケーションと一致している必要があります。
Cloud KMS の使用状況を確認する
パイプラインが CMEK に対応していることを確認します。
コンソール
Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。
CMEK を使用して保護したパイプラインの名前をクリックします。
[パイプラインの詳細] ページの [暗号化] ステータスには、使用中の顧客管理の暗号鍵が表示されます。キーをクリックすると、Security Command Center でそのキーに移動できます。
それ以外の場合、ステータス メッセージは
Event messages encrypted using Google-managed encryption keysです。
gcloud
gcloud eventarc pipelines describe コマンドを使用して、パイプラインの CMEK を確認します。
gcloud 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 によって引き続き保護されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。
パイプラインの名前をクリックします。
[パイプラインの詳細] ページで、 [編集] をクリックします。
[パイプラインの編集] ページの [暗号化] で、[Google が管理する暗号鍵] を選択します。
[保存] をクリックします。
gcloud
パイプラインの CMEK を無効にするには、gcloud eventarc pipelines update コマンドを使用します。
gcloud eventarc pipelines update PIPELINE_NAME \ --location=REGION \ --clear-crypto-key
Google API ソースの CMEK を有効にする
GoogleApiSource リソースに対して CMEK を有効にすると、そのリソースに対して収集されたすべてのメッセージが CMEK 鍵で完全に暗号化されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
バスを作成するか、バスを更新する場合はバスの名前をクリックします。
[バスの詳細] ページで、 [編集] をクリックします。
メッセージ ソースを追加するには、 [ソースを追加] をクリックします。
メッセージ ソースがすでに存在する場合は、まず削除してから新しいメッセージ ソースを追加する必要があります。
[メッセージ ソースを追加] ペインで、Google API メッセージ プロバイダのデフォルトの
google-api-sourceを受け入れます。[暗号化] で [Cloud KMS 鍵] を選択し、次の操作を行います。
[鍵の種類] リストで、鍵を管理する方法を選択します。
鍵は手動で管理することも、Autokey を使用してオンデマンドでキーリングと鍵を生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。
[Cloud KMS 鍵の選択] で、鍵を選択します。
顧客管理の暗号鍵を表示するには、リージョンを選択する必要があります。
(省略可)鍵のリソース名を手動で入力するには、[Cloud KMS 鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵の名前を入力します。
プロンプトが表示されたら、Eventarc サービス エージェントに
cloudkms.cryptoKeyEncrypterDecrypterロールを付与します。
[作成] をクリックします。
これにより、Google ソースから直接送信されるイベントが自動的に収集され、すべてのイベント メッセージが CMEK 鍵で完全に暗号化されます。
GoogleApiSourceと同じ Google Cloud プロジェクト内のリソースからのイベントのみが公開されます。詳細については、Google ソースからイベントをパブリッシュするをご覧ください。[保存] をクリックします。
gcloud
gcloud eventarc google-api-sources update コマンドを使用して、GoogleApiSource リソースの CMEK を有効にします。
gcloud eventarc google-api-sources update GOOGLE_API_SOURCE_NAME \ --location=REGION \ --crypto-key=KEY
次のように置き換えます。
GOOGLE_API_SOURCE_NAME:GoogleApiSourceリソースの ID または完全修飾識別子REGION: Eventarc Advanced でサポートされているロケーションKEY: Cloud KMS 鍵の完全修飾名。projects/PROJECT_NAME/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME形式で指定します。鍵の
REGIONは、保護するリソースのロケーションと一致している必要があります。
Cloud KMS の使用状況を確認する
リソースが CMEK に対応していることを確認します。
コンソール
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
Cloud KMS 鍵を使用してメッセージ ソースを保護したバスの名前をクリックします。
[バスの詳細] ページで、 [編集] をクリックします。
メッセージ ソースを暗号化しているキーが一覧表示されます。キーをクリックすると、Security Command Center の該当する場所に移動できます。
それ以外の場合、[暗号化] ステータス メッセージは
Event messages encrypted using Google-managed encryption keysになります。
gcloud
gcloud eventarc google-api-sources describe コマンドを使用して、GoogleApiSource リソースの CMEK を確認します。
gcloud 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 によって保護されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
CMEK を使用してメッセージ ソースを保護したバスの名前をクリックします。
[バスの詳細] ページで、 [編集] をクリックします。
Cloud KMS 鍵で暗号化されたメッセージ ソースを削除するには、[ リソースを削除] をクリックします。
必要に応じて、メッセージ ソースを再度追加します。
gcloud
gcloud eventarc google-api-sources update コマンドを使用して、GoogleApiSource リソースの CMEK を無効にします。
gcloud 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 鍵が適用されていない既存のリソースは引き続き存在し、問題なくアクセスできます。
コンソール
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 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 からのものでなければならない」というルールを指定できます。
コンソール
Google Cloud コンソールで、[組織のポリシー] ページに移動します。
[フィルタ] を使用して、次の制約を検索します。
constraints/gcp.restrictCmekCryptoKeyProjects[名前] 列で、[CMEK 用の KMS CryptoKey を提供するプロジェクトを制限する] をクリックします。
[ ポリシーを管理] をクリックします。
[ポリシーの編集] ページの [ポリシーのソース] で、[親のポリシーをオーバーライドする] を選択します。
[ルール] で [ルールを追加] をクリックします。
[ポリシーの値] リストで、[カスタム] を選択します。
[ポリシーの種類] リストで、[許可] を選択します。
[カスタム値] フィールドに次のように入力します。
under:projects/KMS_PROJECT_IDKMS_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 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 監査ロギングの情報をご覧ください。
Eventarc で Cloud KMS を使用する際に発生する可能性のある問題を解決するには、問題のトラブルシューティングをご覧ください。
Cloud External Key Manager(Cloud EKM)を介して外部管理鍵を使用する場合に発生する可能性のある問題を解決するには、Cloud EKM エラー リファレンスをご覧ください。
料金
バス統合により、鍵オペレーション以外の追加の費用は発生しません。鍵オペレーションの費用は Google Cloud プロジェクトに課金されます。パイプラインで CMEK を使用すると、Pub/Sub の料金に基づいて Cloud KMS サービスへのアクセスに対して課金されます。
最新の料金に関する詳細については、Cloud KMS の料金をご覧ください。