Skip to content

Commit ae4de64

Browse files
litianningdatadogdevflow.devflow-routing-intake
andauthored
feat: enable secure random ID generation for AWS Lambda MicroVM environments (#11622)
feat: enable secure random ID generation for AWS Lambda MicroVM environments When AWS_LAMBDA_MICROVM_IMAGE_ARN is set, force SecureRandom for trace/span ID generation — the same treatment already applied for snap-start environments, where snapshot-resumed instances would otherwise produce predictable IDs. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: devflow.devflow-routing-intake <devflow.devflow-routing-intake@kubernetes.us1.ddbuild.io>
1 parent 8d7d2e4 commit ae4de64

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1516,7 +1516,9 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
15161516
configProvider.getBoolean(WRITER_BAGGAGE_INJECT, isDatadogTraceWriter);
15171517
injectLinksAsTagsEnabled = configProvider.getBoolean(WRITER_LINKS_INJECT, isDatadogTraceWriter);
15181518
String lambdaInitType = getEnv("AWS_LAMBDA_INITIALIZATION_TYPE");
1519-
if (lambdaInitType != null && lambdaInitType.equals("snap-start")) {
1519+
String lambdaMicrovmImageArn = ConfigHelper.env("AWS_LAMBDA_MICROVM_IMAGE_ARN");
1520+
if ((lambdaInitType != null && lambdaInitType.equals("snap-start"))
1521+
|| (lambdaMicrovmImageArn != null && !lambdaMicrovmImageArn.isEmpty())) {
15201522
secureRandom = true;
15211523
} else {
15221524
secureRandom = configProvider.getBoolean(SECURE_RANDOM, DEFAULT_SECURE_RANDOM);
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package datadog.trace.api;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
5+
6+
import datadog.trace.junit.utils.config.WithConfig;
7+
import datadog.trace.junit.utils.config.WithConfigExtension;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.ExtendWith;
10+
11+
@ExtendWith(WithConfigExtension.class)
12+
class ConfigSecureRandomTest {
13+
14+
@Test
15+
void defaultStrategyIsRandom() {
16+
assertNotEquals("SRandom", Config.get().getIdGenerationStrategy().getClass().getSimpleName());
17+
}
18+
19+
@Test
20+
void snapStartEnablesSecureRandom() {
21+
WithConfigExtension.injectEnvConfig("AWS_LAMBDA_INITIALIZATION_TYPE", "snap-start", false);
22+
23+
assertEquals("SRandom", Config.get().getIdGenerationStrategy().getClass().getSimpleName());
24+
}
25+
26+
@Test
27+
void microvmImageArnEnablesSecureRandom() {
28+
WithConfigExtension.injectEnvConfig(
29+
"AWS_LAMBDA_MICROVM_IMAGE_ARN", "arn:aws:lambda:us-east-1::runtime:microvm", false);
30+
31+
assertEquals("SRandom", Config.get().getIdGenerationStrategy().getClass().getSimpleName());
32+
}
33+
34+
@Test
35+
void emptyMicrovmImageArnDoesNotEnableSecureRandom() {
36+
WithConfigExtension.injectEnvConfig("AWS_LAMBDA_MICROVM_IMAGE_ARN", "", false);
37+
38+
assertNotEquals("SRandom", Config.get().getIdGenerationStrategy().getClass().getSimpleName());
39+
}
40+
41+
@Test
42+
@WithConfig(key = "trace.secure-random", value = "true")
43+
void configPropertyEnablesSecureRandom() {
44+
assertEquals("SRandom", Config.get().getIdGenerationStrategy().getClass().getSimpleName());
45+
}
46+
}

0 commit comments

Comments
 (0)