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

0

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

1 réponse
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
EXPERT
répondu il y a 10 mois
  • 回答ありがとうございます!教えてくださったように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ロールを設定している場合はアクセスキーは不要だと思います。

Vous n'êtes pas connecté. Se connecter pour publier une réponse.

Une bonne réponse répond clairement à la question, contient des commentaires constructifs et encourage le développement professionnel de la personne qui pose la question.

Instructions pour répondre aux questions