Amazon SESをプライベートサブネットからのみ利用したい

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

こんにちは。 エンタープライズクラウド部の本田です。

本記事はAmazon SESへのアクセスをプライベートサブネットからのみに限定したいと考えている方向けの内容となります。

はじめに

今回、既存のEメール送信ソリューションからAmazon SESへの移行案件を担当する機会がありました。
そのなかで、プライベートサブネットからAmazon SESへアクセスしてメールを送信したいというご要件があり、設定方法について実際に検証した内容をご紹介します。

構成図

検証した環境の概要です。
今回はAmazon SESのメール送信機能のみの利用を想定しています。

設定内容

プライベートサブネットからAmazon SESへアクセスしてメールを送信するために設定した項目は以下です。

  • プライベートサブネットからAmazon SESへのアクセス経路の設定
  • Amazon SESのIDへのアクセス制御
  • SMTPユーザーへのアクセス制御

Amazon SES自体の設定方法については以下リンクをご参照ください。

参照:Amazon Simple Email Service を設定する - Amazon Simple Email Service

プライベートサブネットからAmazon SESへのアクセス経路の設定

プライベートサブネットからAmazon SESへアクセスしてメールを送信したい場合は、SMTP インターフェイスへアクセスするためのVPCエンドポイントを用意する必要があります。
下図のようにAmazon SESへアクセスを許可したいVPCにエンドポイントを作成しました。

参考:Amazon SESAPIを使用して E メールを送信する - Amazon Simple Email Service

Amazon SESのIDへのアクセス制御

Amazon SESでは送信元として使用するドメインやメールアドレスをIDとして登録し、この登録したIDにアクセスしてメールを送信します。
このIDの承認ポリシーでVPCエンドポイントを作成したVPCからのみアクセス許可するようにポリシーを設定しました。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": [
        "ses:SendEmail",
        "ses:SendRawEmail"
      ],
      "Resource": "ドメインIDのARN",
      "Condition": {
        "StringNotLike": {
          "aws:SourceVpc": "VPCエンドポイントを作成するVPC ID"
        }
      }
    }
  ]
}

SMTPユーザーへのアクセス制御

Amazon SESから SMTPユーザーを作成すると、実際にはIAMユーザーとして作成されます。
このIAMユーザーのポリシーをVPCエンドポイントを作成したVPCからのみアクセス許可するように編集しました。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "aws:SourceVpc": "VPCエンドポイントを作成するVPC ID"
                }
            }
        }
    ]
}

動作確認

プライベートサブネット内のEC2インスタンスからのメール送信

VPCのプライベートサブネット内のEC2インスタンスからメールを送信してみます。

SMTPServerにSMTPエンドポイントemail-smtp.ap-northeast-1.amazonaws.comを指定します。
SMTPエンドポイントemail-smtp.ap-northeast-1.amazonaws.comを名前解決してみると、プライベートIPアドレスで返ってきました。

メール送信すると、エラーは発生せず、メールが受信できていることも確認できました。

なお、SMTPエンドポイントemail-smtp.ap-northeast-1.amazonaws.comをプライベートIPアドレスで名前解決するためには、VPCエンドポイントのプライベートDNSを有効にする必要があります。

何等かの理由で、SMTPエンドポイントemail-smtp.ap-northeast-1.amazonaws.comをプライベートIPアドレスで名前解決できない環境の場合は、SMTPServerにVPCエンドポイントのDNS名vpce-XXXXXXXX.email-smtp.ap-northeast-1.vpce.amazonaws.comを直接指定することでメール送信が可能です。

ちなみに、VPCエンドポイントのDNS名vpce-XXXXXXXX.email-smtp.ap-northeast-1.vpce.amazonaws.comを名前解決すると、email-smtp.ap-northeast-1.amazonaws.comと同じプライベートIPアドレスがかえってくることを確認できました。

インターネットからのメール送信

手元の作業端末からインターネット経由でメールを送信してみます。

SMTPエンドポイントemail-smtp.ap-northeast-1.amazonaws.comを名前解決してみると、パブリックIPアドレスで返ってきました。

メール送信すると、アクセス拒否のエラーが発生し、メールを送信できないことを確認できました。

さいごに

Amazon SESのIDやSMTPユーザーのポリシーをカスタマイズすることで、プライベートサブネットからのみSES経由でメール送信を許可するセキュアな環境を実現することができました。

SMTP インターフェイスへアクセスするためのVPCエンドポイントを設定することで、プライベートサブネット経由でメール送信できるようになりますが、Amazon SESはインターネットからアクセスできる状態のままです。
Amazon SESのIDやSMTPユーザーのポリシーがデフォルト設定のままですと、万が一SMTPユーザーの認証情報が漏洩してしまった場合に不特定ユーザーからのメール送信を許可してしまいます。

このようなセキュリティインシデントを防ぐためにも、Amazon SESのIDやSMTPユーザーのポリシーで多段的にアクセス制限を設定することは必要だと感じました。

本田 みかん (記事一覧)