きり丸の技術日記

技術検証したり、資格等をここに残していきます。

【障害】SentryのtracePropagationTargetsの指定を誤った

Sentryの設定を軽い気持ちで変更したところ大規模障害につながってしまったので、もう忘れないようにするためのメモ。

環境

  • @sentry/angular-ivy
    • 7.144.0

発生事象

S3へのファイルアップロードに失敗した。

原因

tracePropagationTargetsの指定を誤ってしまい、S3のファイルアップロード時にBaggageSentry-Traceのリクエストヘッダが付与されてしまったため。また、S3側でAccess-Control-Allow-Headersを指定していたので、BaggageSentry-Traceが付与されているとCORSエラーが発生して、HttpStatus403になっていました。

詳細

複数の検証環境を作り、検証環境名をサードレベルドメインに指定していました。

そのため、今後のことを考慮して、サードレベルドメインを正規表現で適用していました。

{
  "tracePropagationTargets": [
    "localhost",
    "https://example.com",
    "https://.*.example.com",
  ]
}

しかし、S3にファイルアップロードするURLには判別しやすいように、検証環境名のドメインを入れていました。

# URLイメージ
https://s3.ap-southeast-2/20240516-temporary.example.com
https://s3.ap-southeast-2/20240516-temporary.dev.example.com

これがhttps://.*.example.comの正規表現に引っかかってしまい、ファイルアップロード時に不要なリクエストヘッダが付与されてしまいました。

なお、正規表現の対象をOriginだけとしたい、とかは無理そうです。元々、tracingOriginsというオプションがありましたが、今回指定したtracePropagationTargetsに変更されています。

The tracingOrigins option was renamed tracePropagationTargets and deprecated in version 7.19.0 of the JavaScript SDK. tracingOrigins will be removed in version 8.

対策

比較したいのはURL全体ではなく、Origin部分だけではあるので、1単語だけヒットするような正規表現に変更しました。

https://\w+.example.com

ソースコード

なし。

終わりに

S3へのファイルアップロードをテストしなかったので、引っかかってしまいました。アプリケーションの範囲では動作確認していましたが、外部ストレージの範囲まではテストしていなかったのが落ち度です。

命名規則が頭に入っていれば検知できたと思いますが、ちゃんとE2Eで検証しないといけないということを痛感しました。

参考情報