本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 CodeBuild
AWS CodeCommit
AWS CodePipeline
Amazon EventBridge
AWS 身分中心
AWS Lambda
AWS Organizations
目標架構
![使用 CI/CD 管道和 AWS CodeCommit 存放庫在 AWS IAM 身分中心管理許可集。](images/pattern-img/419aaa80-1b97-402d-9c74-c1b8c1ddd1cb/images/3d671cf3-329b-4292-aa2d-1027886074f4.png)
該圖顯示以下工作流程:
使用者進行下列其中一項變更:
提交 CodeCommit 儲存庫的一或多個變更
修改 AWS Organizations 中組織單位 (OU) 中的帳戶
如果使用者對 CodeCommit 儲存庫提交了變更,
CodeChange
EventBridge 則規則會偵測變更,並在 IAM 身分中心委派的管理員帳戶中啟動 Lambda 函數。此規則不會對儲存庫中某些檔案 (例如README.md
檔案) 的變更做出反應。如果使用者修改了組織單位中的帳戶,則
MoveAccount
EventBridge 規則會偵測到變更,並在組織的管理帳戶中啟動 Lambda 函數。啟動的 Lambda 函數會在中啟動 CI/CD 管線。 CodePipeline
CodePipeline 啟動
CodebuildTemplateValidation
CodeBuild 專案。CodebuildTemplateValidation
CodeBuild 專案使用 CodeCommit 儲存庫中的 Python 指令碼來驗證權限集範本。 CodeBuild 驗證下列項目:權限集名稱是唯一的。
指派陳述式 ID (
Sid
) 是唯一的。CustomPolicy
參數中的策略定義和有效。(此驗證使用 AWS Identity and Access Management 存取分析器。)受管政策的 Amazon 資源名稱 (ARN) 有效。
此
CodebuildPermissionSet
CodeBuild 專案使用適用於 Python 的 AWS 開發套件 (Boto3) 來刪除、建立或更新身分識別中心中的許可集。只有具有SSOPipeline:true
標籤的權限集才會受到影響。透過此管線管理的所有權限集都有此標籤。CodebuildAssignments
CodeBuild 專案會使用 Terraform 來刪除、建立或更新 IAM 身分中心中的指派。Terraform 後端狀態檔案存放在同一帳戶的 S3 儲存貯體中。CodeBuild 在組織的管理帳戶中擔任
lookup
IAM 角色。它會呼叫組織和身分存放區API,以列出授予或撤銷權限所需的資源。 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
最佳實務
在開始修改權限集與指派範本之前,建議您先規劃組織的權限集。考慮應該是什麼許可、權限集應套用到哪些帳戶或 OU,以及哪些 IAM Identity Center 主體 (使用者或群組) 應受到權限集的影響。部署後,無法修改權限集名稱、關聯 ID 和 IAM 身分中心主體類型和 ID。
遵守最低權限原則,並授予執行任務所需的最低權限。如需詳細資訊,請參閱 IAM 文件中的授與最低權限和安全性最佳實務。
史诗
任務 | 描述 | 所需技能 |
---|---|---|
複製儲存庫。 | 在 bash 外殼中,輸入以下命令。這將從中克隆 aws-iam-identity-center-管道
| DevOps 工程師 |
定義權限集。 |
| DevOps 工程師 |
定義指派。 |
| DevOps 工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
將檔案上傳到 S3 儲存貯體。 |
| DevOps 工程師 |
在 IAM 身分中心委派的管理員帳戶中部署資源。 |
| DevOps 工程師 |
在 AWS 組織管理帳戶中部署資源。 |
| DevOps 工程師 |
任務 | 描述 | 所需技能 |
---|---|---|
更新權限集和指派。 | 當 如果您要修改已部署的權限集和指派,請更新 JSON 檔案,然後將它們提交至 IAM 身分中心委派管理員帳戶中的 CodeCommit 存放庫。如需指示,請參閱 CodeCommit 文件中的建立提交。 使用 CI/CD 管線管理先前部署的權限集和關聯時,請注意下列事項:
| DevOps 工程師 |
故障診斷
相關資源
權限集 (IAM 身分中心文件)