使用 AWS 以程式碼形式管理 AWS IAM 身分中心許可集 CodePipeline - AWS 方案指引

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

使用 AWS 以程式碼形式管理 AWS IAM 身分中心許可集 CodePipeline

由安德烈·卡瓦爾坎特(AWS)和克萊森·阿莫利姆(AWS)創建

代碼存儲庫:aws-iam-identity-center-管道

環境:生產

技術:安全性、身分識別、合規性; DevOps

AWS 服務:AWS CodeBuild;AWS CodeCommit;AWS CodePipeline;AWS IAM 身分中心

Summary

AWS IAM 身分中心 (AWS Single Sign-On 的後續任務) 可協助您集中管理對所有 AWS 帳戶和應用程式的單一登入 (SSO) 存取。您可以在 IAM 身分中心建立和管理使用者身分識別,也可以連接現有的身分識別來源,例如 Microsoft Active Directory 網域或外部身分識別提供者 (IdP)。IAM 身分中心提供統一的管理體驗,可使用許可集來定義、自訂和指派對 AWS 環境的精細存取權。權限集適用於來自 AWS IAM 身分中心身分存放區或外部 IdP 的聯合身分使用者和群組。

此模式可協助您在多帳戶環境中以程式碼的形式管理 IAM 身分中心權限集,該環境是以 AWS Organizations 中的組織形式進行管理。使用此模式,您可以實現以下目標:

  • 建立、刪除及更新權限集

  • 建立、更新或刪除目標 AWS 帳戶、組織單位 (OU) 或組織根目錄的權限集指派。

為了以程式碼形式管理 IAM 身分中心許可和指派,此解決方案會部署使用 AWS、AWS 和 AWS CodeCommit 的持續整合和持續交付 (CI/CD) 管道。 CodeBuild CodePipeline您可以在儲存在 CodeCommit 存放庫中的 JSON 範本中管理權限集和指派。當 Amazon EventBridge 規則偵測到儲存庫的變更或偵測到目標 OU 中帳戶的修改時,就會啟動 AWS Lambda 函數。Lambda 函數會啟動 CI/CD 管道,以更新 IAM 身分識別中心中的權限集和指派。

先決條件和限制

先決條件

  • 在 AWS Organizations 中以組織形式管理的多帳戶環境。如需詳細資訊,請參閱建立組織

  • 使用身分識別來源啟用和設定的 IAM 身分識別中心。如需詳細資訊,請參閱 IAM 身分中心文件中的入門指南。

  • 已註冊為 IAM 身分中心委派管理員的成員帳戶。如需指示,請參閱 IAM 身分中心說明文件中的註冊成員帳戶

  • 在 IAM 身分中心委派的管理員帳戶和組織的管理帳戶中部署 AWS CloudFormation 堆疊的許可。如需詳細資訊,請參閱 CloudFormation 說明文件中的控制存取

  • 身分識別中心委派管理員中的 Amazon 簡易儲存服務 (Amazon S3) 儲存貯體,用於上傳成品程式碼。如需指示,請參閱建立值區

  • 組織管理帳戶的帳戶 ID。如需指示,請參閱尋找您的 AWS 帳戶 ID

限制

  • 此模式無法用於管理或指派單一帳戶環境或非 AWS Organization 中以組織形式管理的帳戶的權限集。

  • 部署後,無法修改權限集名稱、指派 ID 和 IAM 身分中心主體類型和 ID。

  • 此模式可協助您建立和管理自訂權限。您無法使用此模式來管理或指派預先定義的權限

  • 此模式無法用於管理組織管理帳戶的權限集。

架構

技術, 堆

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • Amazon EventBridge

  • AWS 身分中心

  • AWS Lambda

  • AWS Organizations

目標架構

使用 CI/CD 管道和 AWS CodeCommit 存放庫在 AWS IAM 身分中心管理許可集。

該圖顯示以下工作流程:

  1. 使用者進行下列其中一項變更:

    1. 提交 CodeCommit 儲存庫的一或多個變更

    2. 修改 AWS Organizations 中組織單位 (OU) 中的帳戶

  2. 如果使用者對 CodeCommit 儲存庫提交了變更,CodeChange EventBridge 則規則會偵測變更,並在 IAM 身分中心委派的管理員帳戶中啟動 Lambda 函數。此規則不會對儲存庫中某些檔案 (例如README.md檔案) 的變更做出反應。

    如果使用者修改了組織單位中的帳戶,則MoveAccount EventBridge 規則會偵測到變更,並在組織的管理帳戶中啟動 Lambda 函數。

  3. 啟動的 Lambda 函數會在中啟動 CI/CD 管線。 CodePipeline

  4. CodePipeline 啟動CodebuildTemplateValidation CodeBuild 專案。

  5. CodebuildTemplateValidation CodeBuild 專案使用 CodeCommit 儲存庫中的 Python 指令碼來驗證權限集範本。 CodeBuild 驗證下列項目:

    • 權限集名稱是唯一的。

    • 指派陳述式 ID (Sid) 是唯一的。

    • CustomPolicy參數中的策略定義和有效。(此驗證使用 AWS Identity and Access Management 存取分析器。)

    • 受管政策的 Amazon 資源名稱 (ARN) 有效。

  6. CodebuildPermissionSet CodeBuild 專案使用適用於 Python 的 AWS 開發套件 (Boto3) 來刪除、建立或更新身分識別中心中的許可集。只有具有SSOPipeline:true標籤的權限集才會受到影響。透過此管線管理的所有權限集都有此標籤。

  7. CodebuildAssignments CodeBuild 專案會使用 Terraform 來刪除、建立或更新 IAM 身分中心中的指派。Terraform 後端狀態檔案存放在同一帳戶的 S3 儲存貯體中。

  8. CodeBuild 在組織的管理帳戶中擔任 lookup IAM 角色。它會呼叫組織和身分存放區 API,以列出授予或撤銷權限所需的資源。

  9. CodeBuild 更新 IAM 身分中心中的許可集和指派。

自動化和規模

由於多帳戶環境中的所有新帳戶都會移至 AWS Organizations Organization 中的特定組織單位,因此此解決方案會自動執行並將所需權限集授予您在指派範本中指定的所有帳戶。不需要額外的自動化或縮放動作。

在大型環境中,向 IAM 身分中心發出的 API 請求數量可能會導致此解決方案的執行速度更慢。Terraform 和 Boto3 會自動管理節流,以最大限度地減少任何性能降低。

工具

AWS 服務

  • AWS 可 CloudFormation協助您設定 AWS 資源、快速且一致地佈建 AWS 資源,並在 AWS 帳戶和區域的整個生命週期中進行管理。

  • AWS CodeBuild 是全受管的建置服務,可協助您編譯原始程式碼、執行單元測試,以及產生準備好部署的成品。 

  • AWS CodeCommit 是一種版本控制服務,可協助您以私密方式存放和管理 Git 儲存庫,而無需管理自己的原始檔控制系統。

  • AWS 可 CodePipeline協助您快速建模和設定軟體發行的不同階段,並自動執行持續發行軟體變更所需的步驟。

  • Amazon EventBridge 是無伺服器事件匯流排服務,可協助您將應用程式與來自各種來源的即時資料連接起來。例如,AWS Lambda 函數、使用 API 目的地的 HTTP 叫用端點,或其他 AWS 帳戶中的事件匯流排。

  • AWS IAM 身分中心可協助您集中管理對所有 AWS 帳戶和雲端應用程式的單一登入 (SSO) 存取。

  • AWS Organizations Organization 是一種帳戶管理服務,可協助您將多個 AWS 帳戶合併到您建立並集中管理的組織中。

  • 適用於 Python 的 AWS 開發套件 (Boto3) 是一套軟體開發套件,可協助您將 Python 應用程式、程式庫或指令碼與 AWS 服務整合。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。

代碼存儲庫

此模式的代碼可在 aws-iam-identity-center-pipeline 存儲庫中找到。存放庫中的 Templates 資料夾包含權限集和指派的範例範本。它還包括用於在目標帳戶中部署 CI/CD 管道和 AWS 資源的 AWS CloudFormation 範本。

最佳實務

  • 在開始修改權限集與指派範本之前,建議您先規劃組織的權限集。考慮應該是什麼許可、權限集應套用到哪些帳戶或 OU,以及哪些 IAM Identity Center 主體 (使用者或群組) 應受到權限集的影響。部署後,無法修改權限集名稱、關聯 ID 和 IAM 身分中心主體類型和 ID。

  • 遵守最低權限原則,並授予執行任務所需的最低權限。如需詳細資訊,請參閱 IAM 文件中的授與最低權限和安全性最佳實務

史诗

任務描述所需技能

複製儲存庫。

在 bash 外殼中,輸入以下命令。這將從中克隆 aws-iam-identity-center-管道存儲庫。 GitHub

git clone https://github.com/aws-samples/aws-iam-identity-center-pipeline.git
DevOps 工程師

定義權限集。

  1. 在複製的存放庫中,導覽至資templates/permissionsets料夾,然後開啟其中一個可用範本。

  2. Name參數中,輸入權限集的名稱。此值必須是唯一的,並且在部署後無法變更。

  3. Description參數中,簡要描述權限集,例如其使用案例。

  4. SessionDuration參數中,指定使用者可以登入 AWS 帳戶的時間長度。使用 ISO-8601 持續時間格式(維基百科),PT4H例如 4 小時。如果未定義任何值,IAM 身分中心的預設值為 1 小時。

  5. 自訂權限集中的原則。以下所有參數都是可選的,並且可以在部署後進行修改。您必須至少使用其中一個參數,才能定義權限集中的原則:

    • ManagedPolicies參數中,輸入您要指派之任何 AWS 受管政策的 ARN。

    • CustomerManagedPolicies參數中,輸入您要指派之任何客戶管理策略的名稱。請勿使用 ARN。

    • PermissionBoundary參數中,執行下列動作以指派權限界限

      • 如果您使用 AWS 受管政策做為許可界限,請在中PolicyTypeAWS、輸入和輸入該政策的 ARN。Policy

      • 如果您使用客戶管理的政策做為權限界限PolicyType,請在中CustomerPolicy、輸入和輸入政策的名稱。請勿使用 ARN。

    • CustomPolicy參數中,定義您要指派的任何自訂 JSON 格式原則。如需 JSON 原則結構的詳細資訊,請參閱 JSON 政策概觀

  6. 儲存並關閉權限集範本。建議您使用與權限集名稱相符的名稱來儲存檔案。

  7. 重複此程序,視需要為您的組織建立任意數量的權限集,並刪除任何不需要的範例範本。

DevOps 工程師

定義指派。

  1. 在複製的存放庫中,導覽至資templates/assignments料夾,然後開啟iam-identitycenter-assigments.json。此檔案說明您要如何將權限集指派給 AWS 帳戶或 OU。

  2. SID參數中,輸入指定的識別碼。此值必須是唯一的,並且在部署後無法修改。

  3. Target參數中,定義您要套用權限集的帳戶或組織。有效值為帳戶識別碼、OU ID、OU 名稱或rootroot會將權限集指派給組織中的所有成員帳戶 (不包括管理帳戶)。以雙引號輸入值,並以逗號分隔多個值。如需如何尋找 ID 的相關指示,請參閱檢視帳戶的詳細資料或檢視 OU 的詳細資料

  4. PrincipalType參數中,輸入將受權限集影響的 IAM 身分中心主體類型。有效值為 USERGROUP。部署後無法修改此值。

  5. PrincipalID參數中,輸入 IAM 身分識別中心身分存放區中將受權限集影響的使用者或群組的名稱。部署後無法修改此值。

  6. PermissionSetName參數中,輸入您要指派之權限集的名稱。

  7. 重複步驟 2-6,在此檔案中建立任意數量的指定。一般而言,每個權限集都有一個指派。刪除任何不需要的範例指派。

  8. 儲存並關閉 iam-identitycenter-assigments.json 檔案。

DevOps 工程師
任務描述所需技能

將檔案上傳到 S3 儲存貯體。

  1. 將複製的儲存庫壓縮為 .zip 檔案。

  2. 登入 IAM 身分中心委派的系統管理員帳戶。

  3. 前往 https://console.aws.amazon.com/s3/ 開啟的 Amazon Simple Storage Service (Amazon S3) 主控台。

  4. 在左側導覽窗格中,選擇 Buckets (儲存貯體)。

  5. 選擇您要用來部署此解決方案的值區。

  6. 將 .zip 檔案上傳至目標 S3 儲存貯體。如需相關說明,請參閱上傳物件

DevOps 工程師

在 IAM 身分中心委派的管理員帳戶中部署資源。

  1. 在 IAM 身分中心委派的系統管理員帳戶中,開啟主 CloudFormation 控台,網址為 https://console.aws.amazon.com/cloudformation/

  2. 部署iam-identitycenter-pipeline.yaml範本。為堆疊提供清晰且描述性的名稱,並依照指示更新參數。如需指示,請參閱 CloudFormation 文件中的建立堆疊

DevOps 工程師

在 AWS 組織管理帳戶中部署資源。

  1. 登入組織的管理帳戶。

  2. 請在以下位置開啟 CloudFormation 主控台。 https://console.aws.amazon.com/cloudformation/

  3. 在導覽列中,選擇目前顯示的 AWS 區域名稱。然後選擇「us-east-1地區」。需要此區域,以便MoveAccount EventBridge 規則可偵測與組織變更相關的 AWS CloudTrail 事件。

  4. 部署iam-identitycenter-organization範本。為堆疊提供清晰且描述性的名稱,並依照指示更新參數。如需指示,請參閱 CloudFormation 文件中的建立堆疊

DevOps 工程師
任務描述所需技能

更新權限集和指派。

MoveAccount Amazon EventBridge 規則偵測到組織中帳戶的修改時,CI/CD 管道會自動啟動並更新許可集。例如,如果您將帳戶新增至指派 JSON 檔案中指定的 OU,則 CI/CD 管線會將權限集套用至新帳戶。

如果您要修改已部署的權限集和指派,請更新 JSON 檔案,然後將它們提交至 IAM 身分中心委派管理員帳戶中的 CodeCommit 存放庫。如需指示,請參閱 CodeCommit 文件中的建立提交

使用 CI/CD 管線管理先前部署的權限集和關聯時,請注意下列事項:

  • 如果您變更權限集的名稱,CI/CD 管線會刪除原始權限集並建立新的權限集。

  • 此管線僅管理具有SSOPipeline:true標籤的權限集。

  • 您可以在存放庫的相同資料夾中擁有多個權限集和指派範本。

  • 如果刪除範本,管線會刪除指派或權限集。

  • 如果您刪除整個指派 JSON 區塊,管線會從 IAM 身分中心刪除指派。

  • 您無法刪除指派給 AWS 帳戶的權限集。首先,您必須取消指派權限集。

DevOps 工程師

故障診斷

問題解決方案

存取遭拒錯誤

確認您具有部署 CloudFormation 範本及其中定義的資源所需的權限。如需詳細資訊,請參閱 CloudFormation 說明文件中的控制存取

驗證階段中的管線錯誤

如果權限集或指派範本中有任何錯誤,就會出現此錯誤。

  1. 在中 CodeBuild,檢視組建詳細資料

  2. 在組建記錄檔中,尋找驗證錯誤,該錯誤會提供有關造成組建失敗的原因的詳細資訊。

  3. 更新權限集或指派範本,然後將其提交至存放庫。

  4. CI/CD 管線會重新啟動專案 CodeBuild 。監視狀態以確認驗證錯誤已解決。

相關資源