紙一重の積み重ね

アラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【Rails】gem aws-sesは署名バージョン3なのでAWS公式のaws-sdk-railsの利用がいいと思う

はじめに

2020年10月1日以降、SESでは署名バージョン4を使用する旨のAWSからメールが届きました。gem aws-sesを使っている場合、メールが送信できなくなる問題が起こりそうなのでメモ。

AWSからのアナウンス

AWS SESでは、署名バージョン4を使え、とのこと。

署名バージョン4では、シークレットアクセスキーの代わりに署名キーを使用することで、Amazon SESの顧客の認証と承認に関するセキュリティがさらに強化されています。お客様のセキュリティを向上させるため、2020年10月1日以降、Amazon SESではAmazon署名バージョン3が無効になり(非推奨)、署名バージョン4が優先されます。

2020年9月30日以降に行われた署名バージョン3で署名されたリクエストは、Amazon SESでの認証に失敗します。要求者には、要求が署名バージョン4で署名されている必要があることを示すエラーが表示されます。

公式情報

docs.aws.amazon.com

【要注意】gem aws-sesは署名バージョン3を使用している

2018年頃まで、RailsアプリでAWS SESと連携する場合、aws-ses のgemを使うケースが多かったように思います。

github.com

しかし、本gemは2018年からメンテナンスされておらず、署名バージョン3を利用するため、2020年10月1日以降は使用できなくなる可能性が高いと思われます。

該当箇所のソース

https://github.com/drewblas/aws-ses/blob/63db45b4b619dcc5e8378695ef9eff0487f34cbf/lib/aws/ses/base.rb#L72

    # Generates the HTTP Header String that Amazon looks for
    # 
    # @param [String] key the AWS Access Key ID
    # @param [String] alg the algorithm used for the signature
    # @param [String] sig the signature itself
    def SES.authorization_header(key, alg, sig)
      "AWS3-HTTPS AWSAccessKeyId=#{key}, Algorithm=#{alg}, Signature=#{sig}"
    end

どうすればいいのか

  • gem aws-sesの使用をやめる
  • AWS公式のgem aws-sdk-rails を使う
    • 公式があるなら公式を使うほうが無難です

docs.aws.amazon.com