AWS SESでメール受信設定を行う

はじめに

SES(Simple Email Service)は、メールの送信だけでなく、メールの受信機能も提供している。
AWS SESを使用してメール受信の設定を行う手順をやってみたいので備忘録として記録しておく。
メール受信機能を利用することで、独自ドメインでメールを受信し、そのメールを処理するシステムなども構築することが可能となっている。

前提条件

  • AWSアカウントの作成済み
  • 受信用のドメインを所有していること
  • DNS設定の変更権限があること
  • AWS CLIまたはマネジメントコンソールへのアクセス権限

環境

  • AWS SES
  • Amazon S3(メール保存用)
  • Cloudflare (ドメイン管理)

設定手順

ドメインの検証

※すでに独自ドメインがSESで検証済みの場合は不要となる。

AWS SESでメールを受信するためには、まずドメインの所有権を検証する必要がある。

  1. AWS SESコンソールにアクセス
  2. 「ID」を選択する
  3. 「IDの作成」を選択する
  4. ドメイン名を入力し、「Easy DKIM」にチェックをし、「IDの作成」を選択する
  5. DNSレコードを設定

以下の記事では上記の手順のキャプチャ等があるので参考にしてみていただければと思う。
AWS EC2+Postfix+SESでEC2インスタンスからメール送信をする#SESの設定1 (初期設定~ドメインの追加)

MXレコードの設定

受信したいドメインのDNS設定でMXレコードを追加する。

優先度: 10
値: inbound-smtp.[region].amazonaws.com
※今回は東京リージョンなので ap-northeast-1 とする。
値: inbound-smtp.ap-northeast-1.amazonaws.com

Cloudflareでは以下で設定を行った。

ドメイン: mail.k-bushi.com
レコードタイプ: MX
優先度: 10
値: inbound-smtp.ap-northeast-1.amazonaws.com
setup-mx-record-01

S3バケットの設定(メール保存用)

  1. S3バケットを作成 setup-s3-bucket-01

  2. 設定は以下とした setup-s3-bucket-02

受信ルールセットの作成

メールを受信した際の処理を定義するルールセットを作成する。

  1. SESコンソールで「Eメール受信」を選択 setup-email-receiving-01

  2. 「ルールセットの作成」を選択 setup-email-receiving-02

  3. ルールセット名を入力 setup-email-receiving-03

  4. 「Eメール受信」→作成したルールセットにチェックを入れ、「有効として設定」を選択 setup-email-receiving-04

設定後 setup-email-receiving-05

受信ルールの設定

具体的なメール処理ルールを設定する。

  1. 作成したルールセットを選択し、「ルールの作成」を選択する setup-create-ruleset-01

  2. 「ルール名」等を決めて「次へ」 setup-create-ruleset-02

  3. 受信者の条件を設定(特定のメールアドレスまたはドメイン全体) ※今回は受信者の条件は特に設定を行わない。
    要件によって特定のドメインの受信の振り分けを行いたい場合は設定が必要となる。
    setup-create-ruleset-03

  4. アクションを設定する 今回は、S3バケットへの配信を行うため、「S3バケットへの配信」を選択する setup-create-ruleset-04

  5. IAMロールを作成 setup-create-ruleset-05 setup-create-ruleset-06

作成したIAMロールに対して、以下のインラインポリシーを付与した。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::[作成したバケット名]/*"
        }
    ]
}
setup-create-ruleset-07
  1. 確認をして作成 setup-create-ruleset-08

動作確認

設定完了後、テストメールを送信して正常に受信・処理されることを確認する。

Gmailで独自ドメインへのメールを送ってみる。

confirm-receive-s3-01

バケットにオブジェクトが増えているので見てみる。

confirm-receive-s3-02

オブジェクトをダウンロードして、.emlに拡張子を変更後outlookなどのメーラーで開いてみる。

confirm-receive-s3-03

おぉ~ちゃんと届いている!
confirm-receive-s3-04

セキュリティ考慮事項

今回は受信ルール設定などは適当だったが条件を絞ったりしないと、すべて拾ってしまうのでこのあたりは要検討事項っぽさそうだ。

以下も構築する上で気を付けておきたい。

  • S3バケットのアクセス権限を適切に設定
  • 受信ルールでスパムフィルタリングを実装
  • 機密情報を含むメールの暗号化
  • ログ監視とアラート設定

料金

AWS SESのメール受信料金体系について

  • 受信メール1,000通ごとの料金
  • S3ストレージ料金
  • データ転送料金

参考

おわりに

AWS SESを利用したメール受信設定により、独自ドメインでのメール受信システムを構築することができた。
他にもLambdaとの組み合わせにより、受信したメールを処理することも可能そうなので試してみたいなあ。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。