本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Account Factory for Terraform 管理多個帳戶的許可集
Anand Krishna Varanasi 和 Siamak Heshmati,Amazon Web Services
Summary
此模式可協助您將 AWS Control Tower Account Factory Terraform (AFT) 與 AWS IAM Identity Center 整合,以 AWS 帳戶 大規模設定多個 的許可。此方法使用自訂 AWS Lambda 函數來自動化以組織形式管理 AWS 帳戶 之 的許可集指派。這可簡化程序,因為它不需要您平台工程團隊的手動介入。此解決方案可以增強營運效率、安全性和一致性。它為 提升了安全且標準化的加入程序 AWS Control Tower,讓優先考慮其雲端基礎設施敏捷性和可靠性的企業難以取代。
先決條件和限制
先決條件
AWS 帳戶,透過 管理 AWS Control Tower。如需詳細資訊,請參閱 入門 AWS Control Tower。
Account Factory for Terraform,部署在您環境中的專用帳戶中。如需詳細資訊,請參閱部署 Terraform AWS Control Tower 的帳戶工廠。
IAM Identity Center 執行個體,在您的環境中設定。如需詳細資訊,請參閱 IAM Identity Center 入門。
已設定的作用中 IAM Identity Center 群組。 如需詳細資訊,請參閱將群組新增至您的 IAM Identity Center 目錄 。
Python 3.9 版或更新版本,已安裝
限制
此解決方案只能與透過 管理的帳戶搭配使用 AWS Control Tower。此解決方案是透過使用 Account Factory for Terraform 進行部署。
此模式不包含使用身分來源設定聯合身分的指示。如需如何完成此設定的詳細資訊,請參閱 IAM Identity Center 文件中的 IAM Identity Center 身分來源教學課程。
架構
AFT 概觀
AFT 會設定 Terraform 管道,協助您在其中佈建和自訂帳戶 AWS Control Tower。AFT 遵循可自動化帳戶佈建程序的 GitOps 模型 AWS Control Tower。您可以建立帳戶請求 Terraform 檔案並將其遞交至儲存庫。這會啟動帳戶佈建的 AFT 工作流程。帳戶佈建完成後,AFT 可以自動執行其他自訂步驟。如需詳細資訊,請參閱 AWS Control Tower 文件中的 AFT 架構。
AFT 提供下列主要儲存庫:
aft-account-request– 此儲存庫包含要建立或更新的 Terraform 程式碼 AWS 帳戶。aft-account-customizations– 此儲存庫包含 Terraform 程式碼,以根據每個帳戶建立或自訂資源。aft-global-customizations– 此儲存庫包含 Terraform 程式碼,可大規模為所有帳戶建立或自訂資源。aft-account-provisioning-customizations– 此儲存庫會管理僅套用至由 建立並使用 AFT 管理之特定帳戶的自訂。例如,您可以使用此儲存庫來自訂 IAM Identity Center 中的使用者或群組指派,或自動關閉帳戶。
解決方案概觀
此自訂解決方案包含 AWS Step Functions 狀態機器和 AWS Lambda 函數,可將許可集指派給多個帳戶的使用者和群組。透過此模式部署的狀態機器會搭配預先存在的 AFT aft_account_provisioning_customizations 狀態機器運作。建立新的 時或帳戶建立後,使用者會提交更新 IAM Identity Center AWS 帳戶 使用者和群組指派的請求。他們會將變更推送至aft-account-request儲存庫來執行此操作。建立或更新帳戶的請求會在 Amazon DynamoDB Streams 中啟動串流。這會啟動 Lambda 函數,以更新目標的 IAM Identity Center 使用者和群組 AWS 帳戶。
以下是您可以在 Lambda 函數中提供的參數範例,用於將許可集指派至目標使用者和群組:
custom_fields = { "InstanceArn" = "<Organization ID>", "PermissionSetArn" = "<Permission set ARN>", "PrincipalId" = "<Principal ID>", }
以下是此陳述式中的參數:
InstanceArn– 組織的 Amazon Resource Name (ARN)PermissionSetArn– 許可集的 ARNPrincipalId– IAM Identity Center 中要套用許可集之使用者或群組的識別符
注意
您必須先建立目標許可集、使用者和群組,才能執行此解決方案。
雖然InstanceArn值必須保持一致,但您可以修改 Lambda 函數,將多個許可集指派給多個目標身分。許可集的參數必須以 結尾PermissionSetArn,而使用者和群組的參數必須以 結尾PrincipalId。您必須定義兩個屬性。以下是如何定義多個許可集和目標使用者和群組的範例:
custom_fields = { "InstanceArn" = "<Organization ID>", "AdminAccessPermissionSetArn" = "<Admin privileges permission set ARN>", "AdminAccessPrincipalId" = "<Admin principal ID>", "ReadOnlyAccessPermissionSetArn" = "<Read-only privileges permission set ARN>", "ReadOnlyAccessPrincipalId" = "<Read-only principal ID>", }
下圖顯示解決方案如何 AWS 帳戶 大規模更新目標中使用者和群組許可集step-by-step工作流程。當使用者啟動帳戶建立請求時,AFT 會啟動 aft-account-provisioning-framework Step Functions 狀態機器。此狀態機器會啟動 extract-alternate-sso Lambda 函數。Lambda 函數會將許可集指派給目標中的使用者和群組 AWS 帳戶。這些使用者或群組可以來自 IAM Identity Center 中的任何已設定身分來源。身分來源的範例包括 Okta、Active Directory 或 Ping Identity。

圖表顯示建立新帳戶時的下列工作流程:
使用者將
custom_fields變更推送至aft-account-request儲存庫。AWS CodePipeline 會啟動將使用者定義中繼資料記錄到 Amazon DynamoDB
aft-request-audit資料表 AWS CodeBuild 的任務。此資料表具有屬性來記錄使用者定義的中繼資料。ddb_event_name屬性會定義 AFT 操作的類型:如果值為
INSERT,則解決方案會在建立新的 時,將許可集指派給目標身分 AWS 帳戶 。如果值為
UPDATE,則解決方案會在 AWS 帳戶 建立 之後,將許可集指派給目標身分。
Amazon DynamoDB Streams 會啟動
aft_alternate_sso_extractLambda 函數。aft_alternate_sso_extractLambda 函數在 AWS Control Tower 管理帳戶中擔任 AWS Identity and Access Management (IAM) 角色。Lambda 函數透過對 IAM Identity Center 進行 an 適用於 Python (Boto3) 的 AWS SDK create_account_assignment
API 呼叫,將許可集指派給目標使用者和群組。它會從 Amazon DynamoDB aft-request-audit資料表擷取許可集和身分指派。當 Step Functions 工作流程完成時,會將許可集指派給目標身分。
自動化和擴展
AFT 使用 CodePipeline AWS CodeBuild、DynamoDB 和高度可擴展的 Lambda AWS 服務 等大規模運作。如需其他自動化,您可以將此解決方案與票證或問題管理系統整合,例如 Jira。如需詳細資訊,請參閱此模式的其他資訊一節。
工具
AWS 服務
Account Factory for Terraform (AFT) 是此解決方案中的主要工具。
aft-account-provisioning-customizations儲存庫包含用於建立自訂的 Terraform 程式碼 AWS 帳戶,例如自訂 IAM Identity Center 使用者或群組指派。Amazon DynamoDB 是一項全受管 NoSQL 資料庫服務,可提供快速、可預期且可擴展的效能。
AWS Lambda 是一項運算服務,可協助您執行程式碼,無需佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需按使用的運算時間付費。
AWS Step Functions 是一種無伺服器協同運作服務,可協助您結合 AWS Lambda 函數和其他 AWS 服務 來建置業務關鍵型應用程式。
其他工具
程式碼儲存庫
AFT 的程式碼儲存庫可在 GitHub AWS Control Tower Account Factory for Terraform
最佳實務
了解AWS 共同的責任模型
。 遵循 的安全建議 AWS Control Tower。如需詳細資訊,請參閱 中的安全性 AWS Control Tower。
遵循最低權限原則。如需詳細資訊,請參閱套用最低權限許可。
為群組和業務單位建置特定且著重的許可集和 IAM 角色。
史詩
| 任務 | 描述 | 所需的技能 |
|---|---|---|
建立 IAM 角色。 | 在 AWS Control Tower 管理帳戶中,使用 Terraform 建立 IAM 角色。此角色具有跨帳戶存取和信任政策,允許來自身分提供者的聯合存取。它還具有透過 授予其他帳戶存取權的許可 AWS Control Tower。Lambda 函數將擔任此角色。請執行下列操作:
| AWS DevOps,雲端架構師 |
為您的環境自訂解決方案。 |
| AWS DevOps,雲端架構師 |
部署解決方案。 |
| AWS DevOps,雲端架構師 |
設定程式碼儲存庫連線。 | 在您要存放組態檔案的程式碼儲存庫與 之間設定連線 AWS 帳戶。如需說明,請參閱 AWS CodePipeline 文件中的使用 CodeConnections 將第三方來源提供者新增至管道。 | AWS DevOps,雲端架構師 |
| 任務 | 描述 | 所需的技能 |
|---|---|---|
啟動 AFT 管道以部署新帳戶。 | 請遵循使用 AFT 佈建新帳戶中的指示,以啟動 AWS 帳戶 在您的 AWS Control Tower 環境中建立新 的管道。等待帳戶建立程序完成。 | AWS DevOps,雲端架構師 |
驗證變更。 |
| AWS DevOps,雲端架構師 |
故障診斷
| 問題 | 解決方案 |
|---|---|
許可集指派無法運作。 | 確定群組 ARN、組織 ID 和 Lambda 參數正確。如需範例,請參閱此模式的解決方案概觀一節。 |
更新儲存庫中的程式碼不會啟動管道。 | 此問題與 AWS 帳戶 和 儲存庫之間的連線有關。在 中 AWS Management Console,驗證連線是否作用中。如需詳細資訊,請參閱 AWS CodePipeline 文件中的 GitHub 連線。 |
其他資訊
與票證管理工具整合
您可以選擇將此解決方案與票證或問題管理工具整合,例如 Jira 或 ServiceNow。下圖顯示此選項的範例工作流程。您可以使用工具的連接器,將票證管理工具與 AFT 解決方案儲存庫整合。如需 Jira 連接器,請參閱將 Jira 與 GitHub 整合aft-account-request GitHub 儲存庫。您可以設計任何符合您使用案例需求的自訂工作流程。

該圖顯示以下工作流程:
使用者在票證管理工具中請求自訂許可集指派,例如 Jira。
核准案例後,工作流程會開始更新許可集指派。(選用) 您可以使用外掛程式來自訂此步驟的自動化。
運算子會將 Terraform 程式碼與更新的許可集參數傳送至開發或功能分支中的
aft-account-request儲存庫。GitHub 動作 AWS CodeBuild 會使用 OpenID Connect (OIDC) 呼叫啟動。CodeBuild 使用 tfsec
和 checkov 等工具,以程式碼 (IaC) 安全性掃描的形式執行基礎設施。它會警告運算子任何安全違規。 如果找不到違規,GitHub Actions 會建立自動提取請求,並將程式碼檢閱指派給程式碼擁有者。它也會為提取請求建立標籤。
如果程式碼擁有者核准程式碼檢閱,則會啟動另一個 GitHub 動作工作流程。它會檢查提取請求標準,包括:
如果提取請求標題符合要求。
如果提取請求內文包含核准的案例編號。
如果提取請求已正確標記。
如果提取請求符合標準,GitHub 動作會啟動 AFT 產品工作流程。其使用 會在 中啟動
ct-aft-account-request管道 AWS CodePipeline。此管道會在 Step Functions 中啟動aft-account-provisioning-framework自訂狀態機器。此狀態機器的運作方式如先前此模式的解決方案概觀一節所述。