Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9359

[nodejs] AWS IAM ユーザの secret_access_key から SES 用の SMTP パスワード を生成する

$
0
0
TL;DR SES で生成した IAM ユーザ ses-smtp-user.YYYYMMDD にポリシーを足して、他の用途に流用しようと考えたが、どうも上手くいかない。 原因は、secret_access_key と SMTP 用のパスワードが異なるためだった。 secret_access_key から SMTP 用のパスワードは生成できるようだ。逆はだめ。 公式のドキュメントには python 版が記されている https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html nodejs 版を記しておく const crypto = require('crypto'); const smtp_credentials_generate = (secret_access_key, region) => { const version = 0x04; const kMessage = [ '11111111', // date region, 'ses', // service 'aws4_request', // terminal 'SendRawEmail', // message ].reduce( (secret, text) => crypto.createHmac('sha256', secret).update(text).digest(), 'AWS4' + secret_access_key, ); const signatureAndVersion = Buffer.concat([Buffer.from([version]), kMessage]); const smtpPassword = signatureAndVersion.toString('base64'); return smtpPassword; }; 使い方 ログインする SES の region を指定する const secret_access_key = 'xxxxxxxxxxxxxxxxxxxxxxxx'; const smtp_password = smtp_credentials_generate(secret_access_key, 'us-west-2'); console.log(smtp_password); 補足 ses が使えるようにポリシーを足しておくこと { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ses:SendRawEmail", "Resource": "*" } ] } テスト テスト送信 #!/bin/bash user='AKI... アクセスキーID' pass='上記で生成したSMTP用のパスワード' from='exabugs@hoge.com' rcpt='exabugs@hoge.com' cat > input.txt <<EOT EHLO hoge.com AUTH LOGIN $(echo -n $user | openssl enc -base64) $(echo -n $pass | openssl enc -base64) MAIL FROM: $from RCPT TO: $rcpt DATA From: $from To: $rcpt Subject: Amazon SES SMTP Test This message was sent using the Amazon SES SMTP interface. . QUIT EOT openssl s_client -crlf -quiet -connect email-smtp.us-west-2.amazonaws.com:465 < input.txt

Viewing all articles
Browse latest Browse all 9359

Trending Articles