はじめに
Amazon SNSでメール通知を設定しているとき、「いつの間にかサブスクリプションが解除されていて、重要なアラートメールが届かなくなっていた...」という経験はありませんか?
多くの場合、受信者が誤ってメール末尾の「Unsubscribe(購読解除)」リンクをクリックしてしまったり、メールサーバーのセキュリティソフトがリンクを自動巡回して勝手に解除してしまったりすることが原因です。
今回は、このような不本意なサブスクリプション解除を防ぐために、『ConfirmationWasAuthenticated 』というオプションを活用して、メール内の解除リンクを無効化し、AWS側に解除権限を制御させる設定手順をご紹介します。
そもそも「ConfirmationWasAuthenticated」とは?
このオプションは、「サブスクリプションの承認(Confirm)が、AWS権限(IAM)を持った状態で行われたかどうか」を示す値です。
- 値が false の場合(通常のメールリンクからの承認)
誰でもメール内の「Unsubscribe」リンクからワンクリックで購読解除できてしまいます。 - 値が true の場合(マネジメントコンソールからの承認)
メール内のリンクを踏んでも購読解除は拒否され、AWSコンソール上で権限を持つユーザーしか解除できなくなります。
意図しない通知停止を防ぐためには、この値を『 true 』にしてサブスクリプションを承認する必要があります。
設定手順
マネジメントコンソールを使った一番シンプルな設定方法です。
1.サブスクリプションの作成
通常通り、SNSトピックから [サブスクリプションの作成] を行い、宛先アドレスを登録します。

2. 承認メールのURLをコピー(※リンクは絶対にクリックしない!)
登録したメールアドレス宛に承認メールが届きますが、ここで絶対に「Confirm subscription」のリンクを直接クリックしないでください。
※普通にクリックしてしまうと「認証を伴わない通常の承認」として処理され、値が false で確定してしまいます。
リンクはクリックせず、右クリック等でURLをコピーするだけに留めてください。

3. コンソール画面から承認を実行
AWSコンソールのSNS「サブスクリプション」画面で、対象(保留中)を選択して [サブスクリプションの確認] ボタンをクリックします。

URL入力欄に先ほどコピーしたURLを貼り付けて[サブスクリプションを確認]ボタンを押せば設定完了です。
これで ConfirmationWasAuthenticated が true となり、メールからの購読解除が不可になります。

動作テスト:試しに購読解除リンクを押下してみる
設定が完了したら、本当に解除が無効化されているかテストしてみましょう。
実際に届いたSNS通知メールの末尾にある「unsubscribe(購読解除)」リンクをあえてクリックしてみます。

ブラウザが開き、画面に 「Subscription not removed(サブスクリプションは解除されませんでした)」 といったエラーメッセージが表示されればテスト成功です。これで誤操作による解除を完全に防ぐことができます。

作業上の注意点
『既存の値を後から true に変更することはできません』
すでに false で承認済みのサブスクリプションに対して、設定値だけを後から true に変更することは仕様上できません。
この場合は、必ず「サブスクリプション削除」して再作成の手順を踏む必要があります。削除から再登録までは通知が届かなくなるため、アラート通知などの場合は作業タイミングに十分ご注意ください。
まとめ
システム監視などの重要な通知において、いつの間にかSNSのサブスクリプションが消えているという事態は致命傷になりかねません。
運用中の「ヒヤリハット」を未然に防ぐためにも、チームのメーリングリストなどを登録する際は、この ConfirmationWasAuthenticated を意識した承認手順を標準化しておくことを強くおすすめします!





