Más contenido relacionado La actualidad más candente (20) Similar a AWS Black Belt Tech シリーズ 2016 - Amazon SES (11) Más de Amazon Web Services Japan (20) AWS Black Belt Tech シリーズ 2016 - Amazon SES2. 2
アジェンダ
• Amazon SESとは
• Amazon SESによるメール送信
– ご参考:Amazon EC2インスタンスからのメール送信
• Amazon SESによるメール受信
• Amazon SESその他詳細
• まとめ
3. 3
アジェンダ
• Amazon SESとは
• Amazon SESによるメール送信
– ご参考:Amazon EC2インスタンスからのメール送信
• Amazon SESによるメール受信
• Amazon SESその他詳細
• まとめ
4. 4
Amazon SESとは?
• コスト効率に優れたEメールサービス
• 信頼性が高くスケーラブルなインフラストラクチャで構築されている
• メール送信
– トランザクションメールやマーケティングメッセージ、その他あらゆする種類の高品質
なコンテンツを顧客に送信可能
• メール受信
– 受信したメールをトリガーにしてAmazon S3バケットへ配信、AWS Lambda関数を使
用したカスタムコードの呼び出し、Amazon SNSへの通知の発行等が可能
• バージニア・オレゴン・アイルランドのリージョンで利用可能
NEW !!
6. 6
アジェンダ
• Amazon SESとは
• Amazon SESによるメール送信
– ご参考:Amazon EC2インスタンスからのメール送信
• Amazon SESによるメール受信
• Amazon SESその他詳細
• まとめ
8. 8
Amazon SESによるEmail送信
〜HTTP REST API〜
• 他のAWSサービスと同様にSDK等からコール
– SendEmail API: From, To, Subject, Bodyだけを用意すればAmazon
SES側でメッセージを生成して送信
– SendRawEmail API: メッセージ全体をアプリケーション側で生成し
て送信
• 認証はAWS アクセスキーとシークレットアクセスキー
を使用
• アプリケーションから直接メール送信を行う場合に便利
20. 20
送信承認のユースケース
• 指定されたEメールアドレスからのみ送信を許可
• Return Pathに特定のEメールアドレスを指定したときのみ送
信を許可
• 指定された期間のみ送信を許可
• Fromアドレスの表示名に特定のフレンドリ名が指定された
時のみ送信を許可
• 詳細は以下を参照
– http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send
ing-authorization-policy-examples.html
22. 22
送信承認を使った別のAWSアカウントからのEメール送
信の例
• AWS CLIを使った例
aws ses send-email --from user@example.com
--destination file:///home/ec2-user/destination.json
--message file:///home/ec2-user/message.json
--source-arn arn:aws:ses:us-east-1:987654321098:identity/example.com
別のAWSアカウントが保持するドメインを指定
24. 24
Suppression List機能
• Suppression List:ハードバウンスしたEmailアドレス
が登録されるリスト
– 一度登録されると2週間程度は残る(手動削除は可)
– アカウントを越えて共有
– 登録済みアドレスに送信を試みた場合は、SESへのCallは成功するが、
SESから外部へは送信されずにハードバウンスとして処理される
• Suppression Listの役割
– バウンスを起こし続ける事で送信元ドメインやSESのIPアドレスプー
ルの評判が落ちないよう保護
26. 26
Amazon SESからメールを送信する時の
注意点
• コンテンツ・送信先リストの正しい管理運用が必須
– BounceやComplaintの処理を行っていないと送信レートの抑制や送信停止
措置が取られる事もある
(IPアドレスプールをクリーンに保つとともに、世の中のメールの信頼
性・健全性向上を促すため)
– Spamと判定されるようなメールを定常的に配信していると送信停止措置
の可能性あり
• 現状日本国内の携帯キャリアの制限を十分考慮した配信アル
ゴリズムになっていない
– 携帯キャリアのアドレスに送信する時には、SES以外の選択肢も検討する
28. 28
SMTPにおける送信元認証のための技術
• 送信元IPアドレスに基づく認証
– Sender Policy Framework (SPF)
– Sender ID
各ドメインでメール送信元であるべきホストのIPアドレスやドメイン名を
DNSで公開
各DNSドメインにレコードを追加するだけで開始できる
• 送信元による署名に基づく認証
– Domain Keys Identified Mail (DKIM)
送信元で各メールにデジタル署名をし、公開鍵をDNSで公開
送信者あるいは送信元サーバでの対応が必要
※Amazon SESから送信する場合 は、Amazon SES が所有する “Mail-From” ドメインから E メールを送信する。
そのため、E メールが SPF での認証用に DNS レコードを変更する必要はない。
29. 29
2. 署名付きEmail送信
From: foo@sender.com
To: bar@receiver.com
DKIM-Signature: s=xyz; d=sender.com …1. Email送信
From: foo@sender.com
To: bar@receiver.com
DKIM有効化時のメール送受信の流れ
• MTAでキーペアを管理、公開鍵をTXTレコードで送信元
ドメインに設定
sender.com
MTA smtp.receiver.com
3. 公開鍵問い合わせ
TXT xyz._domainkey.sender.com
4. 公開鍵返答
TXT “公開鍵”
MTA及びDNSに必要な設定をすることで導入
30. 30
2. 署名付きEmail送信
From: foo@sender.com
To: bar@receiver.com
DKIM-Signature: s=xyz; d=sender.com …1. Email送信
From: foo@sender.com
To: bar@receiver.com
DKIM有効化時のメール送受信の流れ
(SESの場合)
• SES側でキーペアを管理、公開鍵をCNAMEでユーザド
メインに設定
sender.com
amazonses.com
SES smtp.receiver.com3. 公開鍵問い合わせ
TXT xyz._domainkey.sender.com
4. CNAMEレコード返答
CNAME xyz.dkim.amazonses.com
5. 公開鍵問い合わせ
TXT xyz.dkim.amazonses.com
6. 公開鍵返答
TXT “公開鍵”
33. 33
SMTPのステータスコード
• 200番台
– 正常応答
– 情報提供
• 300番台
– データ入力を促す(354)
• 400番台
– 一時的なエラー: サーバシャットダウン、メールボックスbusy、メール
ボックス溢れ
• 500番台
– システムエラー: コマンド間違い
– 転送エラー: メールアドレスなし、処理失敗通知
34. 34
配信エラーメール
• SMTPセッション時のエラー
– 送信元のMTAが作成。
– エンベロープの発信者メールアドレスにエラーメールが戻る
(Return-Path or Errors-To ヘッダに記載)
• SMTPセッション時以外
– 送信先のMTAが作成
– エンベロープの発信者メールアドレスにエラーメールが戻る
エラー発生時、ユーザが存在しないなどの恒久的なエラー(ハードバウンス)
については再度送信しないように送信側で対処(バウンス処理)が必要
36. 36
SESの配信通知
• SESが正常に受信者の電子メール
サーバーにメッセージを配信するた
びに、Amazon SNSの通知を受け
取ることを選択可能
– E-mailはBounce、Complaintsのみ
• 配信、バウンス、Complaintsの全
てをSNSトピックへの通知を介して
追跡可能
{"notificationType":"Delivery",
"mail":{
"timestamp":"2014-05-28T22:40:59.638Z",
"messageId":"0000014644fe5ef6-9a483358-9170-
4cb4-a269-f5dcdf415321-000000",
"source":"test@ses-example.com",
"destination":[
"success@simulator.amazonses.com",
"recipient@ses-example.com" ]
},
"delivery":{
"timestamp":"2014-05-28T22:41:01.184Z",
"recipients":["success@simulator.amazonses.com"],
"processingTimeMillis":1546,
"reportingMTA":"a8-70.smtp-out.amazonses.com",
"smtpResponse":"250 ok: Message 64111812
accepted"
}
}
38. 38
送信停止措置について
• 下記のような場合、送信停止措置が適用される可能性有り
– Bounce/Complaintレートが高い状態が続く
– Spam Filterのヒットレートが高い
• 送信停止措置の警告とProbation(猶予)
– SESから警告のメールが管理者アドレスに届く
– メッセージ例:
Dear Amazon Simple Email Service Customer:
We have detected a problem with your Amazon Simple
Email Service (Amazon SES) sending that has put your
Amazon SES account on probationary status.
上記のような通知を受け取った場合には次のページを参照の上で注意深く対応のこと
39. 39
Probationの通知があった場合の対処方法
• まず理由とProbationの間に送信可能な数を確認
– メッセージ例:
• 原因を取り除き、効果を確認した後、実施した改善内容を返信
– nの値は普段送信しているボリュームを鑑みて設定される
• 但し、リスクを考えると改善適用までは代替手段でメール配信を行うことを推奨
*Unacceptably Low Content Quality: Over the last approximately xxx email
messages you sent, an unacceptably high percentage were identified as
spam by our filters.
*This issue must be fixed within the next n emails you send.
上記の場合次のn通のメッセージを送り終えるまでにメールのコンテンツを改善(*)
しないと送信停止措置適用へ
* 個別のメールがSpam Filterにかかるかどうかはご案内出来ないので一般的なSpam Filter
ソフトウェアでご確認下さい
改善方法や改善結果のアピールに不安があれば担当営業/SAまでご相談ください
47. 47
構成とDNSレコードの例
• DNSレコード例
;; example.com
@ IN A 203.0.113.3
@ IN MX 10 mx1
@ IN MX 20 mx2
mx1 IN A 203.0.113.4
mx1 IN A 203.0.113.5
mta1 IN A 203.0.113.6
mta2 IN A 203.0.113.7
@ IN TXT "v=sfp1 ip……"
@ IN SPF "v=sfp1 ip……” mta1 mta2 mx1 mx2
DNS
*.113.0.203
1.
RCPT TO alice@receiver.com
MAIL FROM bounce@example.com
mx.receiver.com
2.
203.0.113.6?
3. PTR
mta1.example.com
(Bounce/error) *
DNS
example.com
4. SPF?
5. SPF
"v=sfp1 ip…"
逆引き申請
で登録
*一般にバウンス等のエラーは受信側MXサーバによりセットされるreturn-pathヘッダに記載のア
ドレスに返される。
48. 48
1. MTAのホスト名とIPアドレス
• MTAのホスト名を決める
– 例:mta1.example.com, mta2.example.com
• IPアドレスの取得
– 通常通りElastic IPをホスト名の数だけ取得
• DNS Aレコードを登録
– mta1.example.com IN A <EIP 1>
– mta2.example.com IN A <EIP 2>
49. 49
2. 逆引きDNSの申請
• メール送信の目的を記入
• 申請対象のEIP
• EIPの逆引き結果
となるべきホスト
名を記入
DNSの正引きの
一致が必要
https://portal.aws.amazon.com/gp/aws/html-forms-controller/contactus/ec2-email-limit-
rdns-request
59. 59
Eメール受信のプロセス(1)
• 1. SES は最初に送信者の IP アドレスを確認する。以下に該当しな
い場合は、2以降に進む
– IP アドレスがブロックリストに含まれている
– IP アドレスが Amazon SES のブロックリストに含まれており、指定した許可リスト
には含まれない。
• 2. SES は、設定された有効な受信ルールセットを調査して、受信
する E メールのいずれかの受信者と一致する条件が受信ルールに
含まれているかどうかを判定する。
• 3. 受信ルールの条件に一致がない場合、SES は当該メールを拒否
する。そうでない場合、SES はメールを受け入れる。(次頁へ続
く)
63. 63
MXレコードの公開
• Mail exchanger (MX)レコードは、ドメインのメールを
処理するメールサーバを示すためにDNSサーバ上に登録
されるレコード
• SESのメール受信用のエンドポイントをMXレコードに
指定可能
– 例:inbound-smtp.us-west-2.amazonaws.com
70. 70
設定した受信用メールアドレスにEメールを送信してみる
• S3に保存されたメールを確認する(S3へ保存する設定の場合)
• 保存されたメールの中身の例
Return-Path: <送信元メールアドレス>
Received: from XXXXXXXXXXX (XXXXXXXXXXXXX [xxx.xxx.xxx.xxx])
by inbound-smtp.us-east-1.amazonaws.com with SMTP id xxxxxxx
for 受信メールアドレス;
(途中省略)
--001a11427a60fa62c80527f1f0b7
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
VGVzdOOBp+OBme+8ge+8ge+8gQ0K
--001a11427a60fa62c80527f1f0b7
(以下省略)
base64でデコードすると
「Testです!!!」という
メール本文を取得
71. 71
SESでメール受信時のAWS Lambda関数の呼び出し
• Lambda関数の呼び出しタイプ
– Request Response: 即座に呼び出される。30秒のタイムアウトがある
– Event: 非同期で呼び出される。同期実行が必要とされる場合を除き、
Eventタイプの利用を推奨
• Event呼び出しを利用して、Lambda関数に渡されるEventオ
ブジェクトに受信メールのメタデータを含めることが可能
– メタデータを使って、S3に保存したメールの本文のメッセージコンテンツ
を取得可能
※メタデータに本文のメッセージコンテンツは含まれない
77. 77
Amazon WorkMailとの統合
• Amazon WorkMailでは、SESを使用してメールが送受
信される
• WorkMailを設定すると、SESの構成設定に以下が作成
されるので、削除してはいけない。
– 送信承認ポリシー
• WorkMailからお客様のドメイン
を介して送信されることを許可
– 受信ルール
• お客様のドメインの受信メールを
WorkMailに配信するWorkMailア
クションが設定されている
78. 78
SESのAmazon CloudTrail対応
• SESのAPIコールのログをCloudTrailにて取得可能
• サポートされるAPIコール
CloneReceiptRuleSet DeleteVerifiedEmailAddress GetSendStatistics SetIdentityDkimEnabled
CreateReceiptFilter DescribeActiveReceiptRuleSet ListIdentities SetIdentityFeedbackForwardingEnabled
CreateReceiptRule DescribeReceiptRule ListReceiptFilters SetIdentityNotificationTopic
CreateReceiptRuleSet DescribeReceiptRuleSet ListReceiptRuleSets UpdateReceiptRule
DeleteIdentity GetIdentityDkimAttributes ListVerifiedEmailAddresses VerifyDomainDkim
DeleteReceiptFilter GetIdentityNotificationAttributes ReorderReceiptRuleSet VerifyDomainIdentity
DeleteReceiptRule GetIdentityVerificationAttributes SetActiveReceiptRuleSet VerifyEmailAddress
DeleteReceiptRuleSet GetSendQuota SetReceiptRulePosition VerifyEmailIdentity
79. 79
料金
• Eメール1,000 通当たり 0.10 USD
• 添付ファイル料金
– 0.12 USD / GB
• データ転送料金はEC2のデータ転送料金と同じ
– 受信は無料
– 送信は複数Tier
• 各月の最初の1GBまでは無料(その他のサービスも合算)
• 各月の次の10TBまでは0.12 USD/GB (us-east-1, us-west-2, eu-west-1)
• 詳細は http://aws.amazon.com/ec2/pricing/#DataTransfer
注:リージョンを越えた送信は送信元リージョンからのリージョン間転送料金が追加適用
(2016年1月現在、Tokyoリージョンでは0.09 USD/GB)
84. 84
参考資料
• Amazon Simple Email Service Email Sending Best
Practicesホワイトペーパー
– http://media.amazonwebservices.com/AWS_Amazon_SES_Best
_Practices.pdf
• Amazon SES Blog
– http://sesblog.amazon.com/
85. 85
その他の参考情報
• 携帯キャリア各社からのメール送信に関する注意事項
– 送信ドメイン認証(Sender ID/SPF)について | NTTドコモ
• http://www.nttdocomo.co.jp/service/communication/imode_mail/notice/send
er_id/
– 同報メールを大量に送信されるお客様へ | NTTドコモ
• http://www.nttdocomo.co.jp/service/communication/imode_mail/notice/mass
_send/
– EZwebへメール送信する際の注意事項(概要)│au
• http://www.au.kddi.com/mobile/service/mail/attention/
– メール送信時のお願い│EZwebへメール送信する際の注意事項(概要)│au
• http://www.au.kddi.com/mobile/service/mail/attention/request/
– 迷惑メールに対するソフトバンクモバイルの取り組み | ソフトバンクモバイル
• http://www.softbank.jp/mobile/support/antispam/wrestle/
• メールシステムのおはなし #Mailerstudy
– http://www.slideshare.net/ar_maniacs/mailerstudy