こんにちは、石川です。
はじめに
Amazon SNSのメールサブスクリプションでは、確認メール内のリンクを押すことで購読が確定します。
一方で、運用上は、メール本文中のリンクを無効化し、アンサブスクライブをAWSコンソールからのみ実施できるようにしておくことがあります。
これは、うっかりアンサブスクライブしてしまうことを防ぎ、意図しない通知解除を避けるためです。

ただし、この設定を行う際には、メール内リンクのURLをコンソール上のサブスクリプション登録時に設定する必要があります。
そのため、必要な設定を行う前にメールリンクをクリックしてしまうと、作業をやり直す必要が出てしまいます。
今回は、このようにコンソールで設定する前にメールリンクが押されてしまったケースをもとに、誰がそのリンクを押したのか確認できるのかを整理します。
早速結論
結論から言うと、Amazon SNSの標準機能だけで、メールリンクを誰が押したか特定するのは難しいです。
理由は、メールリンク経由で実行されるConfirmSubscriptionが、ケースによってはCloudTrailに記録されないためです。
そのため、サブスクリプションが有効になったことは分かっても、押した人までは追えないことがあります。
技術的に見ると、SNSでは確認前はPendingConfirmationの状態になり、リンクが押されると購読が有効化されます。
このとき確認しやすいのは、たとえば次のような情報です。
- サブスクリプションが確認済みか
- ConfirmationWasAuthenticatedがtrueかfalseか
- どのTopicやEndpointに紐づいているか
ただし、これらはあくまで購読状態の情報です。
実際に誰がメールを開いてリンクを押したかという、人ベースの操作履歴までは分からない場合があります。
AWS公式ドキュメントにも記載できない旨、記述がありました。

ただしCLIなら可能のケースもある
CLI経由でIAM認証を実施した状態で操作していた場合は追える可能性があります。そういうケースはかなり稀だとは思いますが。
まとめ
Amazon SNSでは、サブスクリプションが確認されたかどうかは確認できます。
ただし、確認メールのリンクを誰が押したかを標準機能だけで特定するのは難しいです。
また、今回のように、メール本文中のリンクを無効化するための設定作業がある場合は、設定前にリンクをクリックしてしまうと作業のやり直しが必要になる点にも注意が必要です。
そのため、運用としては、
「メールリンクはクリックせず、必要な設定はコンソールまたはCLIで行う」
という手順を事前に明確にしておくことが重要だと考えます。


