Ruby on Railsのプロジェクト内でAmazon SESを使用する際、IAMの権限エラーが発生する


背景

会社プロダクトの招待メールがスパムメール化されるため、AmazonSESを利用した招待メールにすることになったが、その際にIAMエラーがわかりにくかったので投稿しようと思う。

開発環境

Ruby on Rails 5.2.1
Ruby 2.5.1

リージョン

今回使用するリージョンは北部バージニア

米国東部 (バージニア北部) us-east-1 a4b.us-east-1.amazonaws.com HTTPS

ドメイン検証

  1. Identity Management > Domains > Verify a New Domain の順に選択
  2. 好きなドメイン名を入力

※詳しいAmazon SESの設定は、この記事を参照すると良い
https://qiita.com/tanakaworld/items/94f1ba66801100f6a44f

Ruby on RailsでSESを設定後、SES経由でメールが送信されていない

それだけでなく、メール自体が送信されない。。
ログを確認すると、下記のようなエラーが。

Error performing ActionMailer::DeliveryJob (Job ID: 0000b1-cc00-0000-b000-11bfe1e1e) from Async(mailers) in 1156.29ms: 
AWS::SES::ResponseError 
(AccessDenied - User `arn:aws:iam::123123123:user/system_app_s3' is not authorized to perform `ses:SendRawEmail' on resource `arn:aws:ses:us-east-1:675052735624:identity/smartcanvas.net'):

原因

ログを確認すると、 AccessDeniedという権限周りっぽいエラーが出ている。。

AccessDenied - User `arn:aws:iam::123123123:user/system_app_s3'

AWS IAM(ポリシー編集)で、 arn:aws:iam に権限がないことが原因みたい。

※Amazon リソースネーム (ARN) は、AWS リソースを一意に識別するもの。
Amazon ARN

解決策

AWS IAM(ポリシー権限)で "ses:SendRawEmail"の追加

Action: [
"ses:SendRawEmail"
]

Eメール送信アクションへのアクセスを許可
Amazon SES へのアクセスの制御

このことにより、SES経由でメールを送信することができ、見事スパムメール対策ができた。