うまく機能し、SMTPを介して1日に数千のEメールを送信するAmazonSESセットアップがあります。アクセスキーを「ローテーション」するベストプラクティスに従おうとすると、 https://console.aws.Amazon.com/iam/home に移動し、まったく同じユーザーの新しいアクセスキーを作成します。メールの送信に使用されます。新しいキーはおそらくアクティブですが、アクセスキーを使用してメールを送信しようとすると、次のようになります。
535 Authentication Credentials Invalid
古いアクセスキーへの切り替えはうまく機能し、メールが送信されます。新しいアクセスキーを削除して他のアクセスキーを作成するために、数回試行しました。同じマシン、同じソフトウェア。 AmazonからのCSVで提供されているものと同じID /パスワードを使用していることを確認するために、適切なコピーと貼り付けのスキルがあります。ここにAmazonからのダイアログがあります:
どうしたの?新しいキーがアクティブになるまでの時間制限はありますか?どこかに他の隠れた制限はありますか?
SMTP認証情報をaccess_key
およびsecret
と混同しています。彼らは違う。
SMTP資格情報-> SESSMTPの構成に使用
新しいaccess_key/secretを作成し、SMTP認証情報として使用しています
別のaccess_key/secret
のセットを生成しても、変更されないSMTP資格情報を使用している可能性があります。あなたの場合、SDKではなくSMTPサーバーを使用しているように見えます。したがって、access_key/secret
の新しいセットを生成しても、SMTP資格情報には影響しません。
SMTP認証情報の新しいセットを作成する場合は、AWSSESダッシュボードに移動してSMTP認証情報を作成します。
詳細情報: Amazon SES SMTP認証情報の取得
はい、AWSがSESのSMTPパスワードにアプローチする方法には隠れた制限があります。そして、彼らはこれらの資格情報を処理する非常に紛らわしい方法を使用しています。
helloVからの回答 は正しい方向に進んでいますが、完全に正しいわけではありません。 AWSと彼の回答はどちらも、Access_key/Secret_keyとSESSMTPの認証情報は異なるものであると述べていますが、次のとおりです。
既存のIAMユーザーの新しいaccess_key/secret_keyペアをSMTPに使用できるため、新しいユーザーを作成せずにキーをローテーションできることがわかりました。 AWSは、 このドキュメントページ で説明されているように、シークレットアクセスキーを変換してSMTPパスワードを生成します。
次の擬似コードは、AWSシークレットアクセスキーをAmazon SESSMTPパスワードに変換するアルゴリズムを示しています。
key = AWS Secret Access Key; message = "SendRawEmail"; versionInBytes = 0x02; signatureInBytes = HmacSha256(message, key); signatureAndVer = Concatenate(versionInBytes, signatureInBytes); smtpPassword = Base64(signatureAndVer);
したがって、シークレットアクセスキーを使用して、SMTPパスワードを生成できます
bashとopensslがインストールされている場合、次のコマンドはSMTPで使用するためのパスワードを出力します。
(echo -en "\x02"; echo -n 'SendRawEmail' \
| openssl dgst -sha256 -hmac $AWS_SECRET_ACCESS_KEY -binary) \
| openssl enc -base64
$ AWS_SECRET_ACCESS_KEYをキーに置き換えるか、事前に変数を設定するだけです