Skip to content

Commit 8778ef8

Browse files
authored
BigQuery: support encryptionConfiguration in google_bigquery_data_transfer_config (#11478)
1 parent dd67281 commit 8778ef8

File tree

4 files changed

+157
-1
lines changed

4 files changed

+157
-1
lines changed

mmv1/.ruby-version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.1.0
1+
3.2.2

mmv1/products/bigquerydatatransfer/Config.yaml

+19
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,22 @@ examples:
4646
vars:
4747
display_name: 'my-query'
4848
dataset_id: 'my_dataset'
49+
- !ruby/object:Provider::Terraform::Examples
50+
name: 'bigquerydatatransfer_config_cmek'
51+
skip_test: true
52+
primary_resource_id: 'query_config_cmek'
53+
vars:
54+
dataset_id: 'example_dataset'
55+
key_name: 'example-key'
56+
keyring_name: 'example-keyring'
4957
- !ruby/object:Provider::Terraform::Examples
5058
skip_test: true
5159
name: 'bigquerydatatransfer_config_salesforce'
5260
primary_resource_id: 'salesforce_config'
5361
vars:
5462
display_name: 'my-salesforce-config'
5563
dataset_id: 'my_dataset'
64+
5665
parameters:
5766
- !ruby/object:Api::Type::String
5867
name: 'location'
@@ -172,6 +181,16 @@ properties:
172181
reingests data for [today-10, today-1], rather than ingesting data for
173182
just [today-1]. Only valid if the data source supports the feature.
174183
Set the value to 0 to use the default value.
184+
- !ruby/object:Api::Type::NestedObject
185+
name: 'encryptionConfiguration'
186+
description: |
187+
Represents the encryption configuration for a transfer.
188+
properties:
189+
- !ruby/object:Api::Type::String
190+
name: 'kmsKeyName'
191+
required: true
192+
description: |
193+
The name of the KMS key used for encrypting BigQuery data.
175194
- !ruby/object:Api::Type::Boolean
176195
name: 'disabled'
177196
description: |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
data "google_project" "project" {
2+
}
3+
4+
resource "google_project_iam_member" "permissions" {
5+
project = data.google_project.project.project_id
6+
role = "roles/iam.serviceAccountTokenCreator"
7+
member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com"
8+
}
9+
10+
resource "google_bigquery_data_transfer_config" "<%= ctx[:primary_resource_id] %>" {
11+
depends_on = [google_project_iam_member.permissions]
12+
13+
display_name = "<%= ctx[:vars]['display_name'] %>"
14+
location = "asia-northeast1"
15+
data_source_id = "scheduled_query"
16+
schedule = "first sunday of quarter 00:00"
17+
destination_dataset_id = google_bigquery_dataset.my_dataset.dataset_id
18+
params = {
19+
destination_table_name_template = "my_table"
20+
write_disposition = "WRITE_APPEND"
21+
query = "SELECT name FROM tabl WHERE x = 'y'"
22+
}
23+
24+
encryption_configuration {
25+
kms_key_name = google_kms_crypto_key.crypto_key.id
26+
}
27+
}
28+
29+
resource "google_bigquery_dataset" "my_dataset" {
30+
depends_on = [google_project_iam_member.permissions]
31+
32+
dataset_id = "<%= ctx[:vars]['dataset_id'] %>"
33+
friendly_name = "foo"
34+
description = "bar"
35+
location = "asia-northeast1"
36+
}
37+
38+
resource "google_kms_crypto_key" "crypto_key" {
39+
name = "<%= ctx[:vars]['key_name'] %>"
40+
key_ring = google_kms_key_ring.key_ring.id
41+
}
42+
43+
resource "google_kms_key_ring" "key_ring" {
44+
name = "<%= ctx[:vars]['keyring_name'] %>"
45+
location = "us"
46+
}

mmv1/third_party/terraform/services/bigquerydatatransfer/resource_bigquery_data_transfer_config_test.go

+91
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,29 @@ func testAccBigqueryDataTransferConfig_scheduledQuery_update(t *testing.T) {
384384
})
385385
}
386386

387+
func testAccBigqueryDataTransferConfig_CMEK(t *testing.T) {
388+
// Uses time.Now
389+
acctest.SkipIfVcr(t)
390+
random_suffix := acctest.RandString(t, 10)
391+
392+
acctest.VcrTest(t, resource.TestCase{
393+
PreCheck: func() { acctest.AccTestPreCheck(t) },
394+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
395+
CheckDestroy: testAccCheckBigqueryDataTransferConfigDestroyProducer(t),
396+
Steps: []resource.TestStep{
397+
{
398+
Config: testAccBigqueryDataTransferConfig_CMEK_basic(random_suffix),
399+
},
400+
{
401+
ResourceName: "google_bigquery_data_transfer_config.query_config",
402+
ImportState: true,
403+
ImportStateVerify: true,
404+
ImportStateVerifyIgnore: []string{"location"},
405+
},
406+
},
407+
})
408+
}
409+
387410
func testAccBigqueryDataTransferConfig_scheduledQuery_no_destination(t *testing.T) {
388411
// Uses time.Now
389412
acctest.SkipIfVcr(t)
@@ -768,6 +791,74 @@ resource "google_bigquery_data_transfer_config" "copy_config" {
768791
`, random_suffix, random_suffix, random_suffix)
769792
}
770793

794+
func testAccBigqueryDataTransferConfig_CMEK_basic(random_suffix string) string {
795+
return fmt.Sprintf(`
796+
data "google_project" "project" {
797+
}
798+
799+
resource "google_kms_key_ring" "example_keyring" {
800+
name = "keyring-test-%s"
801+
location = "us-central1"
802+
}
803+
804+
resource "google_kms_crypto_key" "example_crypto_key" {
805+
name = "crypto-key-%s"
806+
key_ring = google_kms_key_ring.example_keyring.id
807+
purpose = "ENCRYPT_DECRYPT"
808+
}
809+
810+
resource "google_service_account" "bqwriter%s" {
811+
account_id = "bqwriter%s"
812+
}
813+
814+
resource "google_project_iam_member" "data_editor" {
815+
project = data.google_project.project.project_id
816+
817+
role = "roles/bigquery.dataEditor"
818+
member = "serviceAccount:${google_service_account.bqwriter%s.email}"
819+
}
820+
821+
data "google_iam_policy" "owner" {
822+
binding {
823+
role = "roles/bigquery.dataOwner"
824+
825+
members = [
826+
"serviceAccount:${google_service_account.bqwriter%s.email}",
827+
]
828+
}
829+
}
830+
831+
resource "google_bigquery_dataset_iam_policy" "dataset" {
832+
dataset_id = google_bigquery_dataset.my_dataset.dataset_id
833+
policy_data = data.google_iam_policy.owner.policy_data
834+
}
835+
836+
resource "google_bigquery_data_transfer_config" "query_config" {
837+
depends_on = [ google_kms_crypto_key.example_crypto_key ]
838+
encryption_configuration {
839+
kms_key_name = google_kms_crypto_key.example_crypto_key.id
840+
}
841+
display_name = "my-query-%s"
842+
location = "us-central1"
843+
data_source_id = "scheduled_query"
844+
schedule = "first sunday of quarter 00:00"
845+
destination_dataset_id = google_bigquery_dataset.my_dataset.dataset_id
846+
params = {
847+
destination_table_name_template = "my_table"
848+
write_disposition = "WRITE_APPEND"
849+
query = "SELECT name FROM table WHERE x = 'y'"
850+
}
851+
}
852+
853+
resource "google_bigquery_dataset" "my_dataset" {
854+
dataset_id = "my_dataset_%s"
855+
friendly_name = "foo"
856+
description = "bar"
857+
location = "us-central1"
858+
}
859+
`, random_suffix, random_suffix, random_suffix, random_suffix, random_suffix, random_suffix, random_suffix, random_suffix)
860+
}
861+
771862
func testAccBigqueryDataTransferConfig_update_params_force_new(random_suffix, path, table string) string {
772863
return fmt.Sprintf(`
773864
resource "google_bigquery_dataset" "dataset" {

0 commit comments

Comments
 (0)