Mengamankan pipeline telemetry: TLS dan mTLS untuk koneksi OTLP, autentikasi via headers dan extension seperti bearer, oauth2clientcredential, dan basic auth, best practice hosting collector, serta redaksi PII dan penggunaan configopaque untuk nilai sensitif

Semakin banyak data dikirimkan, semakin menarik pula pipeline telemetry sebagai target. Bayangkan isinya: alur request internal, metadata service, dan kadang — jika hygiene kode buruk — data sensitif pelanggan. Episode 16 mengamankan seluruh jalur itu: enkripsi (TLS/mTLS), autentikasi (siapa yang boleh kirim), dan redaksi (apa yang boleh keluar).
Mengapa penting? Karena telemetry adalah data produksi yang sama nilainya dengan database. Backend observability yang terbuka tanpa auth adalah lubang kebocoran yang jarang disadari — dan PII di dalam trace adalah tanggung jawab hukum, bukan sekadar best practice.
Lalu lintas telemetry sebaiknya selalu lewat TLS — terutama saat melewati jaringan publik atau antar-region. Di collector, TLS dikonfigurasi per receiver/exporter:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
tls:
cert_file: /etc/otel/tls/server.crt
key_file: /etc/otel/tls/server.key
client_ca_file: /etc/otel/tls/ca.crt # untuk mTLSPada sisi SDK, aktifkan TLS dengan memakai endpoint https:// atau tls: di config exporter:
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
exporter = OTLPSpanExporter(
endpoint="https://collector.internal:4317",
credentials=ssl_channel_credentials(),
)TLS biasa hanya mengautentikasi server ke client. Untuk lingkungan internal yang ketat, mTLS mengautentikasi kedua arah — client juga harus menunjukkan sertifikat yang valid:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
tls:
cert_file: /etc/otel/tls/server.crt
key_file: /etc/otel/tls/server.key
client_ca_file: /etc/otel/tls/ca.crt
require_and_verify_client_cert: trueDengan require_and_verify_client_cert: true, hanya client yang punya sertifikat dari CA kalian yang bisa mengirim telemetry — jaringan internal yang tidak membocorkan data ke siapa pun.
Untuk lingkungan yang tidak memakai mTLS, autentikasi dilakukan lewat header HTTP/gRPC metadata.
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
auth:
authenticator: basicauth/server
extensions:
basicauth/server:
htpasswd:
inline: |
user1:$2y$10$...Extension basicauth, bearertokenauth, dan oauth2clientcredential adalah tiga cara paling umum. Yang menarik: autentikasi dipasang sebagai extension dan dirujuk di auth.authenticator — memisahkan mekanisme auth dari konfigurasi pipeline.
Saat collector mengirim ke observability SaaS (seperti Grafana Cloud atau vendor OTLP), biasanya butuh OAuth2 client credentials:
extensions:
oauth2clientcredential:
client_id: ${env:OTEL_CLIENT_ID}
client_secret: ${env:OTEL_CLIENT_SECRET}
token_url: https://auth.vendor.com/oauth2/token
exporters:
otlp/vendor:
endpoint: https://otlp.vendor.com:443
auth:
authenticator: oauth2clientcredentialSaat menempatkan collector di produksi:
Warning
Jangan pernah menyimpan token, API key, atau password di dalam file config collector yang masuk git. Gunakan expansion ${env:VAR} untuk membaca dari environment variable atau secret manager, dan redaksi nilai yang terlanjur muncul di config dengan configopaque.
Atribut configopaque memberi tahu collector bahwa sebuah nilai adalah secret — sehingga tidak dicetak di log konfigurasi saat level debug. Contoh:
extensions:
bearertokenauth:
token:
${env:OTEL_TOKEN} # dari env, aman
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
auth:
authenticator: bearertokenauthSaat config di-log (misal saat --validate atau debug), nilai dengan configopaque akan muncul sebagai <opaque>, bukan nilai aslinya.
Selain redaction processor (episode 12), dua lapis perlindungan tambahan:
redaction processor sebagai jaring terakhir, plus filter untuk membuang log yang tidak perlu.Gunakan OTTL transform processor untuk redaksi lebih presisi:
processors:
transform/redact:
error_mode: ignore
trace_statements:
- context: span
statements:
- delete_key(attributes, "user.email")
- replace_pattern(attributes["user.phone"], "[0-9]", "*")Tip
Aturan emas keamanan telemetry: jangan pernah mengandalkan satu lapis. Enkripsi mencegah penyadapan, auth mencegah penyalahgunaan, redaksi mencegah kebocoran data yang sudah terlanjur dihasilkan. Ketiganya bekerja bersama — hilang satu, dua lainnya hanya menunda masalah.
grpcurl dulu.${env:...}.Pada episode 16 ini, kalian telah mengamankan seluruh jalur telemetry.
Inti yang harus dibawa pulang:
basicauth, bearertokenauth, oauth2clientcredential; pasang sebagai authenticator.${env:...} + configopaque untuk secret, dan redaksi PII di semua lapis.Di episode 17 selanjutnya, kita akan membahas data correlation: metrics + logs + traces — menyatukan tiga pilar via trace_id dan metrics exemplar, workflow SRE alerting → trace → log, serta satu pipeline OTLP untuk ketiga sinyal menuju backend LGTM/Jaeger. Sampai jumpa di episode 17!