
Amazon SNSの通知メールにて、unsubscribeのリンクを無効化する方法
はじめに

Amazon SNSを運用していると、通知メールの中に「unsubscribe」という、通知を届かなくするための停止リンクがあることに気づかれている方もいるのではないでしょうか。うっかりクリックしてしまい、通知が意図せず停止してしまった、あるいはいつの間にか停止してしまっていたというケースもあるかもしれません。
AWSに限らず、Google Cloud、Azure、オンプレ環境などに構築された お客様のシステム監視を行う当社では、監視アラートを検知した際、Amazon SNSを利用して監視を行うエンジニアに通知を飛ばしています。
そこで本日のブログでは、Amazon SNSの通知メールに記載されている「unsubscribe」のリンクを無効化する方法をご紹介します。
Amazon SNSの概要
Amazon SNS(Simple Notification Service)は、AWSが提供するマネージド型の通知サービスです。開発者やシステム管理者が、アプリケーションやエンドユーザーに対して効率的に通知を送信するために利用されます。
Amazon SNSは、メッセージ配信のためのパブリッシュ/サブスクライブモデルを採用しています。一つのメッセージを、まとめて複数の宛先に配信することが可能です。これにより、即時的な通知と広範囲の配信を実現します。
このサービスでは、モバイルプッシュ通知やSMS、Eメール、HTTP/HTTPSエンドポイントなど、多様な配信チャネルをサポートしているのもポイントです。完全マネージド型のサービスであるため、インフラ管理の負担を軽減し、スケーラビリティや高可用性を確保できるでしょう。
Amazon SNSの構成要素
Amazon SNSは、主に以下の3つの構成要素から成り立っています。
- トピック
- パブリッシュ
- サブスクリプション
1つ目のトピックは、メッセージを配信するための論理的なアクセスポイントです。送信元と受信先を分離する上で役割を果たします。
2つ目はパブリッシュで、トピックにメッセージを送信する役割を担います。3つ目のサブスクリプションは、トピックに登録された受信者のリストのことです。必要に応じて受信者はHTTP/HTTPSエンドポイント、Eメール、モバイルプッシュ通知など、さまざまなプロトコルを選択できます。
これらの構成要素をうまく使い分けることでAmazon SNSは柔軟な通知と配信を実現します。
Amazon SNSの主な機能
Amazon SNSには、通知配信を効率化するための多彩な機能があります。代表的な機能が、パブリッシュ・サブスクライブモデルを活用した同時配信機能です。一つのメッセージを複数のサブスクライバーに同時配信し、柔軟な通知チャネルを提供します。
またAmazonSNSは、フィルターポリシーを設定することでサブスクライバーごとに受信するメッセージを選別することもできます。これにより不要な通知を排除し、必要な情報のみを配信して、コミュニケーションの効率化を推進可能です。
Amazon SNSは他のAWSサービスと連携することで、パフォーマンスを高めることもできます。CloudWatchと併用してモニタリングを強化するなど、必要に応じた機能拡張を実現できるサービスです。
Amazon SNS、unsubscribe(通知停止)と再通知の流れ
まず始めに、Amazon SNSのEメール サブスクリプションの仕様について簡単に説明します。通知されるアラートメールに、常に表示されている unsubscribe(通知停止)のURLは、以下のようなものです。
例:https://sns.ap-northeast-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:XXXX:XXXXXXXXXXXX&Endpoint=〓Eメールアドレス〓

そして、上記リンクをクリックすると以下画面がブラウザに表示され、サブスクリプションが削除されてしまいます。

AWSコンソール上で確認すると、unsubscribe(通知停止)されたサブスクリプションは以下のようにIDが【削除済み】となり、以降はメール通知ができない状況となってしまいます。

サブスクリプションが停止された場合、件名が【AWS Notification – unsubscribe Confirmation 】というメールが受信されます。ここで、メール本文内に記載の【Resubscribe】をクリックすることで、再度Eメールを受信することが可能になります。

リンクをクリックすると以下画面がブラウザに表示され、サブスクリプションがconfirmed(確認済み)になります。

注意:上記画像 右下部分に記載の【click here to unsubscribe.】を押すと再度サブスクリプションが削除されます。
AWSコンソール上で確認すると、【削除済み】が解消され、任意のIDが記載されます。

unsubscribeのリンクを無効化する方法
設定は、以下の3ステップで行います。
SNS Subscriptionの再作成
Confirm Subscription のメール登録
動作確認
SNS Subscriptionの再作成
対象のSubscriptionに対して【サブスクリプションの削除】を実施します。
※ 既に登録していた場合のみ実施

次に、削除前と同じ内容で再度【サブスクリプションの作成】を実施します。

正常に作成が完了するとID部分に【保留中の確認】と表示されます。

作成時に設定したEメールアドレス宛に【AWS Notification – Subscription Confirmation】という件名で、【Confirm subscription】というリンクが本文に張られたメールを受信します。
※ このリンクを押下してはいけません。

Confirm subscription のリンク登録
まず、【Confirm subscription】リンク先のURLに対して、右クリック⇒「リンクのURLをコピー」を実施し、URLを取得します。
例:https://sns.ap-northeast-1.amazonaws.com/confirmation.html?TopicArn=arn:aws:sns:ap-northeast-1:XXXXXXXXXXXX:XXXX&Token=XXXXXXXXXXXX&Endpoint=〓Eメールアドレス〓
次にAWSコンソール上より再作成したサブスクリプションを選択し、【サブスクリプションの確認】を押下します。

【Confirm subscription】より取得したURLを入力し、【サブスクリプションの確認】を押下します。

「サブスクリプションが正常に確認されました」という以下のような画面を確認できれば、問題なく作成できています。

動作確認
トピックよりテストメールを送付し、以下【unsubscribe】リンクを押下します。

以下のような画面に遷移、unsubscribeが無効化されていることが確認できました。

まとめ

今回は、メール通知 unsubscribeリンクを無効化する方法について記載させていただきました。
例えば、当社が行っているようなシステムの監視アラートの通知を受信されるようなケースでは、メーリングリスト宛に通知を飛ばし、様々な人にアラートメールが送付されるよう設定されている方も多いかと思います。誰かが誤ってクリックしてしまい解消方法が分からない、とお問い合わせをいただくケースもございますので、ご紹介させていただきました。
多くの方に通知される場合、あるいはunsubscribeする予定がない場合には、ぜひお試しください。
また、当社ではAWSやAzure、Google Cloud、Zabbixなどのアラートメールの監視を24時間365日行い、 監視から障害対応、運用保守まで一括で代行するサービス をご提供しています。委託をご検討の際は、ぜひお気軽にお問い合わせください。