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

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

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

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

程式碼儲存庫: GitHub aws-account-factory-email

環境:PoC 或試行

技術:基礎設施;管理與治理;傳訊與通訊

AWS 服務:AWSLambda;Amazon SES;Amazon DynamoDB

Summary

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

此模式提供唯一的電子郵件地址販賣解決方案,讓 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 CLI 之前設定AWS_DEFAULT_REGION環境變數,或使用 設定區域。如需詳細資訊,請參閱 AWS CLI 文件中的設定 的環境變數 AWS CLI。或者,您可以依照AWS CDK 環境 文件中的指示,修改儲存庫根中的app.py檔案,以包含硬式編碼帳戶 ID 和區域。

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

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

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

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

相關資源

其他資訊

成本

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