Amazon SNS のサブスクリプション解除リンクによる誤解除を防ぐ (既にサブスクリプション承認した後の上書きver.)
はじめに
こんにちは。YUJIです。
本記事の前提として、下記のブログ記事でAmazon SNS サブスクリプションのメールに付いたリンクからの誤解除を防ぐための手段をお伝えいたしました。
本記事では、例えば
AWSエンジニア「上記の記事を参考に、承認メール文中のリンクはクリックしないで、リンクのアドレスだけください」
メール受信者「あ、もうリンクをクリックして承認してしまった…」
という場合でも、後からAWS CLIによる操作で設定を上書きするための手法を紹介します。
(※本記事の手順では、承認トークンが期限切れになっていない必要があります。はるか昔に設定したAmazon SNS サブスクリプションへの設定上書きが出来る訳ではありません。)
実際の作業
下記のような承認メール文中のリンクをクリックして、確認済みのステータスになっているAmazon SNSを用意します。
■承認メールの画面
■承認リンクをクリックして、承認済みとなったサブスクリプション
これで、先程の会話例のような状態になりました。
まずは、現時点のAmazon SNSのサブスクリプションの情報をAWS CLIで取りに行きます。
aws sns get-subscription-attributes --subscription-arn {サブスクリプションのARN}
ここで囲まれたConfirmationWasAuthenticated
が、実質的にメールでの購読解除の可否を握っています。
"ConfirmationWasAuthenticated": "false"
= メール中のリンクから購読解除が出来てしまう"ConfirmationWasAuthenticated": "true"
= メール中のリンクからは購読解除が出来ない。
本記事の おまけ の章を是非お読みください。
この段階で
・メールのリンクによる認証は通っている
・今後配信されるメールに添付されたリンクから、簡単に配信を停止出来てしまう
という状態です。
簡単にリンクから配信停止できなくなるよう、ここから設定を上書きしていきましょう。
まずは、先ほど承認に使ったメールのリンク中のトークンを取得します。
[h]ttps://sns.ap-northeast-1.amazonaws.com/confirmation.html?TopicArn=arn:aws:sns:ap-northeast-1:xxxxxxxxxxxxx:xxxx-xxxxt&Token={ここからここまでのトークンをコピーして、後のCLIで使用する}&Endpoint=hogefuga@gmail.com
↑ここで抽出したトークンの文字列を利用し、下記のAWS CLIコマンドを実行することで、設定を上書きすることができます。
aws sns confirm-subscription --token {上でコピーしたトークン} \ --topic-arn {トピックARN} \ --authenticate-on-unsubscribe true
現状のサブスクリプションを確認してみましょう。
aws sns get-subscription-attributes --subscription-arn {サブスクリプションのARN}
↓実際に、メールのUnsubscribeリンクからは解除出来ないかどうかを試してみましょう
↓
これで、メールのUnsubscribeリンクをクリックしても、サブスクリプションが解除されないという状態を実現できました!
もう誤クリックによる通知停止に怯える事はありません。
おまけ
このおまけパートでは、『そもそも何をもってサブスクリプション解除リンクを無効にできたのか』の裏側を解説します。
そもそもメールのリンクによる購読解除が出来ない/出来るは、AuthenticateOnUnsubscribe
のTrue/Falseによって制御されています。
(※該当サブスクリプションにおけるこのパラメータを確認することは、マネジメントコンソール上からもAWS CLI上からも不可能です。)
ConfirmSubscription
https://docs.aws.amazon.com/ja_jp/sns/latest/api/API_ConfirmSubscription.html
リクエストにAWS署名がある場合 つまり、AWSの認証情報(IAM)をもって、サブスクリプションの承認が行われた場合に
自動的にAuthenticateOnUnsubscribe
はTrueとなり、その結果として購読解除(Unsubscribe)にもAWSの認証情報を使うことが必須となります。
要するに
『そのAmazon SNS サブスクリプションのConfirmationWasAuthenticated
の値で、そのサブスクリプションはAWSの認証情報によって承認されたものか。』という事が確認できれば
該当のサブスクリプションは、メールで購読解除することが許されているのか、それとも許されていないのかを確認できる
という訳です。
GetSubscriptionAttributes
https://docs.aws.amazon.com/sns/latest/api/API_GetSubscriptionAttributes.html
以上、滅茶苦茶マニアックな内容でした。
(どこで使うんだ。この知識。)
おわりに
本記事では、承認用リンクをメールからクリックしてしまった後でもUnsubscribeリンクは無効化できることと、制御の裏側(おまけパート記載)をお伝えいたしました。
これらの情報を活用いただくことで、皆さんのAmazon SNSの活用が少しでも楽になれば幸いです。
最後まで読んでいただき、ありがとうございました。
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitter2025 AWS Community Builder / 2024 Japan AWS All Certifications Engineer
Recommends
こちらもおすすめ
-
AWS Chatbotを使って、Slack通知をカスタマイズする
2024.2.15
Special Topics
注目記事はこちら

データ分析入門
これから始めるBigQuery基礎知識
2024.02.28

AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16