-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Add VaultKmsClient as an example KMS client implementation #4080
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
Conversation
Encryption keys managed in Hashicorp Vault by its transit engine.
|
Why can't it be used in production, and what if I want to use it in production? Can you help me understand? |
Hi @liujinhui1994 . This can be used as the basis for the production-grade KMS client. However, some of the reasons for this not being production-ready, in no specific order:
|
|
@andersonm-ibm Please help me understand #3470 why not use parquet KMSClient here but wrap one myself. |
If I understand correctly your question, you're asking why do we have a separate KmsClient interface in Iceberg, different from the one defined in parquet. |
And, of course, a large and important missing part here is token lifecycle management. |
I think the url is better set as a table property |
| /** | ||
| * Property name for Vault access token. | ||
| */ | ||
| public static final String ACCESS_TOKEN_PROP = "keystore.kms.client.access.token"; |
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.
"keystore" -> "vault" ?
| /** | ||
| * Property name for Vault instance URL | ||
| */ | ||
| public static final String KMS_INSTANCE_URL_PROP = "keystore.kms.client.instance.url"; |
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.
"keystore" -> "vault" ? or even "kms.client.vault.instance.url"?
Agreed, though something like a ramdisk file can be better than a hadoop property (easier to refresh the token contents once in TTL, and less dependency on hadoop; the latter though should not be a big issue in a sample) |
We build a general key management layer in Iceberg encryption, that will work for all Iceberg data formats, so it should not depend on parquet. Also, this KmsClient is cleaner and more intuitive than what we have in parquet-mr. |
…n for kms client table properties.
|
This pull request has been marked as stale due to 30 days of inactivity. It will be closed in 1 week if no further activity occurs. If you think that’s incorrect or this pull request requires a review, please simply write any comment. If closed, you can revive the PR at any time and @mention a reviewer or discuss it on the [email protected] list. Thank you for your contributions. |
|
This pull request has been closed due to lack of activity. This is not a judgement on the merit of the PR in any way. It is just a way of keeping the PR queue manageable. If you think that is incorrect, or the pull request requires review, you can revive the PR at any time. |
An implementation of the KmsClient API where master encryption keys are managed in Hashicorp Vault by its transit engine.
The KMS client is configured with table properties:
The token is passed as a table property and not as an environment variable because of consistency. Security of the token is less of an issue here than in a file keystore, since it should be a non-root token that has a time-to-live (TTL). However, a RAM disk or tmpfs can be used to store the file with the token.
This PR depends on the encryption PRs, in particular the KMS client interface : #3470.
@ggershinsky