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

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

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

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

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

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

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

AWS サービス: AWS Lambda、Amazon、SESAmazon 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 メールアドレス販売ソリューションを提供します AWS アカウント。その後、 AWS アカウント 所有者の実際の E メールアドレスは、テーブル内のこれらの生成された E メールアドレスに関連付けられます。このソリューションは、一意のメールアカウントのすべての受信メールを処理し、各アカウントの所有者を検索して、受信したメッセージを所有者に転送します。 

前提条件と制限

前提条件

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

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

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

機能制限

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

製品バージョン

  • 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 メールを受信するSESように Amazon 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 アカウント ファクトリ E メールリポジトリで使用できます。

エピック

タスク説明必要なスキル

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

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

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

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

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

  1. Tools セクション に記載されているツールを使用して、開発環境を設定します。

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

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

AWS DevOps、アプリデベロッパー
タスク説明必要なスキル

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

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

ドメイン要件:

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

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

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

ドメインを検証します。

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

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

アプリデベロッパー、 AWS DevOps

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

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

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

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

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

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

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

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

アプリデベロッパー、 AWS DevOps

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

  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

    エラーがなく、フル 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

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

アプリデベロッパー、 AWS DevOps

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

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

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

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

    • Lambda 関数

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

    • IAM ロールとポリシー

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

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

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

    • DynamoDB テーブル

アプリデベロッパー、 AWS DevOps
タスク説明必要なスキル

API が機能していることを確認します。

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

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

アプリデベロッパー、 AWS DevOps

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

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

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

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

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

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

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

アプリデベロッパー、 AWS DevOps

トラブルシューティング

問題ソリューション

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

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

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

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

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

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

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

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

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

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

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

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

考えられる解決策

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

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

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

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

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

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

関連リソース

追加情報

コスト

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