本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
監控跨多個 AWS 帳戶共用 Amazon 機器映像的使用
由納文·薩塔爾(AWS)和桑迪普·蓋萬德(AWS)創建
代碼存儲庫:cross-account-ami-auditing-地形樣本 | 環境:PoC 或試點 | 技術:管理與治理 DevOps;無伺服器;營運 |
AWS 服務:Amazon DynamoDB;AWS Lambda;Amazon EventBridge |
Summary
Amazon 機器映像(AMI)用於在 Amazon 網絡服務(AWS)環境中創建亞馬遜彈性計算雲(亞馬遜 EC2)實例。您可以在單獨的集中式 AWS 帳戶中建立 AMI,此帳戶在此模式中稱為建立者帳戶。然後,您可以在同一個 AWS 區域中的多個 AWS 帳戶共用 AMI,這些帳戶在此模式中稱為消費者帳戶。從單一帳戶管理 AMI 可提供擴充性並簡化控管。在消費者帳戶中,您可以參考 Amazon EC2 自動擴展啟動範本和 Amazon Elastic Kubernetes Service (Amazon EKS) 節點群組中的共用 AMI。
當共用 AMI 遭到淘汰、取消註冊或取消共用時,在消費者帳戶中參考 AMI 的 AWS 服務將無法使用此 AMI 啟動新執行個體。相同執行個體的任何 auto 縮放事件或重新啟動都會失敗。這可能會導致生產環境中的問題,例如應用程式停機或效能降低。當 AMI 共用和使用事件發生在多個 AWS 帳戶中時,可能很難監控此活動。
此模式可協助您監控相同區域中帳戶之間的共用 AMI 使用情況和狀態。它使用無伺服器 AWS 服務,例如 Amazon EventBridge、亞 Amazon DynamoDB、AWS Lambda 和 Amazon Simple Email Service (Amazon SES)。您可以使用 HashiCorp Terraform 將基礎架構佈建為程式碼 (IaC)。當消費者帳戶中的服務參考已取消註冊或未共用的 AMI 時,此解決方案會提供警示。
先決條件和限制
先決條件
限制
此病毒碼會使用帳戶 ID 監控已共用至特定帳戶的 AMI。此模式不會使用組織 ID 監視已共用給組織的 AMI。
AMI 只能共用至相同 AWS 區域內的帳戶。此病毒碼會監控單一目標區域內的 AMI。若要監控多個區域中 AMI 的使用情況,請在每個區域部署此解決方案。
此病毒碼不會監控在部署此解決方案之前共用的任何 AMI。如果您想要監視先前共用的 AMI,您可以取消共用 AMI,然後與消費者帳戶重新共用。
產品版本
地形版本 1.2.0 或更高版本
地形 AWS 供應商 4.20 版或更新版本
架構
目標技術堆疊
以下資源被佈建為 IaC 通過地形:
Amazon DynamoDB 資料表
Amazon EventBridge 規則
AWS Identity and Access Management (IAM) 角色
AWS Lambda 函數
Amazon SES
目標架構
![用於監視共享 AMI 使用情況的體系結構,並在 AMI 未共享或取消註冊時警告用戶](images/pattern-img/2d709249-0c68-47d7-be5d-46e8a73071ed/images/8c48c4dd-d681-4c32-9ba8-8f5ad2d66f64.png)
該圖顯示以下工作流程:
建立者帳戶中的 AMI 會與相同 AWS 區域中的消費者帳戶共用。
共用 AMI 時,建立者帳戶中的 Amazon EventBridge 規則會擷取
ModifyImageAttribute
事件,並在建立者帳戶中啟動 Lambda 函數。Lambda 函數會將與 AMI 相關的資料儲存在建立者帳戶的 DynamoDB 表格中。
當消費者帳戶中的 AWS 服務使用共用 AMI 啟動 Amazon EC2 執行個體,或者當共用 AMI 與啟動範本相關聯時,消費者帳戶中的 EventBridge 規則會擷取共用 AMI 的使用情況。
此 EventBridge 規則會啟動消費者帳戶中的 Lambda 函數。Lambda 函數會執行下列動作:
Lambda 函數會更新消費者帳戶中 DynamoDB 表格中與 AMI 相關的資料。
Lambda 函數會在建立者帳戶中擔任 IAM 角色,並更新建立者帳戶中的 DynamoDB 表格。在
Mapping
表格中,它會建立將執行個體 ID 或啟動範本 ID 對應至其個別 AMI ID 的項目。
在創建者帳戶中集中管理的 AMI 已被棄用,取消註冊或取消共享。
建立者帳戶中的 EventBridge 規則會使用動作擷取
ModifyImageAttribute
或DeregisterImage
事件,並啟remove
動 Lambda 函數。Lambda 函數會檢查 DynamoDB 資料表,以判斷是否在任何取用者帳戶中使用 AMI。如果
Mapping
表格中沒有與 AMI 相關聯的執行個體 ID 或啟動範本 ID,則程序已完成。如果任何執行個體 ID 或啟動範本 ID 與
Mapping
表格中的 AMI 相關聯,則 Lambda 函數會使用 Amazon SES 傳送電子郵件通知給已設定的訂閱者。
工具
AWS 服務
Amazon DynamoDB 是一項全受管 NoSQL 資料庫服務,可提供快速、可預期且可擴展的效能。
Amazon EventBridge 是無伺服器事件匯流排服務,可協助您將應用程式與來自各種來源的即時資料連接起來。例如,AWS Lambda 函數、使用 API 目的地的 HTTP 叫用端點,或其他 AWS 帳戶中的事件匯流排。
AWS Identity and Access Management (IAM) 可透過控制誰經過身份驗證和授權使用 AWS 資源,協助您安全地管理對 AWS 資源的存取。
AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。
Amazon Simple Email Service (Amazon SES) 可協助您使用自己的電子郵件地址和網域來傳送和接收電子郵件。
其他工具
HashiCorp Terraform
是一種開放原始碼基礎結構即程式碼 (IaC) 工具,可協助您使用程式碼來佈建和管理雲端基礎架構和資源。 Python
是一種通用的計算機編程語言。
代碼存儲庫
此模式的代碼可在 GitHub cross-account-ami-monitoring-terra
最佳實務
請遵循建置 AMI 的最佳做法。
建立 IAM 角色時,請遵循最低權限原則,並授予執行任務所需的最低權限。如需詳細資訊,請參閱 IAM 文件中的授與最低權限和安全性最佳實務。
設定 AWS Lambda 函數的監控和警示。如需詳細資訊,請參閱監控 Lambda 函數和疑難排解。
史诗
任務 | 描述 | 所需技能 |
---|---|---|
建立 AWS CLI 命名的設定檔。 | 對於建立者帳戶和每個消費者帳戶,請建立一個名為 AWS Command Line Interface (AWS CLI) (AWS CLI) 的設定檔。如需指示,請參閱 AWS 入門資源中心中的設定 AWS CLI | DevOps 工程師 |
複製儲存庫。 | 輸入以下命令。這通過使用 SSH 克隆 cross-account-ami-monitoring-terraform 樣本
| DevOps 工程師 |
更新提供程序 .tf 文件。 |
如需有關設定提供者的詳細資訊,請參閱 Terraform 文件中的多個提供者組態 | DevOps 工程師 |
更新地界形 .tfvars 檔案。 |
| DevOps 工程師 |
更新主要 .tf 檔案。 | 只有在將此解決方案部署到多個用戶帳戶時,才完成這些步驟。如果您只將此解決方案部署到一個消費者帳戶,則不需要修改此檔案。
| DevOps 工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
部署解決方案。 | 在 Terraform CLI 中,輸入下列命令,在建立者和消費者帳戶中部署 AWS 資源:
| DevOps 工程師 |
驗證電子郵件地址身份。 | 部署 Terraform 方案時,Terraform 會在 Amazon SES 中為每個消費者帳戶建立電子郵件地址身分。您必須先驗證電子郵件地址,才能將通知傳送到該電子郵件地址。如需指示,請參閱 Amazon SES 文件中的驗證電子郵件地址身分。 | 一般 AWS |
任務 | 描述 | 所需技能 |
---|---|---|
驗證建立者帳戶中的部署。 |
| DevOps 工程師 |
驗證消費者帳戶中的部署。 |
| DevOps 工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
在創建者帳戶中創建 AMI。 |
| DevOps 工程師 |
在消費者帳戶中使用 AMI。 | 在消費者帳戶中,使用共用 AMI 建立 EC2 執行個體或啟動範本。如需指示,請參閱如何從自訂 AMI 啟動 EC2 執行個 | DevOps 工程師 |
驗證監控和警示。 |
| DevOps 工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
刪除資源。 |
| DevOps 工程師 |
故障診斷
問題 | 解決方案 |
---|---|
我沒有收到電子郵件提示。 | 未傳送 Amazon SES 電子郵件的原因可能有多種。請檢查以下內容:
|
相關資源
AWS 文件
使用 Python 建置 Lambda 函數 (Lambda 文件)
創建一個 AMI(Amazon EC2 文檔)
與特定 AWS 帳戶共用 AMI (Amazon EC2 文件)
取消註冊您的 AMI (Amazon EC2 文件)
地形文件