使用 Amazon 以單一電子郵件地址註冊多個AWS帳戶 SES - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon 以單一電子郵件地址註冊多個AWS帳戶 SES

由 Joe Wozniak (AWS) 和 Shubhangi Vishwakarma (AWS) 建立

Summary

此模式說明如何將實際電子郵件地址與與 相關聯的電子郵件地址分離 AWS 帳戶。 AWS 帳戶 建立帳戶時需要提供唯一的電子郵件地址。在某些組織中,管理 的團隊 AWS 帳戶 必須承擔管理其傳訊團隊許多唯一電子郵件地址的負擔。對於管理許多的大型組織來說,這可能很困難 AWS 帳戶。此外,如果您的電子郵件系統不允許 Sieve Email Filtering: Subaddress Extension (RFC 5233) 中定義的加號地址或子地址,請在電子郵件地址的本機部分結尾加上加號 (+) 和識別符,例如 admin+123456789123@example.com- 此模式有助於克服此限制。

此模式提供唯一的電子郵件地址販賣解決方案,讓 AWS 帳戶 擁有者能夠將一個電子郵件地址與多個電子郵件地址建立關聯 AWS 帳戶。然後, AWS 帳戶 擁有者的真實電子郵件地址會與資料表中這些產生的電子郵件地址建立關聯。解決方案會處理唯一電子郵件帳戶的所有傳入電子郵件、查詢每個帳戶的擁有者,然後將任何收到的訊息轉送給擁有者。 

先決條件和限制

先決條件

  • 對 的管理存取權 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 資料表

目標架構

使用單一電子郵件地址註冊多個AWS帳戶的目標架構

此圖表顯示兩個流程:

  • 電子郵件地址販賣流程:在圖表中,電子郵件地址販賣流程 (下節) 通常以帳戶販賣解決方案或外部自動化開始,或手動叫用。在請求中,呼叫 Lambda 函數時,承載會包含所需的中繼資料。函數會使用此資訊來產生唯一的帳戶名稱和電子郵件地址,將其存放在 DynamoDB 資料庫中,並將值傳回給發起人。然後,這些值可用來建立新的 AWS 帳戶 (通常使用 AWS Organizations)。

  • 電子郵件轉送流程:此流程如上圖的上一節所示。使用從電子郵件地址販賣流程產生的帳戶電子郵件建立 AWS 帳戶 時, AWS 會將各種電子郵件傳送至該電子郵件地址,例如帳戶註冊確認和定期通知。遵循此模式中的步驟,即可 AWS 帳戶 使用 Amazon 設定 SES以接收整個網域的電子郵件。此解決方案會設定轉送規則,允許 Lambda 處理所有傳入電子郵件、檢查TO地址是否在 DynamoDB 資料表中,並將訊息改為轉送到帳戶擁有者的電子郵件地址。使用此程序可讓帳戶擁有者將多個帳戶與一個電子郵件地址建立關聯。

自動化和擴展

此模式使用 AWS CDK 來完全自動化部署。解決方案使用 受 AWS 管服務,該服務會自動擴展 (或可設定為) 以符合您的需求。Lambda 函數可能需要額外的組態,才能滿足您的擴展需求。如需詳細資訊,請參閱 Lambda 文件中的了解 Lambda 函數擴展

工具

AWS 服務

部署所需的工具

  • 具有 AWS CLI 和 IAM存取權的開發環境 AWS 帳戶。如需詳細資訊,請參閱相關資源區段中的連結。 

  • 在開發系統上,安裝下列項目:

Code

此模式的程式碼可在 GitHub AWS 帳戶 原廠電子郵件儲存庫中使用。

史詩

任務描述所需的技能

識別或建立 AWS 帳戶。

識別您擁有完整管理存取權 AWS 帳戶 的現有或新 ,以部署電子郵件解決方案。

AWS 管理員、雲端管理員

設定部署環境。

請依照下列步驟,設定易於使用的部署環境並設定相依性:

  1. 使用工具區段中列出的工具設定開發環境。

  2. 使用 命令,將 GitHub AWS 帳戶 原廠電子郵件儲存庫程式碼基礎複製到您的開發環境:

    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。此網域應該可用於在部署電子郵件轉送解決方案 AWS 帳戶 的 內接收傳入的電子郵件。

網域需求:

  • 網域應該是標準網域或子網域。

  • 網域應該可從外部DNS解析,因為它將用於接收來自組織外部的電子郵件。

雲端管理員、網路管理員、DNS管理員

驗證網域。

確認已識別的網域可用來接受傳入電子郵件。

完成 Amazon 文件中驗證 Amazon SES電子郵件接收網域的指示。 SES這將需要與負責網域DNS記錄的人員或團隊協調。

應用程式開發人員、 AWS DevOps

設定 MX 記錄。

使用指向 AWS 帳戶 和 區域中 Amazon SES端點的 MX 記錄來設定您的網域。如需詳細資訊,請參閱《Amazon 文件》中的發佈 Amazon SES電子郵件接收的 MX 記錄。 SES

雲端管理員、網路管理員、DNS管理員
任務描述所需的技能

修改 中的預設值cdk.json

編輯 cdk.json 檔案 (在儲存庫根中) 中的一些預設值,讓解決方案在部署之後可以正常運作。

  1. 修改 SES_DOMAIN_NAME值,以符合您先前驗證的網域名稱。

  2. 修改 ADDRESS_FROM值,以包含與 中相同的網域SES_DOMAIN_NAME。地址的本機部分應由您的雲端團隊決定。此地址會成為透過 解決方案轉送之每個電子郵件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並確認解決方案產生預期的輸出,且已如預期執行後端操作。

使用測試輸入手動執行 Vend Email Lambda 函數。(如需範例,請參閱 sample_vend_request.json 檔案。) 對於 OwnerAddress,請使用有效的電子郵件地址。API 應該會如預期傳回具有值的帳戶名稱和帳戶電子郵件。

應用程式開發人員、 AWS DevOps

確認電子郵件正在轉送。

在此步驟中,您會透過系統傳送測試電子郵件,並確認電子郵件已轉送給預期的收件人。

  1. 從最後一個步驟取得帳戶電子郵件。

  2. 使用測試主旨和內文文字傳送電子郵件到此地址。

  3. 確認您已在帳戶擁有者的電子郵件地址收到電子郵件。

  4. 確認您收到的電子郵件具有符合 中ADDRESS_FROM設定FROM的地址cdk.json

  5. 確認收到的電子郵件主旨和內文與原始傳送的訊息相同。

應用程式開發人員、 AWS DevOps

故障診斷

問題解決方案

系統未如預期轉送電子郵件。

確認您的設定正確無誤:

  1. 您應該已完成網域的 Amazon SES 驗證程序

  2. 您的網域應該正確設定,其中 MX 記錄指向您 AWS 帳戶 和 區域中的 Amazon SES端點。如需詳細資訊,請參閱《Amazon 文件》中的發佈 Amazon SES電子郵件接收的 MX 記錄。 SES

驗證網域設定後,請依照下列步驟進行:

  1. 為您部署解決方案的帳戶和區域開啟 Amazon CloudWatch 主控台,並在導覽窗格中導覽至 CloudWatch 日誌群組。

  2. 搜尋 的日誌群組清單SesMailForwardLogGroup

  3. 調查此群組中的日誌,以查看電子郵件販賣和轉送程序期間是否產生任何錯誤。

當您嘗試部署 AWS CDK 堆疊時,您會收到類似以下的錯誤:

「範本格式錯誤:無法辨識的資源類型」

在大多數情況下,此錯誤訊息表示您鎖定的區域沒有所有可用的AWS服務。如果您使用 Amazon EC2執行個體來部署解決方案,則可能是針對與執行個體執行所在區域不同的區域。

注意

根據預設, AWS CDK 部署到您在 中設定的 區域和帳戶 AWS CLI。

可能的解決方案:

  1. 檢閱AWS依區域的服務,以調查此解決方案所需的所有服務 (請參閱此模式稍早的目標技術堆疊區段) 是否位於 AWS 區域 您目標的 中。

  2. 如果您使用的是 EC2執行個體,並以與執行個體執行所在區域不同的區域為目標,請務必設定AWS_DEFAULT_REGION環境變數,或使用 設定區域, AWS CLI 再部署解決方案。如需詳細資訊,請參閱 AWS CLI 文件中的設定 的環境變數 AWS CLI。或者,您可以依照AWS CDK 環境文件中的指示,修改儲存庫根中的app.py檔案,以包含硬式編碼帳戶 ID 和區域。

部署解決方案時,您會收到錯誤訊息:

「部署失敗:錯誤: AwsMailFwdStack: SSM parameter /cdk-bootstrap/hnb659fds/version 找不到。環境是否已開機? 請執行「cdk 引導」

如果您從未將任何 AWS CDK 資源部署到要鎖定的 AWS 帳戶 和 區域,您必須先執行 cdk bootstrap命令,如錯誤所示。如果您在執行 bootstrapping 命令後繼續收到此錯誤,則可能嘗試將解決方案部署到與開發環境執行區域不同的區域。

若要解決此問題,請先設定AWS_DEFAULT_REGION環境變數或使用 設定區域, AWS CLI 再部署解決方案。或者,您可以依照AWS CDK 環境文件中的指示,修改儲存庫根中的app.py檔案,以包含硬式編碼的帳戶 ID 和區域。

相關資源

其他資訊

成本

當您部署此解決方案時, AWS 帳戶 持有者可能會產生與使用下列服務相關的成本。 了解這些服務的計費方式非常重要,以便您了解任何潛在的費用。如需定價資訊,請參閱下列頁面: