🙄

Slackなどのチャット連携でAmazon SNSが意図せず購読される原因と回避策

に公開

サマリ

システム警報の通知などでAmazon SNSを利用しつつ、メーリングリストなどを併用するケースがあります。このとき、unsubscribeを無効化する設定を行うことがありますが、Slack経由で設定用URLを共有すると、意図せず購読が有効化されてしまう事象が発生することがあります。
この記事では、その原因と回避策を解説します。

参考:
Amazon SNS Unsubscribeリンクを無効化する設定

ハマった事象

お客様のメーリングリストをSNSの警報通知先に登録しようとした際、以下の手順で問題が起こりました。

  1. お客様からメーリングリストのアドレスを受け取る
  2. Amazon SNSから送られてきた購読登録用URLをSlackで共有
  3. メーリングリストが意図せずSNSに購読登録されてしまう

なぜそうなるか?

前提 Aamazon SNSの購読処理

SNS購読の仕組み
Amazon SNSのEmailプロトコルによるSubscriptionは、以下の流れで有効化されます。
https://sns.../confirm?...
この URLをクリックする と購読が有効化される

登録用リンクをSlackで共有すると、Slackはプレビュー(タイトルやメタ情報)を生成するために、HTTP GETリクエストを対象URLに送信 します。
結果として、人間がクリックしていないのに購読が自動承認されてしまうのです。

Link Unfurlingとは、URLをHTTP GETリクエストで展開してページのメタデータ(タイトル、説明、OGP画像など)を取得し、チャット内にプレビュー表示する機能です。

類似問題として

MS Teams、Discord、Facebook Messenger でも発生するようです。URLプレビュー機能=Link unfuring があるものは多分だめではないかと思います。

回避方法

  • SlackでやるならコードブロックやTextブロックを利用する。(URLにならないように先頭のHTTPを消すなども)
  • チャットサービスを利用せず、メールをそのままFwdしてもらう

地味な事例ですが、実運用でハマると意外に厄介です。最初は「誰かが爆速でSubscribeボタンを押してるのか」と思ったのですが、犯人はSlackのプレビュー機能でした。

株式会社システムゼウス

Discussion