web-dev-qa-db-ja.com

Amazon SES535認証認証情報アクセスキーをローテーションしようとして無効です

うまく機能し、SMTPを介して1日に数千のEメールを送信するAmazonSESセットアップがあります。アクセスキーを「ローテーション」するベストプラクティスに従おうとすると、 https://console.aws.Amazon.com/iam/home に移動し、まったく同じユーザーの新しいアクセスキーを作成します。メールの送信に使用されます。新しいキーはおそらくアクティブですが、アクセスキーを使用してメールを送信しようとすると、次のようになります。

535 Authentication Credentials Invalid

古いアクセスキーへの切り替えはうまく機能し、メールが送信されます。新しいアクセスキーを削除して他のアクセスキーを作成するために、数回試行しました。同じマシン、同じソフトウェア。 AmazonからのCSVで提供されているものと同じID /パスワードを使用していることを確認するために、適切なコピーと貼り付けのスキルがあります。ここにAmazonからのダイアログがあります: Menu on IAM

どうしたの?新しいキーがアクティブになるまでの時間制限はありますか?どこかに他の隠れた制限はありますか?

14
Collector

SMTP認証情報をaccess_keyおよびsecretと混同しています。彼らは違う。

  • access_key/secret-> SDKおよびCLIで使用
  • SMTP資格情報-> SESSMTPの構成に使用

  • 新しいaccess_key/secretを作成し、SMTP認証情報として使用しています

  • 代わりに、新しいSMTP認証情報を作成して使用します
  • キーローテーションはSMTP資格情報ローテーションとは異なります
  • 新しいユーザーを作成する必要はありません

別のaccess_key/secretのセットを生成しても、変更されないSMTP資格情報を使用している可能性があります。あなたの場合、SDKではなくSMTPサーバーを使用しているように見えます。したがって、access_key/secretの新しいセットを生成しても、SMTP資格情報には影響しません。

SMTP認証情報の新しいセットを作成する場合は、AWSSESダッシュボードに移動してSMTP認証情報を作成します。

enter image description here

詳細情報: Amazon SES SMTP認証情報の取得

13
helloV

はい、AWSがSESのSMTPパスワードにアプローチする方法には隠れた制限があります。そして、彼らはこれらの資格情報を処理する非常に紛らわしい方法を使用しています。

helloVからの回答 は正しい方向に進んでいますが、完全に正しいわけではありません。 AWSと彼の回答はどちらも、Access_key/Secret_keyとSESSMTPの認証情報は異なるものであると述べていますが、次のとおりです。

  • 新しいSESSMTP認証情報を作成すると、アクセスキーと秘密キーのペアを持つ新しいIAMユーザーが作成されます
  • アクセスキーIDはSMTPのユーザー名と同じです
  • このキーを削除または無効にすると、SMTPアクセスが失われます。したがって、それらは明らかに非常に関連しています。
  • SMTPのパスワードは、秘密鍵から取得されます

既存の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をキーに置き換えるか、事前に変数を設定するだけです

6
Chikitulfo