Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spanner MR CMEK Integration #11319

Open
wants to merge 21 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
b43da49
Update Database.yaml
panerorenn9541 Jul 31, 2024
a7e959f
Change kms_key_names to kmsKeyNames in description
panerorenn9541 Jul 31, 2024
0f58e19
Update resource_spanner_database_test.go.erb
panerorenn9541 Aug 1, 2024
be9a029
Merge pull request #1 from panerorenn9541/mr-cmek-integration
panerorenn9541 Aug 1, 2024
4a0d02f
Merge branch 'GoogleCloudPlatform:main' into main
panerorenn9541 Aug 1, 2024
50929aa
Update Database.yaml
panerorenn9541 Aug 5, 2024
aed43a4
Merge branch 'GoogleCloudPlatform:main' into main
panerorenn9541 Aug 5, 2024
0a04792
Add item_type to kmsKeyNames array.
panerorenn9541 Aug 7, 2024
7865541
Merge branch 'GoogleCloudPlatform:main' into main
panerorenn9541 Aug 7, 2024
8687ccc
Remove quotations from key names in resource_spanner_database_test.go…
panerorenn9541 Aug 9, 2024
8b8764a
Merge branch 'GoogleCloudPlatform:main' into main
panerorenn9541 Aug 9, 2024
f58f858
merge-with-main
ScottSuarez Oct 8, 2024
3b28000
migrate pull request and fix test case/documentation
ScottSuarez Oct 8, 2024
95d98d7
Don't read kms_key_names if kms_key_name is set
ScottSuarez Oct 8, 2024
37586d6
Update permadiff.md
panerorenn9541 Oct 10, 2024
5795610
Update permadiff.md
panerorenn9541 Oct 11, 2024
084a6a0
Update Database.yaml
panerorenn9541 Oct 11, 2024
0c0c9e5
Update mmv1/templates/terraform/custom_flatten/spanner_database_kms_k…
panerorenn9541 Oct 11, 2024
b416e1d
Update spanner_database_kms_key_names.go.tmpl
panerorenn9541 Oct 11, 2024
e2144b4
Update resource_spanner_database_test.go.tmpl
panerorenn9541 Oct 11, 2024
2887416
Update resource_spanner_database_test.go.tmpl
panerorenn9541 Oct 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion mmv1/products/spanner/Database.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,23 @@ properties:
- !ruby/object:Api::Type::String
name: 'kmsKeyName'
immutable: true
required: true
panerorenn9541 marked this conversation as resolved.
Show resolved Hide resolved
description: |
Fully qualified name of the KMS key to use to encrypt this database. This key must exist
in the same location as the Spanner Database.
exactly_one_of:
- kmsKeyName
- kmsKeyNames
- !ruby/object:Api::Type::Array
panerorenn9541 marked this conversation as resolved.
Show resolved Hide resolved
name: 'kmsKeyNames'
immutable: true
description: |
Fully qualified names of the KMS keys to use to encrypt this database. The keys
referenced by kmsKeyNames must fully cover all regions of the database
instance configuration.
item_type: Api::Type::String
exactly_one_of:
- kmsKeyName
- kmsKeyNames
- !ruby/object:Api::Type::Enum
name: 'databaseDialect'
immutable: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,141 @@ resource "google_project_service_identity" "ck_sa" {
service = "spanner.googleapis.com"
}

`, context)
}

func TestAccSpannerDatabase_mrcmek(t *testing.T) {
acctest.SkipIfVcr(t)
ScottSuarez marked this conversation as resolved.
Show resolved Hide resolved
t.Parallel()

context := map[string]interface{}{
"random_suffix": acctest.RandString(t, 10),
}

acctest.VcrTest(t, resource.TestCase{
PreCheck: func() { acctest.AccTestPreCheck(t) },
ProtoV5ProviderFactories: acctest.ProtoV5ProviderBetaFactories(t),
CheckDestroy: testAccCheckSpannerDatabaseDestroyProducer(t),
Steps: []resource.TestStep{
{
Config: testAccSpannerDatabase_mrcmek(context),
},
{
ResourceName: "google_spanner_database.database",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"ddl", "deletion_protection"},
},
},
})
}

func testAccSpannerDatabase_mrcmek(context map[string]interface{}) string {
return acctest.Nprintf(`
resource "google_spanner_instance" "main" {
provider = google-beta
config = "nam3"
display_name = "main-instance1"
num_nodes = 1
}

resource "google_spanner_database" "database" {
provider = google-beta
instance = google_spanner_instance.main.name
name = "tf-test-mrcmek-db%{random_suffix}"
ddl = [
"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)",
"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)",
]

encryption_config {
kms_key_names = [
"google_kms_crypto_key.example-key-us-central1.id",
"google_kms_crypto_key.example-key-us-east1.id",
"google_kms_crypto_key.example-key-us-east4.id",
]
}

deletion_protection = false

depends_on = [google_kms_crypto_key_iam_member.crypto-key-binding-us-central1,
google_kms_crypto_key_iam_member.crypto-key-binding-us-east1,
google_kms_crypto_key_iam_member.crypto-key-binding-us-east4,]
}

resource "google_kms_key_ring" "keyring-us-central1" {
provider = google-beta
name = "tf-test-ring%{random_suffix}"
location = "us-central1"
}

resource "google_kms_crypto_key" "example-key-us-central1" {
provider = google-beta
name = "tf-test-key%{random_suffix}"
key_ring = google_kms_key_ring.keyring-us-central1.id
rotation_period = "100000s"
}

resource "google_kms_crypto_key_iam_member" "crypto-key-binding-us-central1" {
provider = google-beta
crypto_key_id = google_kms_crypto_key.example-key-us-central1.id
role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

member = google_project_service_identity.ck_sa.member
}

resource "google_kms_key_ring" "keyring-us-east1" {
provider = google-beta
name = "tf-test-ring%{random_suffix}"
location = "us-east1"
}

resource "google_kms_crypto_key" "example-key-us-east1" {
provider = google-beta
name = "tf-test-key%{random_suffix}"
key_ring = google_kms_key_ring.keyring-us-east1.id
rotation_period = "100000s"
}

resource "google_kms_crypto_key_iam_member" "crypto-key-binding-us-east1" {
provider = google-beta
crypto_key_id = google_kms_crypto_key.example-key-us-east1.id
role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

member = google_project_service_identity.ck_sa.member
}

resource "google_kms_key_ring" "keyring-us-east4" {
provider = google-beta
name = "tf-test-ring%{random_suffix}"
location = "us-east4"
}

resource "google_kms_crypto_key" "example-key-us-east4" {
provider = google-beta
name = "tf-test-key%{random_suffix}"
key_ring = google_kms_key_ring.keyring-us-east4.id
rotation_period = "100000s"
}

resource "google_kms_crypto_key_iam_member" "crypto-key-binding-us-east4" {
provider = google-beta
crypto_key_id = google_kms_crypto_key.example-key-us-east4.id
role = "roles/cloudkms.cryptoKeyEncrypterDecrypter"

member = google_project_service_identity.ck_sa.member
}

data "google_project" "project" {
provider = google-beta
}

resource "google_project_service_identity" "ck_sa" {
provider = google-beta
project = data.google_project.project.project_id
service = "spanner.googleapis.com"
}

`, context)
}
<% end -%>
Loading