■2020年5月26日追記
awsが公式にSESのprivatelinkをサポートしたのでこちらの記事は陳腐化しました。
今後、こちらを試して記事にしてみます。
https://aws.amazon.com/jp/about-aws/whats-new/2020/04/amazon-ses-now-offers-vpc-endpoint-support-for-smtp-endpoints/
※本記事はSESのPrivateLinkが存在していない時点での記事となりますので、今後サービスとして利用可能になった時点で古い記事になります。
#目的
本記事では、以下2点についての共有を目的とします。
①.Privateセグメントに設置されているWEBサーバより、Amazon Simple Email Service(以下、SESと記載する)を利用したメール配送を行えるデザインパターン
②.①の作成過程で判明した事柄
#はじめに
エンタープライズ向けのaws開発では、PrivateセグメントにWEBサーバを配置し、外部へメール送信する必要があるシステムを要求される事があるかも知れません。
外部へのトラフィックについては、厳重なセキュリティ設計が要求されるかも知れません。
私はそのようなシステムを要求され開発を行ったのですが、その中で分かった事を以下に記載致します。
#当初想定していたシステム構成
awsでは、PrivateセグメントからInternetを経由せず、awsのサービスへ接続する事が出来る仕組みがあると聞いた事があったので
SESでも同様の事が出来るだろうと思っていました。
インターネットで調べても記事は見つからなかったのですが、SESのインターフェースの名前がSMTPエンドポイントと呼ばれている事が分かりました。
脳内でSMTPエンドポイント=エンドポイント≒PrivateLinkと同等の機能がある?と勝手に変換し、以下システム構成にて接続を試みました。
SESの各種カウントが上がっていなかったので、送信出来ていない事が分かりました。。。
#システム構成を再検討
公式ドキュメントやアンオフィシャルのブログ等を調べた結果以下の事が分かりました。
・SES用のPrivateLinkは現時点では存在していない。
・NATゲートウェイ、インターネットゲートウェイが必要そう。
・VPCピアリングをして、ピアリング先のVPCのNATゲートウェイを利用する事も検討したが、ピアリング元からピアリング先のNATゲートウェイは使えない仕様でした。
・インターネット経由の通信トラフィックは、メールのみに通信ポートを絞る方がセキュリティ的に良い。
・NATゲートウェイ、インターネットゲートウェイに対してセキュリティグループ、ネットワークACLをアタッチする事は出来ない。
・VPC、サブネットに対してセキュリティグループをアタッチする事はできないが、ネットワークACLをアタッチする事は出来る。
これらを踏まえて、以下システム構成にて接続を試みました。
SESの各種カウントが上がっていなかったので、送信出来ていない事が分かりました。。。
#システム構成を再々検討
ネットワークACLにて、587ポートのinbound,outboundについて開放したが、なぜか通信できないので、
VPCフローログを確認すると謎のポート(1万番台や5万番台など)が利用されていた。
色々調べた結果、NATゲートウェイは動的NAPTという形態のNATである事が判明した。(動的にポートを変える仕様?)
公式ドキュメントにも1024-65535の範囲のポートを使う旨の記載がありました。
(NATインスタンスはポート転送機能に対応している記載があったので、恐らく587ポートのみで通信が可能。(未検証))
また、SESは有料オプションで固定IPアドレスが利用可能である事が判明した。(24.95USD/月)
#デザインパターン
これまでの調査結果を踏まえて完成したデザインパターンを以下に記載します
(机上評価しか実施しておりませんので、動作保障は致しません)
2019/2/8 修正 ネットワークACLはステートレスなので、行き・帰り両方の通信に対しての定義が必要。
ルートテーブルの記載も追記。