-
Notifications
You must be signed in to change notification settings - Fork 237
API-1844: KMS Encryption Provider #1876
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
base: master
Are you sure you want to change the base?
Conversation
Skipping CI for Draft Pull Request. |
@swghosh: This pull request references API-1844 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the task to target the "4.18.0" version, but no target version was set. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
43294a8
to
677ab37
Compare
677ab37
to
4968a88
Compare
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: swghosh The full list of commands accepted by this bot can be found here.
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
/cc @dgrisonnet @tkashem |
d14c5f3
to
6a60a7d
Compare
6a60a7d
to
e082942
Compare
e082942
to
be708f1
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some high level design comments.
I am mostly wandering if instead of continuing in the route of generate key secret like we do for the other encryption providers, we could instead rely on a KMS config secret/CM that the existing state machines would look for similarly to what they are already doing with key secrets
@@ -159,7 +161,7 @@ func (c *keyController) sync(ctx context.Context, syncCtx factory.SyncContext) ( | |||
} | |||
|
|||
func (c *keyController) checkAndCreateKeys(ctx context.Context, syncContext factory.SyncContext, encryptedGRs []schema.GroupResource) error { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was looking at your change to the key controller and the more I am thinking about it the more I think we should handle local keys and kms keys differently. A lot of the existing key controller logic is about generating the key and backing it. Whereas for KMS we want to generating a plugin config and backing it up.
Because of that, I think it would be more appropriate to create a new controller for KMS. wdyt?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually, there is one particular logic for which we will need the keyController and a new key state which is when the key is rotated on the external KMS.
When that happens we the KMS plugin will returned a new key_id
in the responses: https://github.com/kubernetes/enhancements/tree/master/keps/sig-auth/3299-kms-v2-improvements#key_id-and-rotation.
In our case to handle that scenario we want the keyController to probe the Status
procedure call and create a new key secret when the key_id changes to trigger a storage migration.
I recall discussing that with you in the past and we agreed that this could be done at a later point, but looking at your PR, was the intent behind your key controller changes to act as a placeholder to include that logic later?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was looking at your change to the key controller and the more I am thinking about it the more I think we should handle local keys and kms keys differently. A lot of the existing key controller logic is about generating the key and backing it. Whereas for KMS we want to generating a plugin config and backing it up.
Reasonably, we can follow-up with this when we add a new controller to manage the lifecycle of kms-plugin itself. Because then we'd need to update the status somewhere to list active KMS config hashes for the plugin controller to spin up unix sockets.
Signed-off-by: Swarup Ghosh <swghosh@redhat.com>
be708f1
to
dfe4f7c
Compare
we're already doing that: we keep track of the KMSConfig set in the The related details/implementation would be in |
86fdb3a
to
394ad47
Compare
Previous failure was CI infra related, when cluster failed to come up. /retest |
Signed-off-by: Swarup Ghosh <swghosh@redhat.com>
394ad47
to
be61b4a
Compare
@swghosh: all tests passed! Full PR test history. Your PR dashboard. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
Add support for KMS to existing encryption controller(s)