[アップデート] Amazon SES でテナントごとに独立したサプレッションリストを管理できるようになりました
いわさです。
以前、こちらの記事で Amazon SES のテナント機能を紹介しています。
テナント機能を使うとテナントごとにレピュテーションメトリクスを分離管理でき、問題のあるテナントだけメール送信を停止させることが出来ます。
ただし、サプレッションリストについてはアカウントレベルのものが全テナントで共有されていました。
そのため、あるテナントのメール送信で発生したハードバウンスや苦情によってサプレッションリストに追加されたアドレスは、別のテナントからも送信が抑制されてしまう状態でした。
今回のアップデートで、テナントごとに独立したサプレッションリストを持てるようになりました。
テナントレベルサプレッションを有効にすると、ハードバウンスや苦情によるサプレッションがそのテナント内に閉じるようになり、他のテナントには影響しません。
今回こちらを確認してみたので紹介します。
実際に確認してみる
前回の記事で作成したテナントがそのまま残っているので、こちらを使って確認してみます。
サプレッションスコープをテナントレベルに変更する
テナントの詳細画面を開くと、「サプレッションリスト」タブが追加されています。

サプレッションリストタブでは「サプレッション設定」と「抑制された E メールアドレス」の2つのセクションが確認できます。
デフォルトではサプレッションスコープが「アカウントレベルのサプレッションリスト」になっており、従来どおりの動作です。

テナントレベルサプレッションは「サプレッションスコープ」と「サプレッションの理由」の2つの設定で制御します。
「編集」ボタンからサプレッション設定を変更してみます。

サプレッションスコープは「テナントレベルのサプレッションリスト」と「アカウントレベルのサプレッションリスト」から選択出来ます。
アカウントレベルを選択した場合はサプレッションの理由がアカウントの設定から継承されます。
「テナントレベルのサプレッションリスト」を選択してみます。

テナントレベルを選択すると、サプレッションの理由を「バウンス」「苦情」のチェックボックスで個別に選択出来るようになります。
コンソール上にも「分離の場合に推奨」と記載されていますね。
今回は両方にチェックを入れて保存しました。
なお、画面下部に「設定セットのオーバーライド」の注意書きがあり、設定セットでサプレッションオプションが指定されている場合はそちらが優先されます。
公式ドキュメントによるとサプレッションスコープとサプレッションの理由は必ずセットで指定する必要があるみたいです。
片方だけ変更することは出来ず、両方をクリアするとデフォルトのアカウントレベルスコープに戻るとのこと。
You must provide SuppressionScope and SuppressedReasons together, or set both to null. Setting both to null clears the tenant's suppression settings and returns the tenant to the default ACCOUNT scope behavior.
サプレッションの優先順位
サプレッション設定には優先順位があり、公式ドキュメントによると設定セット > テナント > アカウント の順で解決されるみたいです。
SES resolves suppression settings in the following precedence order, from highest to lowest: 1. Configuration set 2. Tenant 3. Account
スコープがテナントレベルの場合、SES はテナントのサプレッションリストのみをチェックし、アカウントレベルのサプレッションリストはスキップするとのこと。
つまり、アカウントレベルのサプレッションリストに登録されているアドレスでも、テナントのサプレッションリストに登録されていなければ送信が抑制されません。
このあたり知っておかないとよくわからない動きしちゃいそう。
サプレッションリストへのアドレス追加
テナントのサプレッションリストにアドレスを手動追加してみます。
サプレッションリストタブの「E メールアドレスを追加」ボタンを押します。

アドレスとサプレッションの理由(バウンス or 苦情)を指定して追加出来ます。
今回は test-bounce@example.com をバウンス理由で追加しました。
追加後、hoge-tenant1 のサプレッションリストを確認します。

test-bounce@example.com がバウンス理由で登録されています。
次に hoge-tenant3 のサプレッションリストを確認します。

こちらは空のままです。
hoge-tenant1 に追加したアドレスが hoge-tenant3 には影響していないことがわかります。
サプレッション済みアドレスへのメール送信
テナント間でサプレッションが本当に分離されているか確認してみます。
hoge-tenant1 のサプレッションリストに登録されているアドレス宛に、hoge-tenant1 と hoge-tenant3 の両方からメールを送信してみました。
hoge-tenant3 から送信したメールは正常に届きました。

一方、hoge-tenant1 から送信したメールは届きませんでした。
hoge-tenant1 の送信統計を確認するとバウンスが増えています。

hoge-tenant3 の送信統計ではバウンスは増えていません。

同じアドレスに対して、サプレッションリストに登録しているテナントからはサプレッションされ、登録していないテナントからは正常に配信されることが確認できました。
テナントサプレッションによるバウンスの識別
テナントのサプレッションリストによってメッセージが抑制された場合、公式ドキュメントによるとバウンス通知のサブタイプが OnTenantSuppressionList になるみたいです。
The bounce type is Permanent with a subtype of OnTenantSuppressionList.
また、バウンスや苦情の通知には ses:tenant-name タグが付与されるので、どのテナントに関連するイベントかを識別出来ます。
既存のアカウントレベルサプレッションでは OnSuppressionList というサブタイプでしたが、テナントレベルでは OnTenantSuppressionList で区別出来るようですね。
自動記録の動作まとめ
公式ドキュメントによると、スコープがテナントレベルの場合の自動記録は以下のとおりとのこと。
- ハードバウンス:テナントのサプレッションリストとグローバルサプレッションリストに追加される(アカウントレベルのサプレッションリストには追加されない)
- 苦情:テナントのサプレッションリストにのみ追加される
- Not-spam フィードバック:受信者が「迷惑メールではない」とマークした場合、苦情理由のエントリがテナントのサプレッションリストから自動削除される
Hard bounces – SES adds the address to the tenant's suppression list and the global suppression list. SES does not add the address to the account-level suppression list.
ハードバウンスの場合にグローバルサプレッションリストには追加されるけど、アカウントレベルのサプレッションリストには追加されないという挙動は少し注意が必要かもしれないですね。
さいごに
本日は Amazon SES にテナントレベルサプレッションリストが追加されたので確認してみました。
今回のアップデートでサプレッションリストもテナント単位で分離出来るようになり、テナント機能としてはより完成度が高くなった印象です。
マルチテナント SaaS で SES を使っている場合は、テナント機能と合わせて導入を検討してみてください。







