Working with CSFLE with aws kms in java spring boot running application in aws lambda

Hi @MaBeuLux88_xxx ,

Thanks for responding. I have below code snippet for creating ClientEncryption object.

public static ClientEncryption clientEncryption() {
        LOGGER.info("=> Creating the MongoDB Key Vault Client.");
        MongoClientSettings mcs = MongoClientSettings.builder()
                .applyConnectionString(new ConnectionString(CONNECTION_STR))
                .build();
        ClientEncryptionSettings ces = ClientEncryptionSettings.builder()
                .keyVaultMongoClientSettings(mcs)
                .keyVaultNamespace(KEY_VAULT_NS.getFullName())
                .kmsProviders(new HashMap<>() {{
                    put("aws", new HashMap<>() {{
                        put("key", "arn:aws:kms:ap-south-1:85906757657:key/6a86s21c-889c-428f-adf4-3jhdf67f212c6");
                        put("provider", new BsonString("aws"));
                        put("region", new BsonString("ap-south-1"));
                    }});
                }})
                .build();
        ClientEncryption clientEncryption = ClientEncryptions.create(ces);
        LOGGER.info("Created the MongoDB Key Vault Client.");
        return clientEncryption;
    }

And I am getting below exception (Here I don’t want to pass access key and secrete key and instead I expect it to access the kms key using role based access provided):

	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1022)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:527)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885)
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:614)
	at com.amazonaws.serverless.proxy.internal.servlet.FilterChainManager$ServletExecutionFilter.doFilter(FilterChainManager.java:374)
	at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
	at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
	at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:154)
	at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:174)
	at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:47)
	at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxy(LambdaContainerHandler.java:214)
	at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxyStream(LambdaContainerHandler.java:257)
	at com.niyo.serverless.nsdl.pb.customer.StreamLambdaHandler.handleRequest(StreamLambdaHandler.java:46)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at com.amazonaws.services.lambda.runtime.api.client.EventHandlerLoader$StreamMethodRequestHandler.handleRequest(EventHandlerLoader.java:378)
	at com.amazonaws.services.lambda.runtime.api.client.EventHandlerLoader$2.call(EventHandlerLoader.java:905)
	at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:245)
	at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.startRuntime(AWSLambda.java:197)
	at com.amazonaws.services.lambda.runtime.api.client.AWSLambda.main(AWSLambda.java:187)
Caused by: com.mongodb.crypt.capi.MongoCryptException: expected UTF-8 aws.accessKeyId
1 Like