Skip to content

Commit 41a2c95

Browse files
authored
docs: Add CMEK for Eventarc Advanced
per b/406806896
1 parent c0d25f8 commit 41a2c95

File tree

1 file changed

+162
-0
lines changed

1 file changed

+162
-0
lines changed

eventarc/use_cmek_advanced/main.tf

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
/**
2+
* Copyright 2025 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
# [START eventarc_advanced_terraform_cmek_apis]
18+
# Enable Compute Engine API
19+
resource "google_project_service" "compute" {
20+
service = "compute.googleapis.com"
21+
disable_on_destroy = false
22+
}
23+
24+
# Enable Cloud KMS API
25+
resource "google_project_service" "cloudkms" {
26+
service = "cloudkms.googleapis.com"
27+
disable_on_destroy = false
28+
}
29+
30+
# Enable Eventarc API
31+
resource "google_project_service" "eventarc" {
32+
service = "eventarc.googleapis.com"
33+
disable_on_destroy = false
34+
}
35+
36+
# Enable Cloud Pub/Sub API
37+
resource "google_project_service" "pubsub" {
38+
service = "pubsub.googleapis.com"
39+
disable_on_destroy = false
40+
}
41+
# [END eventarc_advanced_terraform_cmek_apis]
42+
43+
# Used to retrieve project information later
44+
data "google_project" "default" {
45+
}
46+
47+
# [START eventarc_advanced_terraform_service_agent]
48+
resource "google_project_service_identity" "eventarc_sa" {
49+
provider = google-beta
50+
project = data.google_project.default.project_id
51+
service = "eventarc.googleapis.com"
52+
}
53+
# [END eventarc_advanced_terraform_service_agent]
54+
55+
# [START eventarc_advanced_terraform_cmek_key]
56+
resource "random_id" "default" {
57+
byte_length = 8
58+
}
59+
60+
# Create a Cloud KMS key ring
61+
resource "google_kms_key_ring" "default" {
62+
name = "${random_id.default.hex}-example-keyring"
63+
location = "us-central1"
64+
}
65+
66+
# Create a Cloud KMS key
67+
resource "google_kms_crypto_key" "default" {
68+
name = "example-key"
69+
key_ring = google_kms_key_ring.default.id
70+
rotation_period = "7776000s"
71+
}
72+
# [END eventarc_advanced_terraform_cmek_key]
73+
74+
# [START eventarc_advanced_terraform_cmek_role]
75+
# Grant service account access to Cloud KMS key
76+
resource "google_kms_crypto_key_iam_member" "default" {
77+
crypto_key_id = google_kms_crypto_key.default.id
78+
role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
79+
member = "serviceAccount:${google_project_service_identity.eventarc_sa.email}"
80+
}
81+
# [END eventarc_advanced_terraform_cmek_role]
82+
83+
# [START eventarc_advanced_terraform_cmek_bus]
84+
# Enable CMEK for an Eventarc Advanced bus
85+
resource "google_eventarc_message_bus" "default" {
86+
location = "us-central1"
87+
message_bus_id = "example-bus"
88+
crypto_key_name = google_kms_crypto_key.default.id
89+
depends_on = [google_kms_crypto_key_iam_member.default]
90+
}
91+
# [END eventarc_advanced_terraform_cmek_bus]
92+
93+
# [START eventarc_advanced_terraform_cmek_google_source]
94+
# Enable CMEK for Google API sources
95+
resource "google_eventarc_google_api_source" "default" {
96+
location = "us-central1"
97+
google_api_source_id = "example-google-api-source"
98+
destination = google_eventarc_message_bus.default.id
99+
crypto_key_name = google_kms_crypto_key.default.id
100+
depends_on = [google_kms_crypto_key_iam_member.default]
101+
}
102+
# [END eventarc_advanced_terraform_cmek_google_source]
103+
104+
# [START eventarc_advanced_terraform_cmek_network]
105+
# Create a network
106+
resource "google_compute_network" "default" {
107+
name = "example-network"
108+
auto_create_subnetworks = false
109+
}
110+
# [END eventarc_advanced_terraform_cmek_network]
111+
112+
# [START eventarc_advanced_terraform_cmek_subnet]
113+
# Create a subnetwork
114+
resource "google_compute_subnetwork" "default" {
115+
name = "example-subnetwork"
116+
region = "us-central1"
117+
network = google_compute_network.default.id
118+
ip_cidr_range = "10.8.0.0/24"
119+
private_ip_google_access = true
120+
}
121+
# [END eventarc_advanced_terraform_cmek_subnet]
122+
123+
# [START eventarc_advanced_terraform_cmek_netattach]
124+
# Create a network attachment
125+
resource "google_compute_network_attachment" "default" {
126+
name = "example-network-attachment"
127+
region = "us-central1"
128+
connection_preference = "ACCEPT_AUTOMATIC"
129+
subnetworks = [
130+
google_compute_subnetwork.default.self_link
131+
]
132+
}
133+
# [END eventarc_advanced_terraform_cmek_netattach]
134+
135+
# [START eventarc_advanced_terraform_cmek_topic]
136+
# Create a Pub/Sub topic
137+
resource "google_pubsub_topic" "default" {
138+
name = "example-topic"
139+
}
140+
# [END eventarc_advanced_terraform_cmek_topic]
141+
142+
# [START eventarc_advanced_terraform_cmek_pipeline]
143+
# Enable CMEK for an Eventarc Advanced pipeline
144+
resource "google_eventarc_pipeline" "default" {
145+
location = "us-central1"
146+
pipeline_id = "example-pipeline"
147+
crypto_key_name = google_kms_crypto_key.default.id
148+
depends_on = [google_kms_crypto_key_iam_member.default]
149+
destinations {
150+
topic = google_pubsub_topic.default.id
151+
network_config {
152+
network_attachment = google_compute_network_attachment.default.id
153+
}
154+
authentication_config {
155+
oauth_token {
156+
service_account = "${data.google_project.default.number}[email protected]"
157+
scope = "https://www.googleapis.com/auth/cloud-platform"
158+
}
159+
}
160+
}
161+
}
162+
# [END eventarc_advanced_terraform_cmek_pipeline]

0 commit comments

Comments
 (0)