Sentryの設定を軽い気持ちで変更したところ大規模障害につながってしまったので、もう忘れないようにするためのメモ。
環境
- @sentry/angular-ivy
- 7.144.0
発生事象
S3へのファイルアップロードに失敗した。
原因
tracePropagationTargets
の指定を誤ってしまい、S3のファイルアップロード時にBaggage
とSentry-Trace
のリクエストヘッダが付与されてしまったため。また、S3側でAccess-Control-Allow-Headers
を指定していたので、Baggage
とSentry-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で検証しないといけないということを痛感しました。