Loading
BLOG 開発者ブログ

2024年4月15日

Amazon SNS で誤って Unsubscribe されるのを防ぐ方法

Amazon SNS を利用して通知のメール配信を行う場合、配信されたメール末尾には登録解除用のリンクが含まれており、誤ってこのリンクを踏んでしまうと、重要な情報が届かなくなる可能性があります。

特にメーリスを配信対象にしている場合、そのメールを受け取っているメンバーは誰でも Unsubscribe することができ、さらに悪いことに、誰がそのメールを Unsubscribe したのかはCloudTrailなどで確認することができません。

そこで今回は、ただリンクを押しただけでは Unsubscribe されないように設定することで、意図せず配信されない状況を回避していきます。

目次

 

はじめに

こんにちは。
クラウドソリューション第二グループのwatanabe.tです。

冒頭で触れたように、メーリスを Amazon SNS の通知先に登録しておくのはあるあるな状況です。(メンバー入れ替わりの手間も少ないですしね)
しかし、メンバーの誰でも簡単にリンクを踏めてしまうことで、いつの間にかメール配信されなくなり重大な通知を見落としてしまう、というのは最悪のパターンです。

残念ながらリンク自体をメールに記載しないようにはできなかったため、リンクを踏まれたとしても簡単に Unsubscribe させない設定方法を紹介していきます。

Amazon SNS とは

Amazon Simple Notification Service (略称 SNS)は、AWSが提供するフルマネージドのパブリッシュ/サブスクライブ(Pub/Sub)メッセージングサービスです。
開発者がシステム間やユーザー間で柔軟にメッセージをやり取りできるように設計されており、AWSの中でも中核となるサービスの一つであり、かなり古くからあるサービスのうちの一つでもあります。

主な特徴として、セットアップから通知先の管理が数クリックで済むくらい容易であること、高いスケーラビリティを備えるため大量のメッセージを捌くことができること、高いセキュリティ標準に準拠し高い可用性を備えていること、が挙げられます。

最もよく使われる用途のうちの一つとして、CloudWatch Alarmで異常を検知した際、 Amazon SNS を通じて管理者や開発者へアラートを発報する、というものがあります。

Unsubscribe リンクの無効化設定

「はじめに」で触れたように、リンク自体をメールから無くすことはできませんでした。
そのため、 Unsubscribe リンクが踏まれたとしても、AWSマネジメントコンソールにログインしていないと解除できないように設定します。

通常、 Amazon SNS のサブスクリプション登録をすると、「AWS Notification – Subscription Confirmation」という件名のメールが届き、その本文に記載されているリンクを踏むことでサブスクリプションが有効化されます。

しかし今回はこのリンクからサブスクリプションを有効化しません。

まずは届いたメールの「Confirm subscription」のリンク(URL)をコピーします。
この時のリンクは以下のような形式になっているはずです。

https://sns.ap-northeast-1.amazonaws.com/confirmation.html?TopicArn=arn:aws:sns:ap-northeast-1:<アカウントID>:<トピック名>&Token=<一時発行のトークン>&Endpoint=<メール通知先>

このリンクをコピーした状態で、マネジメントコンソールの対象のサブスクリプションを開きましょう。
恐らく、以下のように保留中になっていると思います。(ここで確認済みになっているようであれば既にリンクを押してしまっているので、もう一度最初から設定してください)

この保留中のサブスクリプションを選択し、「サブスクリプションの確認」ボタンを押下します。
するとURLの入力ポップアップが表示されるため、ここに先ほどコピーしたリンクを貼りつけ、「サブスクリプションの確認」を押下します。

これによりサブスクリプションが有効化され、ステータスが「確認済み」に変わります。
これで設定は完了です。

動作確認

試しに自分宛にメッセージを送信し、ログインしていない状態では Unsubscribe できないことを確認していきましょう。

このメールの下部に記載されている Unsubscribe のリンクを押下し、Webページに遷移します。
すると、「Subscription not removed」と表示され Unsubscribe が完了しませんでした。

これで、 Subscription を解除するためにはAWS マネジメントコンソールにアクセスする必要があり、その場合はCloudTrailにログも記録されるようになりました。

おわりに

今回は誤ってAmazon SNSのサブスクリプションが解除されてしまうのを防ぐ方法を紹介しました。

特に、誰がサブスクリプション解除をしたかが分かることで、再発防止や注意喚起につながるのではないかと考えています。

この記事が少しでも役に立てば幸いです。


watanabe.tのブログ

クラウドソリューショングループ所属

昔はモバイルアプリ開発を、今はGCP, AWS, Firebaseなどのクラウド周りの提案/開発を行っているエンジニアです。

AWS認定ソリューションアーキテクト取得しました!