SMTPのパスワードを ses_smtp_password_v4
に切り替えたらメール送信できなくなった
Amazon SES といえば、AWSのメール送信サービスですが、昔は日本リージョンがなく、米国リージョン(us-east-1
など)を使うのが普通でした。
そんな米国リージョンの歴史あるSESを使っているサービスをTerraformで管理していたのですが、つい先日 TerraformのAWSプロバイダ を新バージョンに切り替えていた際に 「ses_smtp_password
が deprecated になっている」 という警告が出ました。
resource "..." {
name = "SMTPPassword"
# !! ses_smtp_password は非推奨だよ (※最新版では削除) !!
value = aws_iam_access_key.ses_mail_sender.ses_smtp_password
}
ses_smtp_password
の代わりに ses_smtp_password_v4
を使えとのことらしいので、そのまま切り替えると、
resource "..." {
name = "SMTPPassword"
value = aws_iam_access_key.ses_mail_sender.ses_smtp_password_v4
}
Terraform 上での変更はうまくいきましたが、いざメールを送信しようとすると認証エラーで失敗するようになってしまいました。なぜ?!
ses_smtp_password_v4
は ses_smtp_password
と違ってAmazon SESのリージョンで発行する必要がある
ses_smtp_password_v4
の発行元のリソースとなる aws_iam_access_key
はそもそも、下記のように ap-northeast-1
のリージョンで定義していました。
resource "aws_iam_access_key" "ses_mail_sender" {
# プロバイダのメインリージョンは ap-northeast-1 (Tokyo)
user = aws_iam_user.ses_mail_sender.name
}
ses_smtp_password
では上記でうまくいくのですが、 新しいses_smtp_password_v4
は発行するリージョンをAmazon SESのリージョンと同じにしないと機能しません。
resource "aws_iam_access_key" "ses_mail_sender" {
# プロバイダのメインリージョンはAmazon SESと同じ us-east-1 (North Virginia)
provider = aws.ses_region_provider
user = aws_iam_user.ses_mail_sender.name
}
このことはAWSのドキュメントでも明記されています。
The credentials that you use to send email through the SES SMTP interface are unique to each AWS Region.
If you use the SES SMTP interface to send email in more than one Region, you must generate a set of SMTP credentials for each Region that you plan to use.https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html#smtp-credentials-convert
Amazon SESと同じリージョンでIAMアクセスキーを生成するようにしたところ、無事認証が通るようになりました。 古いAWSのTerraform定義をアップグレードする際は気をつけましょう。
(別解としては、Amazon SESのリージョンを ap-northeast-1
(Tokyo) に変更してもよかったと思います。)
参考