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

feat!: Restricting autokey module to autokey configuration use case #163

Open
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

nb-goog
Copy link

@nb-goog nb-goog commented Nov 11, 2024

In this PR,

  1. Restricting autokey module function to only configure and enable autokey on an input folder number. Deleted configuration responsible for creating keyhandle from the input map.
  2. Added two examples
    2.1 for enabling autokey config on a project
    2.2 for creating a bucket using autokey

@nb-goog nb-goog requested a review from a team as a code owner November 11, 2024 12:00
@nb-goog nb-goog changed the title Restricting autokey module to autokey configuration use case feat: Restricting autokey module to autokey configuration use case Nov 11, 2024
@romanini-ciandt
Copy link
Member

/gcbrun

Copy link
Member

@romanini-ciandt romanini-ciandt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just for my own understanding, why is it better to keep google_kms_key_handle resource outside the terraform-google-kms module scope?

@@ -0,0 +1,25 @@
# Autokey Example
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/autokey-setup and /keyhandle-setup examples are not being executed by CI because of the current folder structure (examples/autokey/autokey_...).
The blueprint-test framework expect the examples to be directly behind examples/ folder. (At least using default configs. It's possible to override that with some changes in test files. Here's a reference.)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks for the info :)

moved the folders inside /examples directly and gave them relevant name.
Please take a look

@@ -0,0 +1,25 @@
# Autokey Example

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Importing Autokey Key Handles Guidance will be impacted with this PR. The migrating instructions provided there won't work anymore.

Since the changes in this PR are totally removing the Key Handle creation responsibility from terraform-google-kms module, I would recommend deleting that guidance file, since it won't make sense to provide an importing path to a resource that the KMS terraform module won't be creating/managing anymore. (If we delete that, we should also delete the scripts folder)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make sense, keeping this comment open till I have approval from all of you reviewers.

@@ -0,0 +1,25 @@
# Autokey Example

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need to update the existing autokey tests in order to make CI test the changes implemented in this PR.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you know how to run the test locally to verify its working?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Basically, you need to run a terraform apply in test/setup, and then go test -v in test/integration/autokey_example.

Here's the blueprint-test doc part explaining with more details!

examples/autokey/autokey-setup/README.md Outdated Show resolved Hide resolved
@nb-goog nb-goog changed the title feat: Restricting autokey module to autokey configuration use case feat!: Restricting autokey module to autokey configuration use case Nov 12, 2024
@nb-goog
Copy link
Author

nb-goog commented Nov 12, 2024

Just for my own understanding, why is it better to keep google_kms_key_handle resource outside the terraform-google-kms module scope?

KMS has two personas

  1. key admin
  2. Key users (developers, etc

key admin should only focus on key management policies and setups AND shouldnt have access to kms keys created.

The keyhandle creation and access to keys is for second persona (key users) thats why we are separating it out

@romanini-ciandt
Copy link
Member

Just for my own understanding, why is it better to keep google_kms_key_handle resource outside the terraform-google-kms module scope?

KMS has two personas

  1. key admin
  2. Key users (developers, etc

key admin should only focus on key management policies and setups AND shouldnt have access to kms keys created.

The keyhandle creation and access to keys is for second persona (key users) thats why we are separating it out

If the only motivation to cut google_kms_key_handle from KMS module is to handle the different personas, how about we implement a change that would accommodate that capability while still keep the benefits of the module?

Suggestion: we could turn google_kms_autokey_config creation optional when using autokey's submodule. google_kms_key_handle is already optional, based on user inputs. That way, key admins could use autokey's submodule passing the desired inputs to create just the Autokey Configuration, while key users could also use autokey's submodule but passing different inputs in order to just create the Key Handle.

To be more clear, the module's usage would be something like that:

# Key admins usage example
module "autokey" {
  source  = "terraform-google-modules/kms/google//modules/autokey"
  version = "3.1.0"

  project_id            = "project-bar"
  autokey_configuration_folder = "123456789"
  }
}

# Key users usage example
module "autokey" {
  source  = "terraform-google-modules/kms/google//modules/autokey"
  version = "3.1.0"

  autokey_handles = {
    storage_bucket = {
      name                   = "bucket-key-handle",
      project                = "project-foo",
      resource_type_selector = "storage.googleapis.com/Bucket",
      location               = "us-central1"
    },
    compute_disk = {
          name                   = "disk-key-handle",
          project                = "project-foo2",
          resource_type_selector = "compute.googleapis.com/Disk",
          location               = "us-central1"
    }
   # It would be possible to create multiple Key Handles here, if desired.
  }
}

Some benefits of using the KMS module approach:

  • Customers (key users) could create multiple Key Handles using a single terraform module call;
  • By using modules, customers could take leverage from "version", bringing more stability to their environments;
  • We can keep the instructions that would help customers to migrate from the old autokey module to this one;
  • We provide an opinionated way for customers to interact with terraform resources using a module, like most of the Google services have;

Let me know what you think about that!
Also, I'm available to implement this proposed change, if you think it's a good idea.

Thanks!

@@ -0,0 +1,50 @@
/**
Copy link
Member

@romanini-ciandt romanini-ciandt Nov 12, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This example won't be successfully applied in CI since it's missing the Autokey configuration resource in this file.

For blueprint-test, each example is applied individually and must be successful applied in order to pass.

@romanini-ciandt
Copy link
Member

/gcbrun

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants