1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】Amazon SESの署名バージョン4に対応させる

Posted at

はじめに

RailsでAmazon SESの署名バージョンを3から4に対応させたときの備忘録です。
SESのライブラリはgem 'aws-ses'を使っていました。
人によってファイルの設定やリージョンなどは異なるので、あくまで参考程度にしてください。

環境

  • Rails 6.0.3.7
  • ruby 2.6.5
  • MacOS
  • gem 'aws-ses', '~> 0.6'

エラー内容

FATAL -- :
AWS::SES::ResponseError (InvalidClientTokenId - Signature Version 3 requests are deprecated from March 1, 2021. From that date on, we are progressively rejecting such requests. To resolve the issue you must migrate to Signature Version 4. If you are self-signing your requests, refer to the documentation for Authenticating requests to the Amazon SES API [1] with Signature Version 4 [2]. If you are not self-signing your requests, simply update your SDK/CLI to the latest version. [1] https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-authentication.html [2] https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html):

google翻訳

致命的-:
AWS :: SES :: ResponseError(InvalidClientTokenId-署名バージョン3のリクエストは2021年3月1日から非推奨になりました。その日以降、このようなリクエストは段階的に拒否されます。問題を解決するには、署名バージョン4に移行する必要があります。 -リクエストに署名するには、署名バージョン4 [2]を使用したAmazonSES API [1]へのリクエストの認証に関するドキュメントを参照してください。リクエストに自己署名しない場合は、SDK / CLIを最新バージョンに更新してください。[ 1] https://docs.aws.amazon.com/ses/latest/DeveloperGuide/using-ses-api-authentication.html [2] https://docs.aws.amazon.com/general/latest/gr/ sigv4-create-canonical-request.html):

エラーの内容通り、署名バージョンを4に移行させる必要があるそうです。

やったこと

gem 'aws-ses', '~> 0.6'を gem aws-ses-v4に変えた。

aws-sesのissuesをみると、バージョン4に移行することについて結構多くの人が話していました。
gem aws-ses-v4gem 'aws-ses'を署名バージョン4に対応させたgemです。
他にもAWSが推奨しているaws-sdk-railsというGemがあるそうですが、そちらに移行させる時間はなさそうだったので今回はaws-ses-v4を使うことにしました。
できれば公式が推奨している方を使うべきだと思います。

Gemを変更

Gemfile
- gem 'aws-ses', '~> 0.6'
+ gem "aws-ses-v4", require: "aws/ses"
$ bundle install

aws.rbの変更

ここら辺は人によって違うかもしれません。
各々のメールの設定に合わせてください。
ちなみに私は最終的に以下のようになりました。

config/initializers/aws.rb
ActionMailer::Base.add_delivery_method :ses,
  AWS::SES::Base,
  access_key_id: Rails.application.credentials.aws_ses_access_key_id,
  secret_access_key: Rails.application.credentials.aws_ses_secret_access_key,
  server: 'email.リージョン名.amazonaws.com', #人によって違います
  region: 'リージョン名' #SESのリージョンを指定。 例:us-east-2

以下のエラーが出た時はSESのリージョンが間違っている可能性があります。

SignatureDoesNotMatch - Credential should be scoped to a valid region, not 'ap-northeast-1'

また、awsのアクセスキーなどを記載するcredentials.yml.encには、以下のコマンドで確認・編集できます。

EDITOR=vim rails credentials:edit

以上です。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?