Skip to content

Commit 162906e

Browse files
committed
fixed issue where sigv4 headers were not cleaned after each export request
1 parent fa9a211 commit 162906e

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

aws-distro-opentelemetry-node-autoinstrumentation/src/aws-opentelemetry-configurator.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,7 @@ export class AwsSpanProcessorProvider {
448448
return new OTLPHttpTraceExporter();
449449
case 'http/protobuf':
450450
if (otlp_exporter_traces_endpoint && isXrayOtlpEndpoint(otlp_exporter_traces_endpoint)) {
451+
diag.debug('Detected XRay OTLP Traces endpoint. Switching exporter to OtlpAwsSpanExporter');
451452
return new OTLPAwsSpanExporter(otlp_exporter_traces_endpoint);
452453
}
453454
return new OTLPProtoTraceExporter();
@@ -457,6 +458,7 @@ export class AwsSpanProcessorProvider {
457458
default:
458459
diag.warn(`Unsupported OTLP traces protocol: ${protocol}. Using http/protobuf.`);
459460
if (otlp_exporter_traces_endpoint && isXrayOtlpEndpoint(otlp_exporter_traces_endpoint)) {
461+
diag.debug('Detected XRay OTLP Traces endpoint. Switching exporter to OtlpAwsSpanExporter');
460462
return new OTLPAwsSpanExporter(otlp_exporter_traces_endpoint);
461463
}
462464
return new OTLPProtoTraceExporter();
@@ -672,3 +674,4 @@ function isXrayOtlpEndpoint(otlpEndpoint: string | undefined) {
672674
}
673675

674676
// END The OpenTelemetry Authors code
677+

aws-distro-opentelemetry-node-autoinstrumentation/src/otlp-aws-span-exporter.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
6666
path: url.pathname,
6767
body: serializedSpans,
6868
headers: {
69-
...oldHeaders,
69+
...this.removeSigV4Headers(oldHeaders),
7070
host: url.hostname,
7171
},
7272
});
@@ -93,6 +93,18 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
9393
await super.export(items, resultCallback);
9494
}
9595

96+
// Need to ensure old SigV4 headers do not remain when we inject new SigV4 authorization headers.
97+
private removeSigV4Headers(headers: Record<string, string>) {
98+
const newHeaders: Record<string, string> = {};
99+
100+
for (const key in headers) {
101+
if (!key.toLowerCase().startsWith('x-amz-') && key.toLowerCase() !== 'authorization') {
102+
newHeaders[key] = headers[key];
103+
}
104+
}
105+
return newHeaders;
106+
}
107+
96108
private initDependencies(): any {
97109
if (getNodeVersion() < 16) {
98110
diag.error('SigV4 signing requires atleast Node major version 16');
@@ -127,3 +139,4 @@ export class OTLPAwsSpanExporter extends OTLPProtoTraceExporter {
127139
return newConfig;
128140
}
129141
}
142+

0 commit comments

Comments
 (0)