ローカルではできているのに、AppRunnerでデプロイしたサービスではSESを使ってメールが送れません。

0

djangoで制作したウェブアプリで、ユーザー登録の際にメールで送信した認証コードを入力してもらうことでアカウントを有効化するという機能をつけようとしています。ドメインの認証、ユーザーのSESへの許可の割り当て、サンドボックスからの卒業などのもろもろの作業は終えていて、ローカル環境ではすでにメールの送信と認証ができるようになりました。しかしAppRunnerでデプロイしたサービスからアカウント登録をしようとするとメールが送信されません。CloudWatchでログを見ると"Unable to locate credentials"というエラーメッセージが表示されています。どこでSESへのアクセスが制限されているのかわかりません。 仮に解決方法が「AppRunnerのサービスにSESFullAccessを持ったIAMロールを紐付ける」だった場合は、デプロイの際にインスタンスロールという欄に作成したロールを当てればいいのでしょうか。またそのときはサービスの作成からデプロイをし直さないといけないという認識で合っていますか?

1回答
0

"Unable to locate credentials"なのでIAMロールに必要な権限が設定されているか確認する必要があります。
なのでAppRunnerのサービスロールにSESFullAccess (フルアクセスは本当はあまりよくないですが...) を設定することで使用できるようになると思います。
https://docs.aws.amazon.com/ja_jp/apprunner/latest/dg/security_iam_service-with-iam.html

設定する場所はインスタンスロールで合っています。
再デプロイまで行わなくても追加できると思います。
App Runnerのサービスを選択して設定タブから「ソースおよびデプロイ」の編集から変更可能です。
set
iam

profile picture
エキスパート
回答済み 9ヶ月前
  • 回答ありがとうございます!教えてくださったようにIAMロールを作成してSESFullAccessを与え、サービスの設定からインスタンスロールに作成したロールを当てはめました。その後サイトからユーザー登録しようとするとタイムアウトしてしまうようになりました。メールも送信されておらず、CloudWatchのログをみてもこれといったエラーは表示されていません。先ほどのロールを確認すると最後のアクティビティがなしになっています。何が原因なのでしょうか。 S3やRDSとも接続しているのですが、これらとはsettings.pyにアクセスキーを環境変数で置き換えて、AppRunner側に内容を書き込んでいます(要するに、IAMユーザーを使っているということ)。このIAMユーザーとIAMポリシーを同時につかっていることが問題だったりするのでしょうか?

  • 前回と同じようにタイムアウトエラーなのでSESへの通信がVPCを経由していると思います。 なのでSESのVPCエンドポイントを設定してみてください。 https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-set-up-vpc-endpoints.html

    また、IAMロールを設定している場合はアクセスキーは不要だと思います。

ログインしていません。 ログイン 回答を投稿する。

優れた回答とは、質問に明確に答え、建設的なフィードバックを提供し、質問者の専門分野におけるスキルの向上を促すものです。

質問に答えるためのガイドライン

関連するコンテンツ