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

Early check for dependency when set kmsKeyId #398

Closed
wants to merge 3 commits into from
Closed

Conversation

hieuwu
Copy link
Contributor

@hieuwu hieuwu commented Oct 31, 2024

Issue #397, if available:
Got exception when run test and run application when provide S3EncryptionClient with kms

Caused by: java.lang.NoClassDefFoundError: software/amazon/awssdk/services/kms/KmsClient
	at software.amazon.encryption.s3.S3EncryptionClient$Builder.build(S3EncryptionClient.java:1142)

The root cause of the problem is that kmsClient class comes from different dependencies, while other type of security key is in the same package of the SDK.

Description of changes:
Check for existence of KmsClient class when kmsKeyId is set.
This would help developer easier to troubleshoot the problem & take proper action

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Check any applicable:

  • Were any files moved? Moving files changes their URL, which breaks all hyperlinks to the files.

@hieuwu hieuwu requested a review from a team as a code owner October 31, 2024 15:29
Comment on lines 1147 to 1149
KmsClient kmsClient = KmsClient.builder()
.credentialsProvider(_awsCredentialsProvider)
.region(_region)
Copy link
Contributor

Choose a reason for hiding this comment

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

I do not think this check is sufficient to prevent the exception.
The KMS Client is an import of this class.

I think the Java Compiled Byte Code will require KMS,
even if a KMS key is not passed,
because the Java class has references to the objects.

But I could be wrong;
Maybe the Java compiler is fancier than I thought,
and masks the KMS objects unless this if statement is encountered?

@hieuwu did you run a test that proved that this mitigates your issue?

Because the current testing of the S3EC will not cover this.

Copy link
Contributor Author

@hieuwu hieuwu Nov 1, 2024

Choose a reason for hiding this comment

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

@texastony I got the same issue when run the app. As kms is dependency of S3EC, I would expect that it should fail at Compile Time. However the build is still successful, the exception is thrown only we start running the app or test.

Screenshot 2024-11-01 at 07 12 42

I have removed the check. Also I have tried making software.amazon.awssdk:kms not optional, the lib works as expected, no exception thrown and we do not need to add additional dependency.

Copy link
Contributor

Choose a reason for hiding this comment

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

I suspect this is the correct fix.
I'll approve CI run.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Great, thank you Tony

@hieuwu hieuwu requested a review from texastony November 1, 2024 02:18
@texastony
Copy link
Contributor

Ahh, I'll will have to make this a first party PR, as compared to a 3rd party.

We have had trouble with 3rd parties trying to bit coin mine via our CI, so it only runs if the PR is from the same repo.

I'll take care of this.

@texastony texastony mentioned this pull request Nov 1, 2024
1 task
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