この記事は、Amazon SESを本番用SMTPリレーとして採用する前提で進めていた検証記録の続きです。
前回は、Amazon SESの初期設定、送信ドメイン認証、MAIL FROMドメイン設定、SMTP認証情報の作成、Postfixからのリレー送信テストまでを行いました。
今回は、Amazon SESを運用するうえで重要となる、バウンス通知および苦情(Complaint)通知をAmazon SNS(Simple Notification Service)で受け取る構成を検証します。
最終的には、Amazon SESの本番利用申請(Production Access)が承認されなかったため、この構成を実運用で利用することはありませんでした。それでも、Amazon SESとAmazon SNSを連携し、バウンス・苦情通知を受け取る初期設定の記録としては有用と考え、検証ログとして整理します。
Amazon SNS(Simple Notification Service)とは?
本記事では、Amazon SESのバウンス通知および苦情通知を受け取る用途に絞って、Amazon SNSを利用します。
Amazon SNSは、Amazon Web Services が提供するPub/Subメッセージングサービスです。
Pub/Sub方式とは、送信(Publish)と受信(Subscribe)を分離し、メッセージを中間サービスを介して配信する仕組みです。
従来の方式では、メッセージを送信する側のシステムが送信先を管理、メール送信やAPI呼び出しなどを個別に実行してメッセージを配信していました。

そのため、送信先や通知方法の追加・変更が発生すると送信側の修正が必要になり、運用や拡張の負担が大きくなります。
これに対してPub/Sub方式では、送信側はメッセージを発行するだけでよく、Amazon SNSが中間サービスとして機能し、トピックを介して各受信側へ配信を行います。

たとえば、1つのトピックに対して「メール」「SMS」「自社アプリ(Webhookなど)」といった複数のサブスクリプション(受信先)を登録しておくことができます。
この状態で、送信側(パブリッシャー)からトピックにメッセージを1回送信すると、そのメッセージは登録されたすべての宛先(メール、SMS、アプリ)に同時に配信されます。
そのため、送信側(パブリッシャー)は送信先や通知方法を意識する必要がなく、後から受信先を追加しても送信処理への影響はありません。
Amazon SESとの連携(バウンスおよび苦情の通知)
Amazon SESでは、送信エラー(バウンス)や迷惑メール報告(苦情)を適切に把握・管理することが求められます。メールシステムの運用者は、これらのイベントをAmazon SNSと連携させることで、通知として受け取ることができます。
通知手段としては、メールやHTTPなど複数の方法があります。本記事では、検証用としてメール通知を利用します。
また、本構成ではドメイン内部ユーザによるメーラー送信を前提としているため、バウンスや苦情の発生頻度は低いと想定されます。そのため、本記事の検証範囲では、Amazon SNSの利用量はごく少量です。
※料金体系は変更される可能性があるため、実運用時はAWS公式の料金ページを確認してください。
1. Amazon SNSトピックの作成
トピックは、通知の送信先をまとめた「配信グループ(宛先リスト)」です。メッセージをトピックに送信すると、そのトピックに登録されたすべての宛先へ同時に配信されます。
今回は、Amazon SES側からAmazon SNSのトピックを作成します。SES側からトピックを作成することで、通知に必要なアクセスポリシーが自動的に設定され、設定ミスを防ぐことができます。
「設定」メニューから「ID」を選択し、一覧から対象のドメインをクリックします。

ドメインの詳細画面の下部にあるタブメニューから「通知」をクリックします。

「フィードバック通知」の「編集」ボタンをクリックします。

「フィードバック通知の編集」画面の「SNSトピックの作成」ボタンをクリックします。

「トピック名」に作成するトピック名を入力、「トピックの作成」をクリックします。
バウンス通知用にses-bounceを作成しました。

同様に、苦情通知用のトピックses-complaintも作成しました。
トピックの作成に成功すると「リクエストは正常に処理されました。」と表示されます。
バウンスフィードバックに「ses-bounce」、苦情のフィードバックに「ses-complaint」を設定します。配信に関するフィードバックは、今回は使用しないため「SNSトピックなし」のままで問題ありません。

設定後、「設定の保存」をクリック、「正常に編集されました」と完了メッセージが表示されます。
ここまでの操作で、フィードバック通知のリストには、作成したSNSトピックが割り当てされています。

続けて「Eメールのフィードバック転送」を無効に設定します。
旧来の通知方法であるため、SNS通知を使用する場合はこの通知方法は利用しません。
「フィードバック転送」の「編集」をクリックします。

「有効化」のチェックを外して「変更の保存」をクリックします。

2. サブスクリプションの設定
トピックを作成しただけでは、通知はされません。通知先となるサブスクリプションの設定が必要です。
続けてAmazon SNSコンソールを操作して、さきほど作成したses-bounceトピックとses-complaintトピックにそれぞれサブスクリプションを作成します。
AWSコンソール画面上部の検索欄に「SNS」と入力します。表示されたリストから「Simple Notification Service」をクリック、Amazon SNSコンソールを開きます。

ダッシュボードが表示されます。さきほどSESから操作して作成したトピックが2つ登録されていました。トピックをクリックします。トピックが一覧で表示されます。

各トピックに対してサブスクリプションを設定します。まず、バウンス通知用のトピック「ses-bounce」をクリックします。

サブスクリプション設定画面が開きます。「サブスクリプションの作成」ボタンをクリックします。

プロトコルを選択します。今回はEメールを選びます。エンドポイントに通知を受信するメールアドレスを設定します。今回は[サブスクリプションフィルターポリシー]および[Redriveポリシー]は設定しません。

サブスクリプションの作成をクリックします。

サブスクリプションを作成すると、ステータスは「保留中の確認」と表示されます。この状態では通知はまだ配信されず、設定したメールアドレス宛に「AWS Notification – Subscription Confirmation」という件名の確認メールが届きます。

AWS Notification メールを開き、「Confirm subscription」リンクをクリックして承認を行います。
承認を行わない場合、通知は受信されません。

確認完了ページが表示されます。

サブスクリプションの確認が完了すると、通知が受信可能になります。
ここまでの手順を参考に、苦情(迷惑メール報告)通知用トピックにもサブスクリプション(メール通知先)を設定します。
SNSトピックは、通知の種類(バウンス、苦情など)ごとに分けることが推奨されています。トピックを分けることで、それぞれの通知に対する対応を明確にでき、管理や運用がしやすくなります。
通知の受信先となるメールアドレスは同一のものを設定できますが、サブスクリプションはトピックごとに個別に作成する必要があります。
3. バウンスおよび苦情の対策
SNSで通知を受け取り、問題のあるアドレスが判明した場合は、以降の送信対象から除外する運用とします。具体的な除外方法としては、手動での管理に加え、必要に応じてPostfixのaccess機能を用いた送信抑止も検討します。
まとめ
今回は、Amazon SESのバウンス通知および苦情(Complaint)通知を、Amazon SNS経由でメール通知として受け取る構成を検証しました。
最終的にはAmazon SESの本番利用申請(Production Access)が承認されなかったため、この構成を実運用で利用することはありませんでした。それでも、Amazon SESを利用する場合、バウンスや苦情を放置しない仕組みは重要です。
Amazon SESとAmazon SNSを連携し、バウンス・苦情通知を受け取る初期設定の記録として、同じようにSES導入を検討している方の構成判断や事前検証の材料になればと思います。
(おしまい)

コメント