AWSでメール送信を安全かつ効率的に行う方法完全ガイド

目次

はじめに

目的

本報告書は、AWSを使ったメール送信の方法を分かりやすくまとめたものです。用途や規模に応じた選択肢、設定手順、運用上の注意点を具体例を交えて解説します。

概要

主に次の3つのアプローチを扱います:EC2上にSMTPサーバーを構築する方法、Amazon SES(Simple Email Service)を利用する方法、外部SMTPリレーサービスを使う方法です。さらに、SESでの認証や権限設定、APIの使い分け、Step Functionsとの連携例も含めます。

対象読者

AWSでメールを送信したいエンジニアや運用担当者、これから選定を行うプロジェクトリーダー向けです。基本的なAWSアカウント操作やLinuxの基礎が分かっていれば読みやすい内容です。

読み方の指針

各章は実装手順と設定例を中心に記載します。まず目的に合った方式を選び、必要な箇所を実際に試しながら進めることをおすすめします。

AWSでメール送信する3つの主要な方法

1. EC2上にSMTPサーバーを構築する方法

自身でPostfixやEximなどをインストールして運用します。自由度が高く、独自の設定やログ管理ができます。例えば社内専用の通知や細かい送信制御が必要な場合に向きます。ただし、スパム対策やIPのレピュテーション管理、24時間の監視が必要です。

2. Amazon SES(Simple Email Service)を利用する方法

AWSのマネージドサービスで、サーバー構築不要で大量送信にも耐えます。認証(DKIM/SPF)や送信制限の管理も簡単です。コストは使用量に応じて低めで、スケーラビリティを重視する場合に便利です。開発者向けにAPIやSMTPインターフェースが用意されています。

3. 外部のSMTPリレーサービスを利用する方法

SendGridやMailgunなどの外部サービスを使います。配信率改善や配信分析、テンプレート機能などが豊富で、設定が簡単です。SESと組み合わせてSESをリレー先にすることも可能です。運用負荷を抑えたい場合に向いています。

選び方のポイント

  • 自由度と制御が最優先ならEC2構築
  • コストとスケール重視ならSES
  • 運用負荷を減らし機能を求めるなら外部リレー
    具体的な要件(送信量、運用体制、配信成功率)で選ぶと失敗が少ないです。

EC2でSMTPサーバーを構築する方法

概要

EC2上にPostfixを入れてSMTPサーバーを立てる手順を、実例を交えて丁寧に説明します。自由度が高い一方で運用管理が必要です。

前提

  • Amazon Linux 2またはRHEL系のEC2
  • セキュリティグループで該当ポートを開放

手順(主要手順のみ)

1) パッケージのインストール

sudo yum install -y postfix cyrus-sasl-plain

2) main.cfの基本設定例(/etc/postfix/main.cf)

myhostname = mail.example.com
inet_interfaces = all
mydestination = $myhostname, localhost
relayhost = [smtp.example.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes

3) SMTP認証情報(/etc/postfix/sasl_passwd)

[smtp.example.com]:587 username:password

保存後に実行:

sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd*
sudo systemctl enable --now postfix

テスト

swaksやtelnetで送信を試します。

運用上の注意

  • 資格情報は権限を限定して保護してください。
  • メールキューやログを監視し、アップデートを適用してください。AWSではポート25の制限があることがあるため、587を使う運用を推奨します。

Amazon SES(Simple Email Service)を利用する方法

概要

Amazon SESはAWSが提供するマネージドなメール送信サービスです。サーバー構築不要で即時にメールを送信できます。送信元はメールアドレスIDかドメインIDのどちらかで検証します。用途に合わせてAPIやSMTPを使い分けます。

準備(検証とリージョン)

  1. 送信元メールアドレスまたはドメインを検証します。ドメイン検証は複数アドレスの管理に便利です。
  2. SESはリージョンごとに設定が必要なので、利用するリージョンを選びます。

送信方法の違い

  • AWS SDK:プログラムから直接呼び出せます。細かい制御やメタデータの扱いに向きます。
  • SMTP:既存アプリやライブラリと簡単に連携できます。
  • API(sendEmail / send_raw_email):sendEmailは標準的な送信、send_raw_emailは添付やヘッダーを自在に操作する用途に使います。

簡単なPythonサンプル(boto3)

from boto3 import client
ses = client(‘ses’, region_name=’ap-northeast-1′)
resp = ses.send_email(Source=’you@example.com’,
Destination={‘ToAddresses’:[‘to@example.com’]},
Message={‘Subject’:{‘Data’:’件名’},’Body’:{‘Text’:{‘Data’:’本文’}}})

IAMとセキュリティ

最小権限のIAMユーザーを作成し、送信に必要な権限(ses:SendEmailやses:SendRawEmailなど)だけを付与してください。アクセスキーは安全に管理します。

Step Functions連携

Step FunctionsからLambda経由でSESを呼ぶ構成が一般的です。送信の前後でワークフローを組み、再試行やログ処理を行えます。

SMTPリレーサービスを利用する方法

概要

外部のSMTPリレーサービスは、メール送信を代行する仕組みです。AWS外部やAWS内のアプリから利用できます。送信の安定性や到達率を高めたいときに便利です。

メリット

  • 到達率向上:送信実績やレピュテーション管理を提供します。例:SendGrid、Mailgun、SparkPostなど。
  • 設定が簡単:アプリ側はSMTP設定を変えるだけで送信できます。

デメリット

  • コスト:大量送信では料金が発生します。
  • レート制限:送信上限に注意が必要です。

設定手順(簡潔)

1) サービスでアカウント作成しSMTP資格情報を取得します。
2) アプリやMTA(Postfixなど)でSMTPホスト、ポート(通常587)、ユーザー名、パスワード、STARTTLSを設定します。
3) 送信テストとバウンス/苦情のWebhook設定を行います。

Postfixの簡単な例

relayhost = [smtp.example.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes

運用時の注意

  • 資格情報は安全に保管します。鍵管理や環境変数で扱ってください。
  • 送信量に応じてプランを選び、レート制限やバウンス処理を監視します。
  • ログとWebhookで問題を早期に検知します。

メール送信時の認証とセキュリティ設定

SMTP認証(SESをSMTPリレーで使う場合)

SESをSMTPリレーとして使う際はSMTP認証を必ず有効にします。Postfixなどでは smtp_sasl_auth_enable = yes と設定し、smtp_sasl_password_maps にSMTP用のユーザー名とパスワードを登録します。smtp_use_tls = yes や smtp_tls_security_level = may(またはencrypt)を併用し、通信を暗号化します。例:ポート587(STARTTLS)や465(TLS)を使います。

API呼び出しとSignature Version 4

AWS SDK経由でSES APIを使う場合はSignature Version 4(SigV4)でリクエストに署名します。公式SDKは自動で署名を行いますが、自前実装では署名処理を正しく実装してください。EC2やLambdaではIAMロールを使うとアクセスキーを埋め込まずに済み、安全です。

送信ドメインの認証(SPF/DKIM/DMARC)

SPFは送信許可をDNSで示す仕組み、DKIMはメール本文に電子署名を付ける仕組みです。両方を設定すると受信側で正当性が高く評価され、到達率が上がります。DMARCはこれらを監視・ポリシー化します。SESでは簡単にDKIM用のDNSレコードを発行できます。

IAMと認証情報の管理

SMTP用の認証情報やAPIキーは最小権限で運用し、定期的にローテーションします。秘密情報はAWS Secrets Managerやパラメータストアで安全に保管します。

ベストプラクティス

  • TLSを必ず有効にする
  • 送信ドメインを検証する(SPF/DKIM)
  • IAMロールでAPI呼び出しを行う
  • 認証情報を安全に保管・定期ローテーション
    これらで安全にメール送信を運用できます。
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次