デフォルトでは、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 でこの機能を使用する前に、次の操作を行う必要があります。
コンソール
-
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
フラグを指定してコマンドを実行してください。
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 Service Agent に
cloudkms.cryptoKeyEncrypterDecrypter
ロールを付与します。[保存] をクリックします。
gcloud
gcloud beta eventarc message-buses update
コマンドを使用して、バスの CMEK を有効にします。
gcloud beta 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 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 で保護されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
バスの名前をクリックします。
[バスの詳細] ページで、
[編集] をクリックします。[バスの編集] ページで、[暗号化] で [Google が管理する暗号鍵] を選択します。
[保存] をクリックします。
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 鍵で完全に暗号化されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。
パイプラインを作成するか、パイプラインを更新する場合はパイプライン名をクリックします。
[パイプラインの詳細] ページで、
[編集] をクリックします。[パイプラインの編集] ページで、[暗号化] で [Cloud KMS 鍵] を選択します。
[鍵の種類] リストで、鍵を管理する方法を選択します。
鍵を手動で管理することも、Autokey を使用してキーリングと鍵をオンデマンドで生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。
[Cloud KMS 鍵を選択] リストで鍵を選択します。
(省略可)鍵のリソース名を手動で入力するには、[Cloud KMS 鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵の名前を入力します。
プロンプトが表示されたら、Eventarc Service Agent に
cloudkms.cryptoKeyEncrypterDecrypter
ロールを付与します。[保存] をクリックします。
gcloud
gcloud beta eventarc pipelines update
コマンドを使用して、パイプラインで CMEK を有効にします。
gcloud beta 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 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 によって保護されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [パイプライン] ページに移動します。
パイプラインの名前をクリックします。
[パイプラインの詳細] ページで、
[編集] をクリックします。[パイプラインの編集] ページで、[暗号化] で [Google が管理する暗号鍵] を選択します。
[保存] をクリックします。
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 鍵で完全に暗号化されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
バスを作成するか、バスを更新する場合はバスの名前をクリックします。
[バスの詳細] ページで、
[編集] をクリックします。メッセージの送信元を追加するには、[
] [ソースを追加] をクリックします。メッセージソースがすでに存在する場合は、まずそのソースを削除してから、新しいメッセージソースを追加する必要があります。
[メッセージ送信元を追加] ペインで、Google API メッセージ プロバイダのデフォルト値
google-api-source
を受け入れます。[暗号化] で [Cloud KMS 鍵] を選択し、次の操作を行います。
[鍵の種類] リストで、鍵を管理する方法を選択します。
鍵を手動で管理することも、Autokey を使用してキーリングと鍵をオンデマンドで生成することもできます。Autokey オプションが無効になっている場合、このオプションは現在のリソースタイプとまだ統合されていません。
[Cloud KMS 鍵を選択] で鍵を選択します。
顧客管理の暗号鍵を表示する前に、リージョンを選択する必要があります。
(省略可)鍵のリソース名を手動で入力するには、[Cloud KMS 鍵を選択] リストで [手動でキーを入力] をクリックして、指定された形式で鍵の名前を入力します。
プロンプトが表示されたら、Eventarc Service Agent に
cloudkms.cryptoKeyEncrypterDecrypter
ロールを付与します。
[作成] をクリックします。
これにより、Google ソースから直接イベントを自動的に収集できます。すべてのイベント メッセージは CMEK 鍵で完全に暗号化されます。
GoogleApiSource
と同じ Google Cloud プロジェクト内のリソースのイベントのみが公開されます。詳細については、Google ソースからイベントを公開するをご覧ください。[保存] をクリックします。
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
次のように置き換えます。
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 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 によって保護されます。
コンソール
Google Cloud コンソールで、[Eventarc] > [バス] ページに移動します。
CMEK を使用してメッセージ ソースを保護したバスの名前をクリックします。
[バスの詳細] ページで、
[編集] をクリックします。Cloud KMS 鍵で暗号化されたメッセージ送信元を削除するには、[
リソースを削除] をクリックします。必要に応じて、メッセージの送信元を再度追加します。
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 鍵が適用されていない既存のリソースは引き続き存在し、問題なくアクセスできます。
コンソール
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_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 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 の料金をご覧ください。