背景
会社プロダクトの招待メールがスパムメール化されるため、AmazonSESを利用した招待メールにすることになったが、その際にIAMエラーがわかりにくかったので投稿しようと思う。
開発環境
Ruby on Rails 5.2.1
Ruby 2.5.1
リージョン
今回使用するリージョンは北部バージニア
米国東部 (バージニア北部) | us-east-1 | a4b.us-east-1.amazonaws.com | HTTPS |
---|
ドメイン検証
- Identity Management > Domains > Verify a New Domain の順に選択
- 好きなドメイン名を入力
※詳しい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経由でメールを送信することができ、見事スパムメール対策ができた。