既存の Amazon SES SMTP IAM ユーザーのアクセスキーを更新するにはどうすればよいですか?

最終更新日: 2020 年 8 月 28 日

AWS Identity and Access Management (IAM) で Amazon Simple Email Service (Amazon SES) Simple Mail Transfer Protocol (SMTP) 認証情報を更新したいと考えています。Amazon SES と互換性のあるユーザー名とパスワードを作成するにはどうすればよいですか?

解決方法

SMTP ユーザー用に IAM コンソールで作成したアクセスキーは、Amazon SES SMTP インターフェイスでは機能しません。IAM コンソールで生成されるキーは、Amazon SES SMTP サーバーに必要な認証情報に求められる形式とは異なる形式です。

Amazon SES SMTP インターフェイスの認証情報をセットアップするには、次のいずれかを実行します。

新しい Amazon SES SMTP 認証情報を作成する

1.    Amazon SES コンソールを使用して、新しい Amazon SES SMTP 認証情報を作成します。

2.    新しい認証情報を取得した後、不要な IAM の既存の Amazon SES 認証情報を削除 することを選択できます。

既存のシークレットアクセスキーを Amazon SES SMTP 形式に変換する

注意: 以降の手順で Python 3 以降のバージョンを使用する必要があります。 

1.    少なくとも ses:SendRawEmail のアクセス許可を付与するように、既存の IAM ユーザーのポリシーを更新します。

2.    シークレットアクセスキーを Amazon SES SMTP パスワードに変換するための Python コードをコピーします。

3.    Python コードをテキストエディタに貼り付け、ファイルを seskey.py という名前で保存します。

4.    Python スクリプトを実行するには、次のコマンドを使用します。
[--secret] に、既存のシークレットアクセスキーを入力します。
[--region] に、SMTP パスワードを使用する AWS リージョンを入力します。

python3 seskey.py --secret YOURKEYrrpg/JHpyvtStUVcAV9177EAKKmDP37P --region us-east-1

5.    このスクリプトは、Amazon SES で使用できる新しいシークレットアクセスキーを出力します。

import os      #required to fetch environment varibles
import hmac    #required to compute the HMAC key
import hashlib #required to create a SHA256 hash
import base64  #required to encode the computed key
import sys     #required for system functions (exiting, in this case)

# Fetch the environment variable called AWS_SECRET_ACCESS_KEY, which contains
# the secret access key for your IAM user.
key = os.getenv('AWS_SECRET_ACCESS_KEY',0)

# These varibles are used when calculating the SMTP password. You shouldn't
# change them.
message = 'SendRawEmail'
version = '\x02'

# See if the environment variable exists. If not, quit and show an error.
if key == 0:
    sys.exit("Error: Can't find environment variable AWS_SECRET_ACCESS_KEY.")

# Compute an HMAC-SHA256 key from the AWS secret access key.
signatureInBytes = hmac.new(key.encode('utf-8'),message.encode('utf-8'),hashlib.sha256).digest()
# Prepend the version number to the signature.
signatureAndVersion = version.encode('utf-8') + signatureInBytes
# Base64-encode the string that contains the version number and signature.
smtpPassword = base64.b64encode(signatureAndVersion)
# Decode the string and print it to the console.
print(smtpPassword.decode('utf-8'))

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?