帳戶自訂 - AWS Control Tower

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

帳戶自訂

AFT 可以在佈建的帳戶中部署標準或自訂組態。在 AFT 管理帳戶中,AFT 為每個帳戶提供一個管道。透過此管道,您可以在所有帳戶、一組帳戶或個別帳戶中實作自訂。您可以執行 Python 指令碼、bash 指令碼和 Terraform 組態,也可以在帳戶自訂階段中與 AWS CLI 互動。

概要

在您選擇的儲存庫 (儲存全域自訂的git儲存庫) 中指定自訂之後,或是儲存帳戶自訂的儲存庫中,帳戶自訂階段就會由 AFT 管道自動完成。若要追溯自訂帳戶,請參閱重新叫用自訂

全域自訂 (選用)

您可以選擇將某些自訂套用至 AFT 佈建的所有帳戶。例如,如果您需要建立特定的 IAM 角色,或在每個帳戶中部署自訂控制項,則 AFT 管道中的全域自訂階段可讓您自動執行此操作。

帳戶自訂 (選用)

若要自訂個別帳戶或一組帳戶 (與其他 AFT 佈建帳戶不同),您可以利用 AFT 管道的帳戶自訂部分來實作帳戶特定組態。例如,只有特定帳戶可能需要存取網際網路閘道。

自訂先決條

開始自訂帳戶之前,請確定這些先決條件已經到位。

套用全域自訂

若要套用全域自訂,您必須將特定資料夾結構推送至您選擇的存放庫。

  • 如果您的自定義配置是 Python 程序或腳本的形式,請將這些配置放在存儲庫中的 api_helpers/ python 文件夾下。

  • 如果您的自定義配置是 Bash 腳本的形式,請將它們放在存儲庫中的 api_helpers 文件夾下。

  • 如果您的自定義配置是 Terraform 的形式,請將這些配置放在存儲庫的 Terraform 文件夾下。

  • 如需有關建立自訂組態的詳細資訊,請參閱全域自訂 README 檔案。

注意

在 AFT 管線中的 AFT 帳戶佈建架構階段之後,會自動套用全域自訂。

套用帳戶自訂

您可以透過將特定資料夾結構推送到您選擇的儲存庫來套用帳戶自訂。帳戶自訂會自動套用至 AFT 管線中,並在全域自訂階段之後套用。您也可以在帳戶自訂存放庫中建立包含不同帳戶自訂的多個資料夾。針對您需要的每個帳戶自訂,請使用下列步驟。

若要套用帳戶自訂
  1. 步驟 1:為帳戶自訂建立資料夾

    在您選擇的儲存庫中,將 AFT 提供的ACCOUNT_TEMPLATE資料夾複製到新資料夾。新資料夾的名稱應與您在account_customizations_name帳戶要求中提供的名稱相符。

  2. 將設定新增至您的特定帳戶自訂資料夾

    您可以根據設定的格式,將設定新增至帳戶自訂資料夾。

    • 如果您的自定義配置是 Python 程序或腳本的形式,請將它們放在存儲庫中的 [帳戶定制名稱] /api_ helpers/ python 文件夾下。

    • 如果您的自定義配置是 Bash 腳本的形式,請將它們放在存儲庫中的 [帳戶定制名稱] /api_ 幫手文件夾下。

    • 如果您的自定義配置是以 Terraform 的形式,請將它們放置在存儲庫中的 [帳戶定制] /terraform 文件夾下。

    如需有關建立自訂組態的詳細資訊,請參閱帳戶自訂 README 檔案。

  3. account_customizations_name參閱帳戶請求文件中的特定參數

    AFT 帳戶請求檔案包含輸入參數account_customizations_name。輸入您的帳戶自訂名稱作為此參數的值。

注意

您可以針對環境中的帳戶提交多個帳戶請求。當您要套用不同或類似的帳戶自訂項目時,請使用帳戶請求中的account_customizations_name輸入參數指定帳戶自訂。如需詳細資訊,請參閱提交多個帳戶請求

重新叫用自訂

AFT 提供了一種在 AFT 管線中重新叫用自訂的方法。當您已新增新的自訂步驟,或對現有自訂進行變更時,此方法非常有用。當您重新呼叫時,AFT 會啟動自訂管線,以對 AFT 佈建的帳戶進行變更。 event-source-based 重新叫用可讓您將自訂套用至個別帳戶、所有帳戶、根據其 OU 的帳戶,或套用至根據標籤選取的帳戶。

請遵循以下三個步驟,重新叫用 AFT 佈建帳戶的自訂項目。

步驟 1:將變更推送至全域或帳戶自訂git儲存庫

您可以視需要更新全域和帳戶自訂項目,並將變更推送回儲git存庫。在這一點上,沒有任何反應,自訂管道必須由事件來源叫用,如接下來的兩個步驟所述。

步驟 2:啟動 AWS 步驟函數執行以重新叫用自訂

AFT 提供在 AFT 管理帳戶aft-invoke-customizations中呼叫的 AWS 步驟函數。該函數的目的是重新叫用 AFT 佈建帳戶的自訂管道。

以下是您可以建立的事件結構描述 (JSON 格式) 範例,以將輸入傳遞至 aft-invoke-customizations AWS 步驟函數。

{ "include": [ { "type": "all" }, { "type": "ous", "target_value": [ "ou1","ou2"] }, { "type": "tags", "target_value": [ {"key1": "value1"}, {"key2": "value2"}] }, { "type": "accounts", "target_value": [ "acc1_ID","acc2_ID"] } ], "exclude": [ { "type": "ous", "target_value": [ "ou1","ou2"] }, { "type": "tags", "target_value": [ {"key1": "value1"}, {"key2": "value2"}] }, { "type": "accounts", "target_value": [ "acc1_ID","acc2_ID"] } ] }

範例事件結構描述顯示您可以選擇要在重新呼叫程序中包含或排除的帳戶。您可以依組織單位 (OU)、帳號標籤和帳號 ID 進行篩選。如果您未套用任何篩選器並包含陳述式"type":"all",則會重新叫用所有 AFT 佈建帳戶的自訂。

注意

如果您的 AWS Control Tower 版本為 1.6.5 或更新版本,您可以使用語法鎖定巢狀 OUOU Name (ou-id-1234)。如需詳細資訊,請參閱下列主題(詳見)GitHub

填寫事件參數之後,「Step Functions 數」會執行並叫用對應的自訂項目。AFT 一次最多可以叫用 5 個自訂。Step Functions 會等待並迴圈,直到符合事件條件的所有帳戶都完成為止。

步驟 3:監控 AWS 步驟函數輸出並觀察 AWS CodePipeline 執行中

  • 產生的「步驟函數」輸出包含符合「步驟函數」輸入事件來源的帳戶 ID。

  • 導覽至開發人員工具 CodePipeline 下的 AWS,並檢視帳戶 ID 的對應自訂管道。

使用 AFT 帳戶自訂要求追蹤疑難排解

以包含目標帳戶和自訂要求 ID 的 AWS Lambda 發出記錄為基礎的帳戶自訂工作流程。AFT 可讓您透過 Amazon CloudWatch Logs 追蹤並疑難排解自訂請求,方法是提供 CloudWatch 日誌見解查詢,您可以使用這些查詢來篩選目標帳戶或自訂請求 ID 與自訂請求相關的 CloudWatch 日誌。如需詳細資訊,請參閱 Amazon CloudWatch 日誌使用者指南中的使用 Amazon CloudWatch 日誌分析日誌資料

若要使用 AFT 的 CloudWatch 日誌深入解析
  1. 請在以下位置開啟 CloudWatch 主控台。 https://console.aws.amazon.com/cloudwatch/

  2. 在瀏覽窗格中,選擇 [記錄檔],然後選擇 [記錄深入解析]。

  3. 選擇「查詢」。

  4. 在 [範例查詢] 下,選擇 [Terraform 的 Account Factory],然後選取下列其中一個查詢:

    • 依帳戶 ID 分類的自訂記錄

      注意

      確保將 「您的帳戶 ID」替換為您的目標帳戶 ID

      fields @timestamp, log_message.account_id as target_account_id, log_message.customization_request_id as customization_request_id, log_message.detail as detail, @logStream | sort @timestamp desc | filter log_message.account_id == "YOUR-ACCOUNT-ID" and @message like /customization_request_id/
    • 依自訂要求識別碼的自訂記錄

      注意

      確保將 「您的自定義請求 ID」替換為您的自定義請求 ID。您可以在 AFT 帳戶佈建架構 AWS Step Functions 狀態機器的輸出中找到您的自訂要求 ID。如需 AFT 帳戶佈建架構的詳細資訊,請參閱 AFT 帳戶佈建管線

      fields @timestamp, log_message.account_id as target_account_id, log_message.customization_request_id as customization_request_id, log_message.detail as detail, @logStream | sort @timestamp desc | filter log_message.customization_request_id == "YOUR-CUSTOMIZATION-REQUEST-ID"
  5. 選取查詢之後,請務必選取時間間隔,然後選擇 [執行查詢]。