Amazon AWS を使用して 1 つの E メールアドレスに複数の SES アカウントを登録する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon AWS を使用して 1 つの E メールアドレスに複数の SES アカウントを登録する

作成者: Joe Wozniak (AWS) と Shubhangi Viswaakarma (AWS)

コードリポジトリ: aws-account-factory-emailGitHub

環境:PoC またはパイロット

テクノロジー: インフラストラクチャ、管理とガバナンス、メッセージングとコミュニケーション

AWS サービス: AWS Lambda、Amazon SES、Amazon DynamoDB

[概要]

このパターンでは、 に関連付けられている E メールアドレスから実際の E メールアドレスを切り離す方法を説明します AWS アカウント。アカウントの作成時に一意の E メールアドレスを指定 AWS アカウント する必要があります。一部の組織では、 が管理するチームが、メッセージングチームで多くの一意の E メールアドレスを管理する負担を引き受け AWS アカウント る必要があります。これは、多くの組織を管理する大規模な組織では難しい場合があります AWS アカウント。さらに、E メールシステムが、Sieve Email Filtering: Subaddress Extension (RFC 5233) で定義されているプラスアドレスまたはサブアドレスを許可していない場合、プラス記号 (+) と識別子を E メールアドレスのローカル部分の末尾に追加しますadmin+123456789123@example.com。このパターンは、この制限を克服するのに役立ちます。

このパターンは、 AWS アカウント 所有者が 1 つの E メールアドレスを複数の E メールアドレスに関連付けることを可能にする、一意の E メールアドレス販売ソリューションを提供します AWS アカウント。 AWS アカウント 所有者の実際の E メールアドレスは、テーブル内で生成されたこれらの E メールアドレスに関連付けられます。このソリューションは、一意のメールアカウントのすべての受信メールを処理し、各アカウントの所有者を検索して、受信したメッセージを所有者に転送します。 

前提条件と制限

前提条件

  • への管理アクセス AWS アカウント。

  • 開発環境へのアクセス権。

  • (オプション) AWS Cloud Development Kit (AWS CDK) ワークフローと Python プログラミング言語に精通していれば、問題のトラブルシューティングや変更に役立ちます。

機能制限

  • 全販売メールアドレスは 64 文字長です。詳細については、CreateAccount AWS Organizations リファレンスのAPI」を参照してください。

製品バージョン

  • Node.js バージョン 12.7.0 以降

  • Python 3.9 以降

  • Python パッケージ pipvirtualenv

  • AWS CDK バージョン 2.23.0 以降

  • Docker 20.10.x 以降

アーキテクチャ

ターゲットテクノロジースタック

  • AWS CloudFormation スタック

  • AWS Lambda 関数

  • Amazon Simple Email Service (Amazon SES) ルールとルールセット

  • AWS Identity and Access Management (IAM) ロールとポリシー

  • Amazon Simple Storage Service (Amazon S3) バケットとバケットポリシー

  • AWS Key Management Service (AWS KMS) キーとキーポリシー

  • Amazon Simple Notification Service (Amazon SNS) トピックとトピックポリシー

  • Amazon DynamoDB テーブル

ターゲット アーキテクチャ

1 つの E メールアドレスで複数の AWS アカウントを登録するためのターゲットアーキテクチャ

この図は、以下の 2 つのフローを示しています。

  • メールアドレス販売フロー: この図では、メールアドレス販売フロー (下のセクション) は通常、アカウント販売ソリューションまたは外部自動化で開始、または手動で呼び出されます。リクエストでは、必要なメタデータを含むペイロードで Lambda 関数が呼び出されます。この関数はこの情報を使用して一意のアカウント名とメールアドレスを生成し、DynamoDB データベースに保存して、呼び出し元に値を返します。その後、これらの値を使用して新しい AWS アカウント (通常は を使用) を作成できます AWS Organizations。

  • メール転送フロー: このフローは、前の図の上部セクションに示されています。E メールアドレス販売フローから生成されたアカウント E メールを使用して が作成されると、 AWS アカウント はアカウント登録の確認や定期的な通知など、さまざまな E メールをその E メールアドレス AWS に送信します。このパターンのステップに従って、ドメイン全体の E メールを受信するように Amazon SES AWS アカウント で を設定します。このソリューションでは、Lambda がすべての受信メールを処理し、TO アドレスが DynamoDB テーブルにあるかどうかを確認し、代わりにアカウントオーナーのメールアドレスにメッセージを転送できるようにする転送ルールを設定します。このプロセスを使用すると、アカウントオーナーは複数のアカウントを単一メールアドレスに関連付けできます。

自動化とスケール

このパターンでは AWS CDK 、 を使用してデプロイを完全に自動化します。このソリューションは、ニーズに合わせて自動的にスケーリングする (または設定できる) AWS マネージドサービスを使用します。Lambda 関数には、スケーリングのニーズを満たすために追加の設定が必要な場合があります。詳細については、Lambda ドキュメントの「Lambda 関数のスケーリングについて」を参照してください。

ツール

AWS サービス

  • AWS CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、 AWS アカウント およびリージョン全体でライフサイクル全体を通じてリソースを管理するのに役立ちます。

  • AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンドを通じて AWS サービスとやり取りするのに役立つオープンソースツールです。

  • Amazon DynamoDB は、高速で予測可能なスケーラブルなパフォーマンスを提供するフルマネージド NoSQL データベースサービスです。

  • AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用を許可するかを制御することで、 AWS リソースへのアクセスを安全に管理します。

  • AWS Key Management Service (AWS KMS) は、データの保護に役立つ暗号化キーの作成と制御に役立ちます。

  • AWS Lambdaは、サーバーのプロビジョニングや管理を必要とせずにコードを実行するのに役立つコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • Amazon Simple Email Service (Amazon SES) は、独自の E メールアドレスとドメインを使用して E メールを送受信するのに役立ちます。

  • Amazon Simple Notification Service (Amazon SNS) は、ウェブサーバーや E メールアドレスなど、パブリッシャーとクライアント間のメッセージ交換の調整と管理に役立ちます。

  • Amazon Simple Storage Service (Amazon S3) は、任意の量のデータの保存、保護、取得に役立つクラウドベースのオブジェクトストレージサービスです。

デプロイに必要なツール

コード

このパターンのコードは、 GitHub AWS アカウント factory E メールリポジトリで利用できます。

エピック

タスク説明必要なスキル

を特定または作成します AWS アカウント。

E メールソリューションをデプロイするために、完全な管理アクセス権を持つ既存または新規の AWS アカウント を特定します。

AWS 管理者、クラウド管理者

デプロイ環境を設定します。

次の手順に従って、使い易いデプロイ環境を構成し、依存関係を設定します。

  1. 「 ツール」セクションに記載されているツールを使用して、開発環境をセットアップします。

  2. コマンドを使用して、 GitHub AWS アカウント factory E メールリポジトリのコードベースを開発環境にクローンします。

    git clone https://github.com/aws-samples/aws-account-factory-email
  3. requirements.txt ファイル (リポジトリのルート) で、 で始まる行を、環境で実行 AWS CDK されている のバージョンと一致するaws-cdk-lib==ように更新します。バージョンを特定するには、cdk --version コマンドを使用します。

DevOpsAWS、アプリ開発者
タスク説明必要なスキル

ドメインを特定して割り当てます。

メール転送機能には専用ドメインが必要です。Amazon SES で検証できるドメインまたはサブドメインを特定して割り当てます。このドメインは、E メール転送ソリューションがデプロイ AWS アカウント されている 内で受信 E メールを受信できる必要があります。

ドメイン要件:

  • ドメインは標準ドメインまたはサブドメインである必要があります。

  • ドメインは、組織外からの E メールの受信に使用されるため、外部で DNS で解決可能である必要があります。

クラウド管理者、ネットワーク管理者、DNS 管理者

ドメインを検証します。

特定したドメインが受信メールの受け入れに使用できることを確認します。

Amazon SES ドキュメントの「Amazon Word E メール受信用のドメインの検証」の手順を完了します。 SESこれには、ドメインの DNS レコードを担当する個人またはチームとの調整が必要です。

アプリ開発者、 DevOpsAWS

MX レコードをセットアップします。

AWS アカウント とリージョンの Amazon SES エンドポイントを指す MX レコードを使用してドメインを設定します。詳細については、Amazon SES ドキュメントの「Amazon Word E メール受信用の MX レコードの発行」を参照してください。 SES

クラウド管理者、ネットワーク管理者、DNS 管理者
タスク説明必要なスキル

のデフォルト値を変更しますcdk.json

デプロイ後にソリューションが正しく動作するように、cdk.json ファイル (リポジトリのルート内) のデフォルト値の一部を編集します。

  1. 前に確認したドメイン名と一致するように SES_DOMAIN_NAME 値を変更します。

  2. SES_DOMAIN_NAME の同じドメインを含むように ADDRESS_FROM 値を変更します。アドレスのローカル部分はクラウドチームが決定する必要があります。このアドレスは、ソリューションから転送されるすべてのメールの FROM アドレスとなります。

  3. 一致しない受信メッセージの転送先となるメールアドレスと一致するように ADDRESS_ADMIN 値を変更します。この値は、有効かつ動作中のメールアドレスである必要があります。

アプリ開発者、 DevOpsAWS

メールの販売と転送ソリューションをデプロイします。

  1. Python 仮想環境を作成する

    python -m venv .venv
  2. Python 仮想環境をアクティブ化する

    source .venv/bin/activate

    または、Windows プラットフォームで、以下を使用します。

    % .venv\Scripts\activate.bat
  3. Python のすべての要件をエラーなしでインストールする

    pip install -r requirements.txt
  4. CloudFormation テンプレートを合成します。

    cdk synth

    エラーがないこと、および full CloudFormation テンプレートに期待される出力が含まれていることを確認します。

  5. (オプション) AWS CDK コードを現在の AWS アカウント またはリージョンに初めてデプロイする場合は、環境をブートストラップします。詳細については、 AWS CDK ドキュメントのAWS CDK 「ブートストラップ」を参照してください。

    cdk bootstrap aws://AWS-ACCOUNT-NUMBER/REGION

    AWS-ACCOUNT-NUMBER および REGION を実際の値に置き換えます。

  6. ソリューションをデプロイする

    cdk bootstrap cdk deploy

    コマンドはエラーなしで実行する必要があります。

アプリ開発者、 DevOpsAWS

ソリューションがデプロイされていることを確認します。

テストを開始する前に、ソリューションが正常にデプロイされたことを確認します。

  1. AWS CloudFormation コンソールを開き、 という名前を含む CloudFormation スタックを探しますAwsMailFwdStack

  2. この AwsMailFwdStack スタックに以下のリソースがあることを確認します。

    • Lambda 関数

    • Amazon SES ルールとルールセット

    • IAM ロールとポリシー

    • Amazon S3 バケットとバケットポリシー

    • AWS KMS キーとキーポリシー

    • Amazon SNS トピックとトピックポリシー

    • DynamoDB テーブル

アプリ開発者、 DevOpsAWS
タスク説明必要なスキル

API が動作していることを確認します。

このステップでは、テストデータをソリューションの API に送信し、ソリューションが期待される出力を生成し、バックエンドオペレーションが期待どおりに実行されていることを確認します。

テスト入力を使用して、販売メールの Lambda 関数を手動で実行します。(例については、sample_vend_request.json ファイルを参照してください。) OwnerAddress の場合は、有効なメールアドレスを使用します。API は、アカウント名とアカウント E メールを期待どおりに値とともに返す必要があります。

アプリ開発者、 DevOpsAWS

メールが転送中であることを確認します。

このステップでは、システム経由でテストメールを送信し、メールが想定される受信者に転送されていることを確認します。

  1. 最後の手順でアカウントメールを入手します。

  2. テスト件名と本文を記載したメールをこのアドレスに送信します。

  3. アカウントオーナーのメールアドレスにメールを受信したことを確認します。

  4. 受信したメールの FROM アドレスが、cdk.jsonADDRESS_FROM 設定と一致していることを確認します。

  5. 受信したメールの件名と本文が元の送信メッセージと同じであることを確認します。

アプリ開発者、 DevOpsAWS

トラブルシューティング

問題ソリューション

システムが期待どおりにメールを転送しません。

設定が正しいことを確認する

  1. ドメインの Amazon SES 検証プロセスを完了しているはずです。

  2. ドメインは、 AWS アカウント およびリージョンの Amazon SES エンドポイントを指す MX レコードで適切に設定する必要があります。詳細については、Amazon SES ドキュメントの「Amazon Word E メール受信用の MX レコードの発行」を参照してください。 SES

ドメインの設定を検証したら、次の手順を実行します。

  1. ソリューションをデプロイしたアカウントとリージョンの Amazon CloudWatch コンソールを開き、ナビゲーションペインの CloudWatch ロググループに移動します。

  2. SesMailForwardLogGroup のロググループのリストを検索します。

  3. このグループのログを調べて、メールの販売と転送処理中にエラーが発生していないかを確認します。

AWS CDK スタックをデプロイしようとすると、次のようなエラーが表示されます。

「テンプレートのフォーマットエラー: 認識されないリソースタイプ」

ほとんどの場合、このエラーメッセージは、ターゲットとするリージョンに使用可能な AWS サービスがすべてないことを意味します。Amazon EC2 インスタンスを使用してソリューションをデプロイしている場合、インスタンスが実行されているリージョンとは異なるリージョンをターゲットにしている可能性があります。

注: デフォルトでは、 は で設定したリージョンとアカウントに AWS CDK デプロイされます AWS CLI。

考えられる解決策

  1. このソリューションに必要なすべてのサービス (このパターンの前半の「ターゲットテクノロジースタック」セクションを参照) が、リージョン別に AWS Services を確認して、ターゲット AWS リージョン とする にあるかどうかを調査します。

  2. EC2 インスタンスを使用していて、インスタンスが実行されているリージョンとは異なるリージョンをターゲットにしている場合は、ソリューションをデプロイ AWS CLI する前に、必ず AWS_DEFAULT_REGION環境変数を設定するか、 でリージョンを設定してください。詳細については、 AWS CLI ドキュメントの「 の環境変数の設定 AWS CLI」を参照してください。または、AWS CDK 環境のドキュメントの指示に従って、リポジトリのルートにある app.py ファイルを変更して、ハードコードされたアカウント ID とリージョンを含めることもできます。

ソリューションをデプロイすると、次のエラーメッセージが表示されます。

「デプロイに失敗しました: エラー: AwsMailFwdStack: SSMparameter /cdk-bootstrap/hnb659fds/versionが見つかりません。環境はブートストラップされていますか? 「cdk bootstrap」を実行してください。

ターゲットとする AWS アカウント およびリージョンに AWS CDK リソースをデプロイしたことがない場合は、エラーが示すように、まず cdk bootstrap コマンドを実行する必要があります。ブートストラップコマンドを実行した後もこのエラーが続く場合は、開発環境が実行されているリージョンとは異なるリージョンにソリューションをデプロイしようとしている可能性があります。

この問題を解決するには、ソリューションをデプロイ AWS CLI する前に、 AWS_DEFAULT_REGION環境変数を設定するか、 でリージョンを設定します。または、AWS CDK 環境のドキュメントの指示に従って、リポジトリのルートにある app.py ファイルを変更して、ハードコードされたアカウント ID とリージョンを含めることもできます。

関連リソース

追加情報

コスト

このソリューションをデプロイすると、次のサービスの使用に関連するコストが AWS アカウント 所有者に発生する可能性があります。 これらのサービスの請求方法を理解して、潜在的な費用を認識しておくことが重要です。価格設定情報については、次のページを参照してください。