Skip to content

Commit 5b2b8d7

Browse files
authored
Check iKey length for live metrics iKey masking (Azure#44323)
1 parent c65c0ea commit 5b2b8d7

File tree

4 files changed

+27
-11
lines changed

4 files changed

+27
-11
lines changed

sdk/monitor/azure-monitor-opentelemetry-autoconfigure/checkstyle-suppressions.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,8 @@
271271
<suppress files="com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.CpuPerformanceCounterCalculator.java" checks="MissingJavadocTypeCheck" />
272272
<suppress files="com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.FormattedDuration.java" checks="MissingJavadocTypeCheck" />
273273
<suppress files="com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.FormattedTime.java" checks="MissingJavadocTypeCheck" />
274+
<suppress files="com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.IKeyMasker.java" checks="MissingJavadocTypeCheck" />
275+
<suppress files="com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.IKeyMasker.java" checks="MissingJavadocMethodCheck" />
274276
<suppress files="com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.HostName.java" checks="MissingJavadocTypeCheck" />
275277
<suppress files="com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.ResourceParser.java" checks="MissingJavadocTypeCheck" />
276278
<suppress files="com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.StatusCode.java" checks="MissingJavadocTypeCheck" />

sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/pipeline/TelemetryItemExporter.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.azure.monitor.opentelemetry.autoconfigure.implementation.models.ContextTagKeys;
1313
import com.azure.monitor.opentelemetry.autoconfigure.implementation.models.TelemetryItem;
1414
import com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.AksResourceAttributes;
15+
import com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.IKeyMasker;
1516
import io.opentelemetry.sdk.common.CompletableResultCode;
1617
import io.opentelemetry.sdk.resources.Resource;
1718
import io.opentelemetry.semconv.ServiceAttributes;
@@ -167,14 +168,8 @@ private static String toJson(List<TelemetryItem> telemetryItems) throws IOExcept
167168
private static String maskIKeys(List<TelemetryItem> telemetryItems, String json) {
168169
Set<String> iKeys
169170
= telemetryItems.stream().map(TelemetryItem::getInstrumentationKey).collect(Collectors.toSet());
170-
int charactersToKeepAtEnd = 13;
171171
for (String instrumentationKey : iKeys) {
172-
// Tests could set the connection string with a short one
173-
if (instrumentationKey.length() > charactersToKeepAtEnd) {
174-
String maskedIKey
175-
= "*" + instrumentationKey.substring(instrumentationKey.length() - charactersToKeepAtEnd);
176-
json = json.replace(instrumentationKey, maskedIKey);
177-
}
172+
json = json.replace(instrumentationKey, IKeyMasker.mask(instrumentationKey));
178173
}
179174
return json;
180175
}

sdk/monitor/azure-monitor-opentelemetry-autoconfigure/src/main/java/com/azure/monitor/opentelemetry/autoconfigure/implementation/quickpulse/QuickPulse.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.azure.monitor.opentelemetry.autoconfigure.implementation.quickpulse.swagger.LiveMetricsRestAPIsForClientSDKsBuilder;
1313
import com.azure.monitor.opentelemetry.autoconfigure.implementation.quickpulse.swagger.models.MonitoringDataPoint;
1414
import com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.HostName;
15+
import com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.IKeyMasker;
1516
import com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.Strings;
1617
import com.azure.monitor.opentelemetry.autoconfigure.implementation.utils.ThreadPoolUtils;
1718
import reactor.util.annotation.Nullable;
@@ -76,7 +77,8 @@ private void initialize(HttpPipeline httpPipeline, Supplier<URL> endpointUrl, Su
7677
if (LOGGER.canLogAtLevel(LogLevel.VERBOSE)) {
7778
LOGGER.verbose(
7879
"Initializing QuickPulse with instrumentation key: {} , URL {}, rolename {}, role instance {}, sdk version {}",
79-
maskIkey(instrumentationKey.get()), endpointUrl.get().toString(), roleName, roleInstance, sdkVersion);
80+
IKeyMasker.mask(instrumentationKey.get()), endpointUrl.get().toString(), roleName, roleInstance,
81+
sdkVersion);
8082
}
8183

8284
String quickPulseId = UUID.randomUUID().toString().replace("-", "");
@@ -131,7 +133,4 @@ private void initialize(HttpPipeline httpPipeline, Supplier<URL> endpointUrl, Su
131133
this.collector = collector;
132134
}
133135

134-
private String maskIkey(String ikey) {
135-
return "*" + ikey.substring(ikey.length() - 13);
136-
}
137136
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.azure.monitor.opentelemetry.autoconfigure.implementation.utils;
5+
6+
public final class IKeyMasker {
7+
8+
private static final int CHARACTERS_TO_KEEP_AT_END = 13;
9+
10+
private IKeyMasker() {
11+
}
12+
13+
public static String mask(String instrumentationKey) {
14+
// Tests could set the connection string with a short one
15+
if (instrumentationKey.length() > CHARACTERS_TO_KEEP_AT_END) {
16+
return "*" + instrumentationKey.substring(instrumentationKey.length() - CHARACTERS_TO_KEEP_AT_END);
17+
}
18+
return instrumentationKey;
19+
}
20+
}

0 commit comments

Comments
 (0)