Collector のハードニング エピソード1: 新しいデフォルトバインドアドレス
Blog posts are not updated after publication. This post is more than a year old, so its content may be outdated, and some links may be invalid. Cross-verify any information before relying on it.
OpenTelemetry Collector は最近、CNCF がスポンサーし、OSTIF が仲介し、7ASecurity が実施したセキュリティ監査を受けました。 このプロセスの一環として、v0.102.1 で完全に修正された DoS 脆弱性に関するセキュリティアドバイザリを公開しました。
このセキュリティ監査は、公式の Collector ビルドを強化し、よりセキュアなデフォルト設定を実現する方法を検討するきっかけにもなりました。 監査で推奨されたいくつかのベストプラクティスの採用に取り組んでおり、コミュニティに情報を提供するために一連のブログ記事を公開する予定です。 レポートは近日中に公開される見込みですが、Collector が非常にセキュアであることが確認されたことに大変満足しており、すでに実施しているセキュアなコーディングプラクティスとプロセスが評価されたことを報告できます。
取り組んでいる変更の1つは、レシーバーや受信接続をリッスンするエクステンションなどが公開する Collector サーバーのデフォルトバインドアドレスの変更です。
v0.103.0 までは、サーバーアドレスに未指定アドレス 0.0.0.0 を使用してすべてのネットワークインターフェイスでリッスンするのがデフォルトの動作でした。
これはテストケースや開発環境では便利なデフォルトですが、Collector サーバーを不要なリスクにさらす可能性があるため、本番環境での推奨プラクティスではありません。
v0.104.0 以降、すべての Collector サーバーのデフォルトバインドアドレスは localhost になります。
ここに至るまでには長い道のりがありました。
CVE-2022-27664 に関連して v0.63.0(2022年9月)でこの議論を開始し、警告の追加とドキュメントの改善を行いました。
v0.94.0(2023年9月)では、ユーザーが新しい動作にオプトインできるよう、フィーチャーゲート component.UseLocalHostAsDefaultHost を追加しました。
最終的に、このフィーチャーゲートはセキュリティ監査と CVE-2024-36129 をきっかけに v0.104.0(2024年6月)でデフォルトで有効になりました。
何が変更されたか
v0.104.0 以降、Collector が公開するすべてのサーバーのデフォルトバインドアドレスは 0.0.0.0 ではなく localhost になりました。
たとえば、OTLP レシーバーの OTLP/gRPC および OTLP/HTTP のデフォルトエンドポイントは、それぞれ localhost:4317 と localhost:4318 になりました。
この変更の影響を受けるコンポーネントの全リストは以下のとおりです。
otlpレシーバーawsfirehoseレシーバーawsxrayレシーバーinfluxdbレシーバーjaegerレシーバーlokiレシーバーopencensusレシーバーsapmレシーバーsignalfxレシーバーskywalkingレシーバーsplunk_hecレシーバーzipkinレシーバーzookeeperレシーバーawsproxyエクステンションhealth_checkエクステンションjaegerremotesamplingエクステンションremotetapプロセッサー
不明な点がある場合は、各コンポーネントのドキュメントで新しいデフォルト値を確認してください。
OpenTelemetry Collector Helm Chart v0.47.1 以降、および OpenTelemetry Collector 公式 Docker イメージの v0.87.0 以降では、すべてのコンポーネントのデフォルト設定を更新し、エンドポイントを明示的な値に設定するようにしました。
自分にとってどのような影響があるか
デフォルト設定に依存している場合、Collector コンポーネントでエンドポイントを明示的に設定する必要があるかもしれません。 たとえば、OTLP レシーバーで以下の設定を使用している場合を考えます。
receivers:
otlp:
protocols:
grpc:
otlp::protocols::grpc::endpoint の設定項目を明示的に設定する必要があるかもしれません。
receivers:
otlp:
protocols:
grpc:
endpoint: ${env:HOST_IP}:4317
ここで HOST_IP 環境変数には、使用したいバインドアドレス(たとえば、Kubernetes の status.podIP)を設定します。
Collector Helm Chart および Collector Docker イメージの変更により、これらのいずれかでデフォルト設定を使用している場合は影響を受けません。
この変更にどう備えるか
v0.63.0 以降、Collector はエンドポイントが 0.0.0.0 アドレスを使用している場合に関連する警告をログに記録します。
アップグレード前に、この警告を確認して対処できます。
v0.94.0 から v0.103.0 までは、component.UseLocalHostAsDefaultHost フィーチャーゲートを有効化することで、この変更の影響を事前に確認することもできます。
この変更への対処は簡単なはずですが、影響を受けるコンポーネントの数が多いため、v0.104.0 以降は component.UseLocalHostAsDefaultHost フィーチャーゲートを無効化することで一時的にこの変更をオプトアウトし、自分のペースで対処を進めることができます。
このフィーチャーゲートは将来の Collector リリースで安定版としてマークされる予定のため、できるだけ早く対処することを推奨します。
今後の予定
セキュリティ監査で推奨されたベストプラクティスの採用に取り組みながら、コミュニティに情報を提供するためにさらにブログ記事を公開していきます。 これには、macOS での Collector バイナリのハードニングや、Collector サーバーのデフォルト動作のさらなる改善が含まれます。 今後の情報にご期待ください。