AWS SESが不正利用されている

構成

EC2からSESを呼び出し、RDS内のメールリストからアプリ利用者向けのメール配信を行っていました。当時は開発中の段階で本番リリース前でした。
IAM
IAMuserを作成し、[SES fullaccess]権限を付与していました。
IAMuserで出力された「アクセスキー/シークレットキー」をEC2内の.envに記載していました。
EC2
バックエンド用サーバとして利用していました。メール送付のロジックやメールリストのソース場所の指定をしています。
RDS
ユーザーのメールアドレスリストを保持しています。
SES
メール送信用のサービスです。メール送信元の情報を登録しています。
SESの不正利用を検知

ある日、メールテストをしていたところ、メール送信エラーになっていることが判明しました。
調査すると、
①SESのステータスが「停止中」になっている。
②日本時間深夜帯に多数のメールが送信されている(数1,000件)
③bounce率、complain率が異常に高くなっている
AWS SESが不正利用により停止される
AWSドキュメントは下記ページです。
https://repost.aws/ja/knowledge-center/ses-reputation-dashboard-bounce-rate
バウンスや苦情率が閾値を超えると、SESが停止されるようになっています。
厳密には、即停止ではなく、「様子見期間」というような状態になった後に「停止」となります。
様子見期間になった際にメールが届くのですが、お客様アカウントの作業だったため、取りこぼしていました。そのまま気づかずに「停止」状態まで不正利用されてしまいました。
SESから多数のメールが送信されている
SESのダッシュボードには送信件数と時間がグラフで表示されています。
確認すると、数千件のメールが一度に送信されている履歴がありました。
SESが送信されていた時間帯は日本時間で深夜帯の時間で、開発メンバーも業務終了している時間です。
SESダッシュボード上でbounce率、苦情率の上昇
上記のメール送付が原因で、bounce率や苦情率が一気に跳ね上がりました。
苦情を言っているメールアドレスがダッシュボードから確認できるのですが、見知らぬメールアドレスばかりでした。
メールアドレスを見る限り、主に海外宛のメールです。
SES利用料金
SESは比較的安価なサービスであるため、被害額は数ドル程度でした。
ですが、それ以上に送信用メールアドレスがブラックリストになるなどの危険性があるため、不正利用されないに越したことはありません。
切り分け
当時は、「SES不正利用」とだけ判明したため、どのような経路で不正利用されたかは分かっていませんでした。
そのため、切り分けを実施しました。
CloudTrail
CloudTrailを使って、該当時間に誰か作業をしていないか確認しました。
該当時間では、IAMユーザーとして使用していたEC2の履歴のみでした。
ここから、開発中のEC2がメールを送信しているということが分かります。
SES利用についてメンバーへ聞き取り
開発メンバーへ、メールのテストを実施していたか、数千件送るようなロジックになっていないか確認しました。
こちらは問題ありませんでした。
【結論】IAMアクセスキーが流出している
以上から、IAMユーザーのアクセスキー・シークレットキーが何らかの理由で流出し、不正利用されていると判断しました。
SES不正利用の再発防止対策
以上のことから、IAMユーザーのアクセスキー/シークレットキーが流出していると判断しました。
暫定対策として、IAMユーザーのアクセスキー/シークレットキーを再発行しました。
恒久対策としては、IAMロールでの実施やAWS Secrets Managerに保管することが挙げられました。
また、bounce率の低減のためにユーザーのメール登録時にアクティブなメールアドレスであるか確認する承認工程を追加開発することとなりました。
対策後のSES制限解除申請

対策が完了したため、SESの制限解除申請を行います。
Support Centerにて解除申請をします。
文面には、「原因」「対策」「対策により期待できる効果」を記載します。
重要なのは、対策が既に実施されていることです。
「対策予定」という段階では制限解除の許可は出ません。
申請後は数日で承認され、SESが再度利用できるようになりました。
最後に、解除メールの文面例をご紹介します。
解除メール文面例
ご担当者様
お世話になります。
この度はSESの機能でご迷惑をお掛け致しまして、誠に申し訳ございませんでした。
原因の調査及び修正を行いましたので、SESの利用を再開させて頂ければ幸いです。
【原因】
現在、ウェブアプリケーションをEC2およびRDSで開発中となり、一般のユーザーへのサービスインはしていない状況です。
ウェブアプリケーション内で利用するユーザー宛にシステムメッセージを送る機能をSESを利用して開発を行いました。
cloudtrailなどの状況から、IAMのアクセスキー・シークレットアクセスキーの流出が原因と判断しました。
【対策】
IAMの再発行を行い、AWS Secrets Managerで管理するようプログラムを変更しました。
IAM権限もSES full accessから送信機能のみの権限と範囲を限定しました。
また、添付(xxxx.mov)にあるように、システム上でメールアドレスの登録時に、ユーザーによるアクティブなメールアドレスであるか確認する承認工程を追加開発し、実装完了致しました。
【期待できる効果】
IAMによる不正利用の防止。
また、ユーザーはメールの受信項目の設定を詳細に決めることが可能であるため、苦情率も増加は無いと考えられます。
AWSの効果的な学習方法は?

最後に、AWSの効果的な学習方法をご紹介します。
自学自習はUdemy講座
オンラインプラットフォームであるUdemyは安価で手軽にAWSの学習が可能です。
しかし、上記で紹介したような実際のAWSエンジニアが実施している構築スキルまでは教えてくれません。初心者~中級者向けの講座が多くなっています。
私も受講した、初心者向けAWS講座を下記記事でまとめています。ご参考ください。
1人で学習が難しい場合はオンラインレッスン
1人で学習が難しい場合はオンラインレッスンがおすすめです。
最近では、AWS講座を提供するオンラインレッスンも増えてきました。
料金は高くなりますが、現役エンジニアからAWSについて学ぶことができます。
本ブログ執筆者のメンタリングも受付中
本ブログを執筆している[KAITech]もメンタリングを受け付けています。
オンラインレッスンは高くて手が出せないという方は私までお気軽にご相談ください。
下記から承っております。