メニュー
Amazon Simple Email Service
開発者ガイド

Amazon SES SMTP 認証情報の取得

Amazon SES SMTP インターフェイスにアクセスするには、Amazon SES SMTP のユーザー名とパスワードが必要です。すべての AWS リージョンで、同じ SMTP 認証情報セットを使用できます。

重要

SMTP ユーザー名とパスワードは、AWS アクセスキー ID およびシークレットアクセスキーと同じではありません。SMTP エンドポイントに対して認証を行う際に、AWS 認証情報を使用しないでください。認証情報の詳細については、「Amazon SES での認証情報の使用」を参照してください。

SMTP 認証情報を生成するには、2 とおりの方法があります。Amazon SES コンソールを使用する方法または AWS 認証情報から SMTP 認証情報を生成する方法を使用できます。

以下の場合は、Amazon SES コンソールを使用して SMTP 認証情報を生成します。

  • 最も簡単な方法で、SMTP 認証情報を取得したい。

  • コードまたはスクリプトを使用して SMTP 証明書を自動的に生成させる必要がない。

次の場合には、AWS の認証情報から SMTP 認証情報を生成します。

  • IAM インターフェイスで作成した既存の AWS Identity and Access Management (IAM) ユーザーが存在し、そのユーザーが Amazon SES SMTP インターフェイスを使用して E メールを送信できるようにしたい。

  • コードまたはスクリプトを使用して、SMTP 証明書の生成を自動化したい。

それぞれの方法の詳細については、「Amazon SES コンソールを使用した Amazon SES SMTP 認証情報の取得」および「AWS 認証情報を変換して Amazon SES SMTP 認証情報を取得する」を参照してください。

Amazon SES コンソールを使用した Amazon SES SMTP 認証情報の取得

Amazon SES コンソールを使用して SMTP 認証情報を生成する場合、Amazon SES コンソールは、Amazon SES を呼び出すための適切なポリシーを持った IAM ユーザーを作成した上で、そのユーザーに関連付けられている SMTP 認証情報を提示します。

注記

IAM ユーザーは Amazon SES SMTP 認証情報を作成できます。ただし、Amazon SES SMTP 認証情報は IAM を通じて作成されるため、IAM ユーザーのポリシーでは IAM ユーザーに IAM 自体を使用するアクセス権限を付与する必要があります。IAM ユーザーがコンソールを使用して Amazon SES SMTP 認証情報を作成するときに、IAM へのアクセス許可がないと、"… not authorized to perform iam:ListUsers…" というエラーメッセージが表示されます。このような場合、ルートアカウントの所有者は、IAM ユーザーが「iam:ListUsers」、「iam:CreateUser」、「iam:CreateAccessKey」、「iam:PutUserPolicy」の各 IAM アクションにアクセスできるように、IAM ユーザーのポリシーを変更する必要があります。

SMTP 認証情報を作成するには

  1. AWS マネジメントコンソールにサインインして、https://console.aws.amazon.com/ses/ から Amazon SES コンソールを開きます。

  2. ナビゲーションペインで [SMTP Settings] を選択します。

  3. コンテンツペインで、[Create My SMTP Credentials] を選択します。

  4. [Create User for SMTP] ダイアログボックスに、SMTP ユーザー名が入力されていることがわかります。この推奨ユーザー名を受け入れるか、または、別のユーザー名を入力することもできます。続行するには、[Create] を選択します。

     SMTP のユーザーを作成する
  5. [Show User SMTP Credentials] を選択します。SMTP 認証情報が画面に表示されます。これをコピーして安全な場所に保存します。[Download Credentials] を選択して、自身の認証情報を含むファイルをダウンロードすることもできます。

     SMTP のユーザーを作成する

    重要

    これは、SMTP 認証情報を確認することができる唯一の機会です ! これらの認証情報はダウンロードしておき、他のユーザーに知られないようにすることを強くお勧めします。

  6. [Close Window] を選択します。

SMTP 認証情報を削除する場合は、https://console.aws.amazon.com/iam/ の IAM コンソールに移動し、SMTP 認証情報に対応する IAM ユーザー名を削除します。詳細については、ユーザーの削除 ガイドを参照してください。

SMTP パスワードを変更する場合は、IAM コンソールに移動して既存の IAM ユーザーを削除した上で Amazon SES コンソールに移動し、SMTP 認証情報を再生成します。

AWS 認証情報を変換して Amazon SES SMTP 認証情報を取得する

IAM インターフェイスを使用して IAM ユーザーを設定した場合、ユーザーの Amazon SES SMTP 認証情報は AWS 認証情報から派生できます。

重要

一時的な AWS 認証情報を使用して、SMTP 認証情報を取得しないでください。 Amazon SES SMTP インターフェイスは、一時的なセキュリティ認証情報から生成された SMTP 認証情報をサポートしていません。

IAM ユーザーが Amazon SES SMTP インターフェイスを使用して E メールを送信できるようにするには、次の 2 つのステップを実行する必要があります。

  • このセクションで提供されるアルゴリズムを使用して AWS 認証情報からユーザーの SMTP 認証情報を取得します。AWS 認証情報から開始するため、SMTP ユーザー名は AWS アクセスキー ID と同じです。そのため SMTP パスワードを生成する必要があります。

    重要

    Amazon SES コンソールを使用して SMTP 認証情報を生成する場合、SMTP ユーザー名は AWS アクセスキー ID とは異なります。このセクションで説明したように、SMTP ユーザー名と AWS アクセスキー ID は、プログラムによって SMTP パスワードを生成する場合のみ同じとなります。

  • IAM ユーザーに次のポリシーを適用します。

    Copy
    { "Statement": [{ "Effect":"Allow", "Action":"ses:SendRawEmail", "Resource":"*" }]}

    IAM で Amazon SES を使用する方法については、「Amazon SES へのアクセスの制御」を参照してください。

注記

既存の IAM ユーザーに対して Amazon SES SMTP 認証情報を生成できますが、セキュリティ上の理由から、SMTP パスワードの生成に使用する AWS 認証情報に対して別の IAM ユーザーを作成することをお勧めします。目的別にユーザーを作成することが推奨される理由については、「IAM のベストプラクティス」を参照してください。

次の擬似コードは、AWS シークレットアクセスキーを Amazon SES SMTP パスワードに変換するアルゴリズムを示しています。

Copy
key = AWS Secret Access Key; message = "SendRawEmail"; versionInBytes = 0x02; signatureInBytes = HmacSha256(message, key); signatureAndVer = Concatenate(versionInBytes, signatureInBytes); smtpPassword = Base64(signatureAndVer);

次は、AWS シークレットアクセスキーを Amazon SES SMTP パスワードに変換する Java の実装例です。プログラムを実行する前に、環境変数の AWS_SECRET_ACCESS_KEY に IAM ユーザーの AWS シークレットアクセスキーを入力します。このプログラムの出力は、SMTP パスワードです。このパスワードと SMTP ユーザー名 (SMTP パスワードをプログラムで生成した場合には AWS アクセスキー ID と同じ) が、ユーザーの Amazon SES SMTP 認証情報です。

Copy
import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import javax.xml.bind.DatatypeConverter; public class SesSmtpCredentialGenerator { private static final String KEY_ENV_VARIABLE = "AWS_SECRET_ACCESS_KEY"; // Put your AWS secret access key in this environment variable. private static final String MESSAGE = "SendRawEmail"; // Used to generate the HMAC signature. Do not modify. private static final byte VERSION = 0x02; // Version number. Do not modify. public static void main(String[] args) { // Get the AWS secret access key from environment variable AWS_SECRET_ACCESS_KEY. String key = System.getenv(KEY_ENV_VARIABLE); if (key == null) { System.out.println("Error: Cannot find environment variable AWS_SECRET_ACCESS_KEY."); System.exit(0); } // Create an HMAC-SHA256 key from the raw bytes of the AWS secret access key. SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "HmacSHA256"); try { // Get an HMAC-SHA256 Mac instance and initialize it with the AWS secret access key. Mac mac = Mac.getInstance("HmacSHA256"); mac.init(secretKey); // Compute the HMAC signature on the input data bytes. byte[] rawSignature = mac.doFinal(MESSAGE.getBytes()); // Prepend the version number to the signature. byte[] rawSignatureWithVersion = new byte[rawSignature.length + 1]; byte[] versionArray = {VERSION}; System.arraycopy(versionArray, 0, rawSignatureWithVersion, 0, 1); System.arraycopy(rawSignature, 0, rawSignatureWithVersion, 1, rawSignature.length); // To get the final SMTP password, convert the HMAC signature to base 64. String smtpPassword = DatatypeConverter.printBase64Binary(rawSignatureWithVersion); System.out.println(smtpPassword); } catch (Exception ex) { System.out.println("Error generating SMTP password: " + ex.getMessage()); } } }