Amazon SES を別AWSアカウントへ移行する

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

こんにちは、クラウドインテグレーション2部 技術1課 宮形 です。

アプリケーションから利用者へEメール配信を行う場合、AWSで利用されるサービスとして Amazon SES (Simple Email Service) があります。SES は、自身でMTA(SendmailやPostfix)を管理する必要が無いことや、Eメール送受信に応じた従量課金であることがメリットです。

f:id:swx-miyagata:20220414103502p:plain

今回業務で、利用中の SES を別AWSアカウントへ移行する要件がありました。調査・検証した内容を本BLOGでご紹介させていただきます。

概要

移行概要としては下記の図のようになります。本BLOGではSES は「Eメールを送信(=配信)」するだけに利用するサービスとしています(設定によりSESでメール受信も利用可能)。データ移行は不要とし、移行先AWSアカウントでもEメールを同条件で配信することを目的としています。

f:id:swx-miyagata:20220414103614p:plain

結論としては、本検証により下記のことがわかりました。

  • 送信者Eメールアドレスは、移行元と移行先で同じ独自ドメイン(@serverworks.co.jp 等)を利用可能
  • 送信元のアプリケーションは SES 利用のための認証情報が変更必要

検証内容

アプリケーションから SES へEメール送信をリクエストするには、AWS SDK と SMTP の方法があります。今回は後者の SMTP で検証しています。 独自ドメインの名前解決は Amazon Route 53 は利用せず、外部DNSホスティングサービス「お名前.com」を利用しました。

移行先AWSアカウントでの SES セットアップ

移行先AWSアカウントにて SES をセットアップします。

独自ドメインの承認

送信者Eメールアドレスに利用する独自ドメインを、移行先AWSアカウントの SES で認証して利用可能とします。 AWSマネージメントコンソールより SESコンソールへ移動します。SESコンソールのトップページより「Create identity」をクリックします。

f:id:swx-miyagata:20220414104842p:plain f:id:swx-miyagata:20220414104854p:plain

「Create identity」の画面が表示されます。本BLOGの検証では、下記のように設定します。 移行元AWSアカウントと同じ設定とすればOKです。

  • Identity details セクション
項目 設定値
Identity type Domain
Domain 独自ドメイン (本例では miyagata.■■■)
Use a custom MAIL FROM domain チェックON
MAIL FROM domain mail
Behavior on MX failure Use default MAIL FROM domain
Publish DNS records to Route53 チェックOFF

f:id:swx-miyagata:20220414105607p:plain

  • Verifying your domain セクション
項目 設定値
Advanced DKIM settings - Identity type Easy DKIM
DKIM signing key length RSA_2048_BIT
Publish DNS records to Route53 チェックOFF
DKIM signatures Enabled

f:id:swx-miyagata:20220414105633p:plain

設定しましたら、画面下部の「Create identity」をクリックします。

次画面では設定した Identity の「Authentication」タブが表示されます。DomainKeys Identified Mail (DKIM) セクションでは「DKIM configuration」が「Pending」となっています。「Publish DNS records」に表示されるDNSレコードを控えます。後で独自ドメインのDNSサーバーに登録します。

f:id:swx-miyagata:20220414110419p:plain

画面を下へスクロールします。Custom MAIL FROM domain セクションでは「MAIL FROM configuration」が「Successful」となっている筈です。下部に指示されているDNSレコードは移行元AWSアカウントで SES セットアップした際、すでにDNSサーバーへ登録済みのためです。もし「Pending」の場合はやはり登録が必要なので「Publish DNS records」の表示を控えておきます。

f:id:swx-miyagata:20220414110645p:plain

外部DNSホスティングサービスの設定画面などで、SESより指示されたDNSレコードを設定します。下記画面は「お名前.com」の場合です。

f:id:swx-miyagata:20220414111043p:plain

私の場合、5分程待つと「DKIM configuration」「MAIL FROM configuration」の両方が「Successful」と表示されました。

f:id:swx-miyagata:20220414111146p:plain

サンドボックスの解除

SES はデフォルトではサンドボックス内に配置されており、認証外のメールアドレスやドメイン宛にはメールが送信できません。サンドボックス外とする申請を行います。移行元AWSアカウントの SES でも同様の申請を行っている筈です。

SES コンソールメニューの「Account dashboard」より表示される「Request production access」をクリックします。

f:id:swx-miyagata:20220414111524p:plain

「Request production access」の画面が表示されます。サンドボックス外とする申請の内容を記載します。私は下記画面のように申請しました。「Acknowledgement:I agee。。。」をチェックONとして「Submit request」をクリックします。

f:id:swx-miyagata:20220414111721p:plain

3分程で「お客様の申請が承認されました。」というメールが届きました。「Account dashboard」に表示されていたサンドボックスの警告もなくなりました。

f:id:swx-miyagata:20220414112109p:plain

Eメール送信テスト

この時点で SES よりEメールが送信できるかテストします。

「Verified identities」の画面に「Send test email」ボタンがあるのでクリックします。

f:id:swx-miyagata:20220414112240p:plain

「Message details」の画面が表示されます。「Scenario」より「Custom」を選択すると、任意のEメールアドレス宛にテストメールを送信できます。「Email format:Formatted」「From-address」「Subject」「Body」を入力し、「Send test email」をクリックします。

f:id:swx-miyagata:20220414112550p:plain

無事、SES よりEメールが送信されました。

f:id:swx-miyagata:20220414112817p:plain

この時、受け取ったテストメールのヘッダーを確認し、SPF と DKIM が PASS となっていることを確認します。 GMail だと「メッセージのソースの表示」をクリックすると、下記のように簡単に確認できます。

f:id:swx-miyagata:20220414120046p:plain

SMTP 認証情報の生成

「Account dashboard」の「Simple Mail Transfer Protocol (SMTP) settings」セクションを確認します。 「SMTP endpoint」と「STARTTLS Port」の値を確認し、移行元AWSアカウントの SES で利用していた値と一致していることを確認します。「Create SMTP Credentials」をクリックします。

f:id:swx-miyagata:20220414113653p:plain

画面指示に従って進めると、SMTP認証に利用するユーザー名、パスワードが表示されます。情報をCSVファイルでダウンロードするボタンもあります。ここで1度しか確認できないので、忘れず控えておきます。同時に「ses-smtp-user.xxxx」というIAMユーザーも作成されます。SMTP 情報情報を削除したい場合には、IAMユーザーを削除します。

f:id:swx-miyagata:20220414113747p:plain

以上で 移行先AWSアカウントでの SES セットアップは完了です。

アプリケーションからEメール送信の確認

移行先 AWSアカウントの SES よりEメール送信を行うよう、アプリケーションを修正します。移行元、移行先の SES が同じAWSリージョンであれば、SMTP 認証情報を書き換えるだけの筈です。

本BLOGでは、EC2 Amazon Linux 2の mailコマンドの例としています。homeディレクトリ配下の .mailrc ファイルを修正しました。

.mailrc

set smtp=smtp://email-smtp.ap-northeast-1.amazonaws.com:587
set smtp-auth=login
set smtp-auth-user=■■■(書き換え)■■■
set smtp-auth-password=■■■■■■(書き換え)■■■■■■■
set smtp-use-starttls
set ssl-verify=ignore 
set nss-config-dir=/etc/pki/nssdb
set from=test@miyagata.■■■

mailコマンドでEメール送信を行います。

mail -s "SES Send Mail Test" "■■■■■■@serverworks.co.jp" < mail.txt

無事、移行先AWSカウントの SES よりEメールが送信されました。SPF、DKIM も PASS で問題ありません。

f:id:swx-miyagata:20220414114822p:plain

まとめ

ネットで「SES 移行」など検索しても情報がみあたらず困っておりましたが、検証するとそれほど難しくなく対応できることがわかり安心しました。 今回は SMTP を使って検証していますが、AWS SDK の場合は IAMユーザーのアクセスキー・シークレットキー、またはIAMロールの修正対応が必要と考えられます。

本検証では、下記AWS公式ドキュメントを参考にしました。

別の E メール送信ソリューションから Amazon SES への移行 - Amazon Simple Email Service

本BLOGの内容が、皆様の参考になれば幸いです。

宮形純平(執筆記事の一覧)

エンタープライズクラウド部 ソリューションアーキテクト1課

好きなお酒は缶チューハイと本格焼酎