SNS Eメールサブスクリプションに記載される Unsubscribe リンクを無効化する

記事タイトルとURLをコピーする

SRE部 佐竹です。
SNS のEメールサブスクリプションにある Unsubscribe リンクの無効化方法を記載します。

はじめに

最初に SNS のEメールサブスクリプションの基本的な仕様について記載します。

f:id:swx-satake:20201012145114p:plain

SNS のEメールサブスクリプションの通知メールには、上画像通り Unsubscribe のためのURLリンクが常に記載されます。

f:id:swx-satake:20201012145530p:plain

このリンクをクリックすると、上画像の通りの画面がブラウザに表示され、サブスクリプションが削除されます。

f:id:swx-satake:20201012154022p:plain

削除されたサブスクリプションは、IDが Deleted となります。

Resubscribe する

f:id:swx-satake:20201012154635p:plain

サブスクリプションが停止された場合、上画像の通り AWS Notification - Unsubscribe Confirmation というメールが送付されます。このメールに記載されている Resubscribe のURLリンクを押下することで、再度Eメールを受信することが可能になります。誤って Unsubscribe リンクを押下してしまっても、メールで対処可能ということです。

f:id:swx-satake:20201012154928p:plain

Resubscribe のURLリンクを押下すると、上画像が表示されます。

なお画像の右下にあるリンク click here to unsubscribe. を押下すると再度 unsubscribe されてしまうので注意してください(押さないでください)。

f:id:swx-satake:20201012155138p:plain

Resubscribe 後は、コンソールのIDの値も Deleted ではなく、正常に値が表示されます。

リンクを無効化したい背景

Unsubscribe のためのURLリンクが厄介なのは、リンクをクリックするだけでサブスクリプションが停止してしまうことです。また、URLリンクから停止された場合は、API がキックされないため CloudTrail の Event として記録されません。

運用でメーリングリストなどを登録していると、様々な人に通知が送付されますが、誰か1人がこのURLリンクをクリックしてしまうと、意図せず Unsubscribe されてしまうため、運用においては Unsubscribe リンクを無効化したいという要望が出ます。

スパムフィルタ等によるリンクの押下

Unsubscribe のためのURLリンクですが、「通知メールを受信したメールサーバやメールクライアントソフトのスパムフィルタ」等が、このリンクにアクセスしてしまうという事例もあるようです。

このような場合、意図せず突然サブスクリプションが削除されてしまい、Eメール通知が届かなくなってしまうことになります。この点からも、本番用途で利用している SNS のEメールサブスクリプションからは、Unsubscribe リンクを無効化する必要が出てきます。

Unsubscribe リンクを無効化する方法

Unsubscribe リンクを無効化する方法を以下に記載します。マネジメントコンソールから実行が可能です。

Eメールサブスクリプションを再作成する

まずは SNS のマネジメントコンソールを開き、利用中のEメールサブスクリプションを一旦削除する必要があります。

f:id:swx-satake:20201012155625p:plain

確認画面が出ますので、Delete を押下して削除します。

f:id:swx-satake:20201012222018p:plain

削除後は、削除前に設定していたのと同様にEメールのサブスクリプションを作成します。

f:id:swx-satake:20201012155844p:plain

サブスクリプションを作成した直後は Pending confirmation とIDに表示されます。

f:id:swx-satake:20201012155951p:plain

正常にサブスクリプションの作成が完了していると、AWS Notification - Subscription Confirmation という件名で、設定したEメールアドレスに Confirm subscription のリンクが張られたメールが送付されます。
このURLリンクは左クリック(押下)しないでください

Confirm subscription のリンクをマネジメントコンソールから登録する

Confirm subscription リンク先の URL を、右クリック⇒「リンクのアドレスをコピーする」を実行し取得します。

f:id:swx-satake:20201012160809p:plain

上画像の通り、SNSコンソールの Confirm subscription を押下して、先ほど取得したURLを貼り付けます。

f:id:swx-satake:20201012160929p:plain

貼り付けたら Confirm subscription を押下して完了です。

f:id:swx-satake:20201012160957p:plain

マネジメントコンソール上部に Subscription wad confirmed successfully. と出ていれば成功です。

このように、Eメールのリンクを押下するのではなく、マネジメントコンソールから直接登録を行うことで Unsubscribe リンクを無効化することができます。

動作確認

無効化した後、SNS からの通知メールを確認します。

f:id:swx-satake:20201012161148p:plain

URLリンクは変わらず掲載されますが、このURLリンクをクリックしてみます。

f:id:swx-satake:20201012161254p:plain

Subscription not removed
Your subscription could not be removed because of an error. If you wish to unsubscribe but do not have AWS credentials, or have any other questions about Amazon SNS, please contact Amazon at sns-question@amazon.com.

上記の通りの文面が表示され、Unsubscribe リンクが無効になっていることが確認できました。

念のために記載しますと、この設定後に AWS Notification - Subscription Confirmation という件名のEメールにある Confirm subscription リンクを押下しても無効化は継続します。設定が上書きされることはありません。

CLI での実行

CLIで実行されたい場合は、以下のコマンドをご利用ください。

subscribe への登録は以下のコマンドです。

$ aws sns subscribe --topic-arn <topic arn> --protocol <protocol> --notification-endpoint <endpoint>

subscribe の承認時は以下のコマンドです。

$ aws sns confirm-subscription --token <emailに記載のURLリンク> --topic-arn <topic arn> --authenticate-on-unsubscribe true

まとめ

f:id:swx-satake:20201012161950p:plain:w150

今回は SNS のEメールサブスクリプションにある Unsubscribe リンクを無効化する方法について記載しました。

本番運用でメーリングリストを登録している場合に、様々な人にSNSのEメール通知が一斉に送付されます。その受信者の誰か1人でも Unsubscribe のURLリンクをクリックしてしまうと意図せず Unsubscribe されてしまうため、本番運用においては本対応を実施しておくのがより良いと存じます。

では、またお会いしましょう。

佐竹 陽一 (Yoichi Satake) 記事一覧はコチラ

SRE2課所属。AWS資格12冠。2010年1月からAWSを利用してきました。
AWSのコスト削減、最適化を得意としています。