Skip to content

Commit 770734c

Browse files
authored
Add exclusion predefined redaction keywords (#7457)
In the list of predefined keywords some of them could be too generic or wanted see the content of a session for example. introduced the config parameter DD_DYNAMIC_ISTRUMENTATION_REDACTION_EXCLUDED_IDENTIFIERS for a comma list of identifiers you want to exclude from redacted keywords
1 parent 94bf2dd commit 770734c

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/util/Redaction.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,15 @@ public class Redaction {
110110
private static List<String> redactedPackages;
111111

112112
static {
113+
initKeywords();
114+
}
115+
116+
static void initKeywords() {
113117
/*
114118
* based on sentry list: https://github.com/getsentry/sentry-python/blob/fefb454287b771ac31db4e30fa459d9be2f977b8/sentry_sdk/scrubber.py#L17-L58
115119
*/
116120
KEYWORDS.addAll(PREDEFINED_KEYWORDS);
121+
KEYWORDS.removeAll(Config.get().getDebuggerRedactionExcludedIdentifiers());
117122
}
118123

119124
public static void addUserDefinedKeywords(Config config) {

dd-java-agent/agent-debugger/debugger-bootstrap/src/test/java/datadog/trace/bootstrap/debugger/util/RedactionTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
import datadog.trace.api.Config;
66
import java.lang.reflect.Field;
7+
import java.util.Arrays;
8+
import java.util.Collections;
9+
import java.util.HashSet;
710
import org.junit.jupiter.api.Test;
811

912
class RedactionTest {
@@ -48,6 +51,20 @@ public void userDefinedTypes() {
4851
}
4952
}
5053

54+
@Test
55+
public void exclusions() {
56+
Config config = Config.get();
57+
setFieldInConfig(
58+
config, "debuggerRedactionExcludedIdentifiers", new HashSet<>(Arrays.asList("password")));
59+
Redaction.initKeywords();
60+
try {
61+
assertFalse(Redaction.isRedactedKeyword("password"));
62+
} finally {
63+
setFieldInConfig(config, "debuggerRedactionExcludedIdentifiers", Collections.emptySet());
64+
Redaction.initKeywords();
65+
}
66+
}
67+
5168
private static void setFieldInConfig(Config config, String fieldName, Object value) {
5269
try {
5370
Field field = config.getClass().getDeclaredField(fieldName);

dd-trace-api/src/main/java/datadog/trace/api/config/DebuggerConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public final class DebuggerConfig {
2424
public static final String DEBUGGER_CAPTURE_TIMEOUT = "dynamic.instrumentation.capture.timeout";
2525
public static final String DEBUGGER_REDACTED_IDENTIFIERS =
2626
"dynamic.instrumentation.redacted.identifiers";
27+
public static final String DEBUGGER_REDACTION_EXCLUDED_IDENTIFIERS =
28+
"dynamic.instrumentation.redaction.excluded.identifiers";
2729
public static final String DEBUGGER_REDACTED_TYPES = "dynamic.instrumentation.redacted.types";
2830
public static final String DEBUGGER_SYMBOL_ENABLED = "symbol.database.upload.enabled";
2931
public static final String DEBUGGER_SYMBOL_FORCE_UPLOAD = "internal.force.symbol.database.upload";

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@
235235
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_PROBE_FILE_LOCATION;
236236
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_REDACTED_IDENTIFIERS;
237237
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_REDACTED_TYPES;
238+
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_REDACTION_EXCLUDED_IDENTIFIERS;
238239
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_SPAN_DEBUG_ENABLED;
239240
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_SYMBOL_ENABLED;
240241
import static datadog.trace.api.config.DebuggerConfig.DEBUGGER_SYMBOL_FLUSH_THRESHOLD;
@@ -872,6 +873,7 @@ public static String getHostName() {
872873
private final String debuggerExcludeFiles;
873874
private final int debuggerCaptureTimeout;
874875
private final String debuggerRedactedIdentifiers;
876+
private final Set<String> debuggerRedactionExcludedIdentifiers;
875877
private final String debuggerRedactedTypes;
876878
private final boolean debuggerSymbolEnabled;
877879
private final boolean debuggerSymbolForceUpload;
@@ -1970,6 +1972,8 @@ PROFILING_DATADOG_PROFILER_ENABLED, isDatadogProfilerSafeInCurrentEnvironment())
19701972
debuggerCaptureTimeout =
19711973
configProvider.getInteger(DEBUGGER_CAPTURE_TIMEOUT, DEFAULT_DEBUGGER_CAPTURE_TIMEOUT);
19721974
debuggerRedactedIdentifiers = configProvider.getString(DEBUGGER_REDACTED_IDENTIFIERS, null);
1975+
debuggerRedactionExcludedIdentifiers =
1976+
tryMakeImmutableSet(configProvider.getList(DEBUGGER_REDACTION_EXCLUDED_IDENTIFIERS));
19731977
debuggerRedactedTypes = configProvider.getString(DEBUGGER_REDACTED_TYPES, null);
19741978
debuggerSymbolEnabled =
19751979
configProvider.getBoolean(DEBUGGER_SYMBOL_ENABLED, DEFAULT_DEBUGGER_SYMBOL_ENABLED);
@@ -3424,6 +3428,10 @@ public String getDebuggerRedactedIdentifiers() {
34243428
return debuggerRedactedIdentifiers;
34253429
}
34263430

3431+
public Set<String> getDebuggerRedactionExcludedIdentifiers() {
3432+
return debuggerRedactionExcludedIdentifiers;
3433+
}
3434+
34273435
public String getDebuggerRedactedTypes() {
34283436
return debuggerRedactedTypes;
34293437
}

0 commit comments

Comments
 (0)