Amazon SES Mail Manager で外部から受信したメールを処理してみる

記事タイトルとURLをコピーする

カスタマーサクセス部の山﨑です。

「Amazon SES」と聞くと、多くの方がアプリケーションからの通知やマーケティングメールといった「メール送信」を思い浮かべるのではないでしょうか。しかし、AWSのサービスを使いこなす上では、「メール受信」をどう扱うかも非常に重要なテーマです。

そこで今回は、より高度な受信メール処理を可能にした Amazon SES Mail Manager に注目します。

「外部から送信されたメールをSES Mail Managerで受信し、指定したS3バケットに保存する」という基本的な流れを、実際に手を動かしながら検証してみました。

「SESでのメール送信は試したけど、受信はまだ…」という方や、「受信メールをトリガーに業務を自動化したい!」と考えている方に、きっと参考にしていただける内容です。それでは、一緒に見ていきましょう!

1. Amazon SES Mail Managerとは?

1.1 Amazon SES について

Amazon SES は、AWSがEメール配信プロバイダー(ESP)として、Eメールの送受信機能を提供しているサービスです。

特に、大量のメール送信を得意としており、アプリケーションからの通知メール、トランザクションメール(注文確認など)、マーケティングメール(ニュースレターなど)といった大量のメールを、安価かつ確実に送信するために設計されています。

一方で、メール受信に関しては、機能としても持っているものの限定的であり、高度なコンプライアンスやセキュリティが求められる場合は機能不足と言えます。

1.2 Amazon SES Mail Manager について

Amazon SES Mail Managerは、Amazon SES の機能を拡張したメールゲートウェイのようなもので、「受信メール」を処理することに長けていることが特徴です。具体的には、届いたメールを、設定したルールに基づいて自動的に振り分けたり、処理したりできます。 以下、利用例です。

  • 特定の送信元からのメールをS3バケットに保存する
  • 件名に「請求書」と含まれていたら、Lambdaを起動して経理システムに連携する
  • 不要なメールをブロックする

上記のようなことが、サーバーを立てることなく実現できます。これにより、メール受信をトリガーとした様々な業務の自動化が可能になります。

補足:メールゲートウェイとは?

メールゲートウェイとは、企業や組織のメールシステムにおいて、インターネットと内部のメールサーバーの間で送受信されるメールを監視し、中継する役割を担う装置やソフトウェアのことです。

メールゲートウェイは「門番」のように機能し、外部からの脅威を防ぎ、内部からの情報漏洩を防止するセキュリティ対策の要となります。

全ての機能を持っているわけではありませんが、SES Mail Manager はAWSが提供しているメールゲートウェイのようなものと言えます。

主な役割

  • セキュリティの強化:スパム、フィッシング攻撃、マルウェア、不正なコンテンツなどの望ましくないメッセージをブロックします。
  • データ保護:機密データの漏洩を防ぐため、送信されるメッセージを分析し、必要に応じて自動的に暗号化することもあります。
  • メールトラフィックの管理:大量のメールを処理する組織にとって、メールゲートウェイはメールのルーティングを一元的に管理する重要なポイントとなります

主な機能

  • スパムフィルタリング:既知のスパムメールを識別し、ブロックします。これにより、ユーザーを潜在的な脅威から保護し、不要なメールを減らします。
  • ウイルスおよびマルウェアスキャン:送受信されるメールからウイルス、マルウェア、その他の悪意のあるコンテンツをスキャンし、感染の拡散を防ぎます。
  • データ損失防止 (DLP):組織外への機密情報の送信を防ぐ機能です。メールの内容をスキャンし、特定のデータパターン(個人情報、クレジットカード番号など)が含まれていれば、送信をブロックしたり、管理者に通知したりします。
  • メール暗号化:データの機密性を保護するため、転送中のメールを暗号化するサービスを提供し、情報が関係者のみにアクセス可能であることを保証します。
  • ポリシー適用:メールの内容、添付ファイルの種類、送信者の行動など、組織のメール利用に関するポリシーを適用し、内部基準や外部規制への準拠を支援します。
  • 誤送信対策:送信メールを一時的に保留し、送信者が間違いに気づいた場合にキャンセルできる機能や、社内と社外で時間差送信を行うことで、社内の複数人で内容を確認する仕組みを提供します。
  • 添付ファイルの分離:添付ファイルを自動的に分離し、Webダウンロードに切り替えることで、PPAP(パスワード付きZIP添付メール)のようなセキュリティリスクの高い方法に代わる安全なファイル送付を実現します。
  • メール無害化・アーカイブ:外部からのメールを無害化する機能や、オリジナルメールを確認するためのアーカイブ(保存)機能を提供します

2. 検証の全体像

2.1 今回の構成

  1. 外部からメールを送信する
  2. SES Mail Manager イングレスエンドポイント がメールを受け取る
  3. SES Mail Manager イングレスエンドポイント のトラフィックポリシーおよび、ルールセットに従って、S3へメールを転送する

2.2 前提条件

  • 受信メールの転送先として、あからじめS3バケットを作成していること。
  • 独自ドメインを持っていること。
  • 独自ドメインのDNSレコードを編集できる権限があること。

今回の検証では、事前に取得した独自ドメインのNSレコードを入れ替えることで、Route 53でレコード管理できる状態にしています。

3. いざ、検証

3.1 SES Mail Manager でトラフィックポリシーを作成する

SES Mail Manager で「どのようなメールを受け入れるか」という交通整理のルール、トラフィックポリシーを作成します。 今回は、検証なのでメール受信条件(ポリシーステートメント)は設けずに、すべてのメールを受け入れる設定にします。

3.2 SES Mail Manager でルールセットを作成する

次に、「受け取ったメールをどう処理するか」を定義するルールセットを作成します。

任意の名前でルールセットを作成したら、「編集する」をクリックして、ルールを新規作成します。

ルール名は任意でOK、今回はすべてのメールをルールの適用対象とするため、ルール条件は設定しません。

アクションでは、「S3への書き込み」を指定して、転送先バケットなどの必要情報を入力しした上で、「ルールセットの保存」をクリックしてルールを保存します。

なお、コンソール上で「新しいロールの作成」をクリックして、IAMロールを新規作成する際、IAMロールには必要なIAMポリシーが付与されていませんでした。 そのため、IAMロールには別途以下のポリシーを追加しておく必要があります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowS3PutObject",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::S3バケット名/*"
        }
    ]
}

メール受信テストでのトラブルシューティングを円滑に進めるために、ログ配信を設定しておくことをお勧めします。

3.3 SES Mail Manager でイングレスエンドポイントを作成する

最後に、外部のインターネットからメールを受け付けるためのエンドポイントとして、イングレスエンドポイントを作成します。

タイプはオープンを選択し、ルールセット、トラフィックポリシーは「3.1」「3.2」で作成したものを指定します。 ネットワークタイプはパブリックを指定することで、インターネットから直接メールを受け付けられるようになります。

イングレスエンドポイントのステータスがACTIVEになると、メール受信用の専用ホスト名が利用可能になります。 これをDNSサーバー(今回はRoute 53)にMXレコードの値として登録します。

## MXレコード
10 xxxxxxxxx.xxxx.mail-manager-smtp.amazonaws.com

## 数分後にdigでDNS伝播を確認する

dig mx 独自ドメイン

3.4 外部から独自ドメインのメールアドレス宛にメールを送信する

個人のGmailや会社のメールなど、外部のメールアドレスから、独自ドメインのメールアドレス宛にテストメールを送信します。

SES Mail Manager のトラフィックポリシーおよびルールセットでは、すべてのメールを対象にしているため、宛先メールアドレスは存在しないユーザー宛でも問題ありません。

メール送信後、S3バケットを確認するとオブジェクトが保管されていることが確認できました。

4. 番外編(メールをアーカイブする)

ルールセットで指定可能な「アーカイブ」アクションも気になったので、ついでに検証してみました。

4.1 SES Mail Manager のルールセットで、アーカイブを指定する

「3.2」ではルールセットのアクションとして「S3への書き込み」を指定しましたが、「アーカイブ」を選択してみます。 アーカイブでは、保持期間の設定やKMSによる暗号化設定も可能です。

4.2 外部から独自ドメインのメールアドレス宛にメールを送信する

イングレスエンドポイントを編集して、ルールセットを「4.1」で作成したルールセットに変更した上で、再度メール送信をします。

コンソール画面の左メニューにある「Eメールアーカイブ」を開き、日付範囲を指定した上で検索をかけると、テストメールがアーカイブされていることが確認できました。

アーカイブされたメールは「詳細を表示」をクリックすれば、中身を確認できますし、メッセージもダウンロードできます。

まとめ

今回は、Amazon SES Mail Manager を使い、外部から受信したメールに対して、「S3バケットへ書き込む」「アーカイブする」という2つのアクションを検証してみました。

S3バケットへメールを書き出す方法は、受信メールをデータとして蓄積・分析する第一歩として非常に有効です。ここからさらに、S3への書き込みをトリガーにしてAWS Lambdaを起動させ、後続のデータ処理へ繋げる…といった活用もできそうです。

一方のアーカイブ機能は、より手軽に「ひとまず受信したメールの中身を確認したい」といった監査的な用途で役立ちそうだと感じました。保持期間を設定できるのも嬉しいポイントです。

実際に触ってみると、基本的な設定であれば手順はとてもシンプルで、サーバーレスでこれだけの仕組みが実現できることに驚かされます。

皆さんもぜひ、このブログを参考にAmazon SES Mail Manager をお試しください!

山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ

カスタマーサクセス部所属。2019年12月にインフラ未経験で入社し、AWSエンジニアとしてのキャリアを始める。2023 Japan AWS Ambassadors/2023-2024 Japan AWS Top Engineers