はじめに
BtoB向けのWebシステムでは、何かしらの通知をメールで行う事があります。
イントラ内に構築されたシステムであれば、Web/APサーバーから、お客様の内部SMTPサーバー宛にメール送信すればよいのですが、SaaSとしてWebサービスを提供している場合は、公開SMTPサーバー宛にインターネットメールを送信する事になります。
しかし、企業によっては、セキュリティの観点から、一部社員などについて、インターネットメールを受信できなくしている場合があります。
このような場合に、どのような解決策があるのか、整理してみたいと思います。
取りうる手段
インターネットメールを受信できない場合、インターネット経由で送信したメールを、お客様社内にある内部SMTPサーバー宛にメール送信できるようにする必要があります。
WebサービスがAWS上にある場合、上記を解決する方法として、以下の3つが考えられます。
- お客様ネットワークに、インターネット(Webサービス)からのメール通知を受け取るためのグローバル(パブリック)IPアドレス(GIP)を用意してもらい、NAT変換するなどして、お客様内部SMTPサーバーに受け渡す。
- お客様AWS環境(ある場合)のパブリックサブネットにNetwork Load Balancer(NLB)を構築し、NLBのターゲットグループに、お客様内部SMTPサーバーのプライベートIPアドレスを指定。
- お客様の公開SMTPサーバーからメールリレーして内部SMTPサーバーに転送。
以下に、1、2のパターンについての構成を記載します。
1. お客様GIP宛にメール送信し、NAT変換などして内部SMTPサーバーにメール送信
この構成では、お客様に新たにGIPを追加いただく必要があり、またネットワーク設定も変更が必要になるため、手間はかかりますが、お客様AWS環境が無い場合は検討の余地があると思います。
ただし、SMTPSなどを利用しない場合、インターネットをメールが平文で送信されることになるので、メールの内容によっては、セキュリティ面での考慮が必要になる場合があります。
この構成の場合、以下のようなメール通知の流れになります。
- Webサービスからメール送信する際の宛先は、お客様環境のGIP(パブリックIPアドレス)を指定(プロトコル/ポートはTCP/587等)
- お客様ファイアウォールでは、WebサービスのNAT GatewayのパブリックIPアドレスからのTCP/587等の通信を許可
- お客様環境では、受け取った通信をルーターやL3スイッチ等でNAT変換して内部SMTPサーバーに受け渡す
2. お客様AWS環境のNLB経由で内部SMTPサーバーにメール送信
お客様AWS環境がある場合は、以下のような構成をとることができます。
AWS環境同士では、Internet Gatewayから出ていく経路であっても、インターネットは経由せず、AWS内のネットワークでの通信となるため、1のパターンよりも敷居が低くなるかもしれません。
やっている事はパターン1とほぼ同じですが、管理コンソールでの操作で簡単に構成を作り、検証できるのはありがたいですね。
また、2023年8月からNLBでもセキュリティグループが利用できるようになったので、通信制御もよりやりやすくなりました。
※ルートテーブル、セキュリティグループなどの設定はよしなに行ってください。
この構成の場合、以下のようなメール通知の流れになります。
- Webサービスからメール送信する際の宛先は、お客様AWS環境のNLBのパブリックIPアドレスを指定(プロトコル/ポートはTCP/587等)
- お客様AWS環境では、セキュリティグループやネットワークACLで、WebサービスのNAT GatewayのパブリックIPアドレスからのTCP/587等の通信を許可
- お客様AWS環境のNLBでは、受け取った通信を内部SMTPサーバーに受け渡す
NLBのターゲットグループで、オンプレミス環境も含めたIPアドレスを指定できるのが、このような場合とても助かります。
おわりに
AWS環境のWebサービスから、インターネットメールが受信できないお客様環境宛にメール通知する方法について簡単にまとめてみました。