本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS CodePipeline 和 Amazon Bedrock 以程式碼形式管理 AWS Organizations 政策
由 Andre Cavalcante (AWS) 和 Mariana Pessoa de Queiroz (AWS) 建立
Summary
您可以在 中使用授權政策 AWS Organizations ,集中設定和管理成員帳戶中主體和資源的存取權。服務控制政策 SCPs) 定義組織中 AWS Identity and Access Management (IAM) 角色和使用者的最大可用許可。資源控制政策 RCPs) 會定義組織中資源可用的許可上限。
此模式可協助您將 SCPs 和 RCPs 管理為您透過持續整合和持續部署 (CI/CD) 管道部署的基礎設施即程式碼 (IaC)。透過使用 AWS CloudFormation 或 Hashicorp Terraform 來管理這些政策,您可以減輕與建立和維護多個授權政策相關的負擔。
此模式包含下列功能:
您可以使用資訊清單檔案 (
scp-management.json
和 ) 建立、刪除和更新授權政策rcp-management.json
。您使用護欄而非政策。您可以在資訊清單檔案中定義護欄及其目標。
使用 AWS CodeBuild 和 的管道 AWS CodePipeline會合併和最佳化資訊清單檔案中的護欄。對於資訊清單檔案中的每個陳述式,管道會將護欄合併為單一 SCP 或 RCP,然後將其套用至定義的目標。
AWS Organizations 會將政策套用至您的目標。目標可以是 AWS 帳戶、組織單位 (OU)、環境 (這是您在
environments.json
檔案中定義的一組帳戶或 OUs),或共用AWS 標籤的一組帳戶。Amazon Bedrock 會讀取管道日誌並摘要所有政策變更。
管道需要手動核准。核准者可以檢閱 Amazon Bedrock 準備的執行摘要,以協助他們了解變更。
先決條件和限制
先決條件
限制
架構
下圖顯示政策管理管道及其相關聯資源的工作流程。

該圖顯示以下工作流程:
使用者將變更遞交至遠端儲存庫主分支中的
scp-management.json
或rcp-management.json
資訊清單檔案。main
分支的變更會在其中啟動管道 AWS CodePipeline。CodePipeline 會啟動
Validate-Plan
CodeBuild 專案。此專案使用遠端儲存庫中的 Python 指令碼來驗證政策和政策資訊清單檔案。此 CodeBuild 專案會執行下列動作:檢查 SCP 和 RCP 資訊清單檔案是否包含唯一的陳述式 IDs(
Sid
)。使用
scp-policy-processor/main.py
和rcp-policy-processor/main.py
Python 指令碼,將護欄資料夾中的護欄串連至單一 RCP 或 SCP 政策。它結合了具有相同Resource
、Action
和 的護欄Condition
。使用 AWS Identity and Access Management Access Analyzer 驗證最終的最佳化政策。如果有任何問題清單,管道會停止。
建立
scps.json
和rcps.json
檔案,Terraform 會使用這些檔案來建立資源。執行
terraform plan
命令,這會建立 Terraform 執行計畫。
(選用)
Validate-Plan
CodeBuild 專案使用bedrock-prompt/prompt.py
指令碼將提示傳送至 Amazon Bedrock。您可以在bedrock-prompt/prompt.txt
檔案中定義提示。Amazon Bedrock 使用 Anthropic Claude Sonnet 3.5,透過分析 Terraform 和 Python 日誌來產生提議變更的摘要。CodePipeline 使用 Amazon Simple Notification Service (Amazon SNS) 主題,以通知核准者必須檢閱變更。如果 Amazon Bedrock 產生變更摘要,通知會包含此摘要。
政策核准者核准 CodePipeline 中的動作。如果 Amazon Bedrock 產生變更摘要,核准者可以在核准之前檢閱 CodePipeline 中的摘要。
CodePipeline 會啟動
Apply
CodeBuild 專案。此專案使用 Terraform 來套用 RCP 和 SCP 變更 AWS Organizations。
與此架構相關聯的 IaC 範本也會部署支援政策管理管道的下列資源:
用於存放 CodePipeline 成品和指令碼的 Amazon S3 儲存貯體,例如
scp-policy-processor/main.py
和bedrock-prompt/prompt.py
加密此解決方案所建立資源的 AWS Key Management Service (AWS KMS) 金鑰
工具
AWS 服務
Amazon Bedrock 是一項全受管 AI 服務,可透過統一 API 使用許多高效能的基礎模型。
AWS CodeBuild 是一種全受管建置服務,可協助您編譯原始程式碼、執行單元測試,並產生準備好部署的成品。
AWS CodePipeline 可協助您快速建模和設定軟體版本的不同階段,並自動化持續發行軟體變更所需的步驟。
AWS Organizations 是一種帳戶管理服務,可協助您將多個 合併 AWS 帳戶 到您建立並集中管理的組織。
適用於 Python (Boto3) 的 AWS SDK
是一種軟體開發套件,可協助您整合 Python 應用程式、程式庫或指令碼 AWS 服務。 Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。
其他工具
HashiCorp Terraform
是一種 IaC 工具,可協助您使用程式碼來佈建和管理雲端基礎設施和資源。
程式碼儲存庫
此模式的程式碼可在 organizations-policy-pipelinesample-repository
資料夾中包含的金鑰檔案:
在
environments
資料夾中,environments.json
包含環境清單。環境是一組目標,它們可以包含 AWS 帳戶 IDs或組織單位 OUs)。在
rcp-management
資料夾中:guardrails
資料夾包含 RCPs 的個別護欄policies
資料夾包含個別 RCPsrcp-management.json
資訊清單檔案可協助您管理 RCP 護欄、完整 RCPs 及其相關聯的目標。
在
scp-management
資料夾中:guardrails
資料夾包含 SCPs 的個別護欄policies
資料夾包含個別 SCPsscp-management.json
資訊清單檔案可協助您管理 SCP 護欄、完整 SCPs 及其相關聯的目標。
utils
資料夾包含的指令碼可協助您遷移目前的 SCPs 和 RCPs,以便您可以透過管道管理它們。如需詳細資訊,請參閱此模式的其他資訊一節。
最佳實務
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
建立 儲存庫。 | 建立安全操作團隊將從中管理政策的儲存庫。使用其中一個 AWS CodeConnections 支援的第三方儲存庫提供者。 | DevOps 工程師 |
委派政策管理。 | 將 AWS Organizations 政策的管理委派給您要部署管道的成員帳戶。如需說明,請參閱使用 建立資源型委派政策 AWS Organizations。如需範例政策,請參閱此模式額外資訊區段中的以資源為基礎的委派政策範例。 | AWS 管理員 |
(選用) 啟用基礎模型。 | 如果您想要產生政策變更的摘要,請在 AWS 帳戶 您要部署管道的 中,啟用 Amazon Bedrock 中 Anthropic Claude 3.5 Sonnet 基礎模型的存取權。如需說明,請參閱新增或移除對 Amazon Bedrock 基礎模型的存取權。 | 一般 AWS |
任務 | 描述 | 所需的技能 |
---|---|---|
複製儲存庫。 | 輸入下列命令,從 GitHub 複製 organizations-policy-pipeline
| DevOps 工程師 |
定義您的部署方法。 |
| DevOps 工程師 |
部署管道。 |
| DevOps 工程師,Terraform |
連接遠端儲存庫。 | 在上一個步驟中,Terraform 建立了與第三方儲存庫的 CodeConnections 連線。在AWS 開發人員工具主控台 | AWS DevOps |
訂閱 Amazon SNS 主題。 | Terraform 已建立 Amazon SNS 主題。將端點訂閱至主題並確認訂閱,讓核准者收到管道中待核准動作的通知。如需說明,請參閱建立 Amazon SNS 主題的訂閱。 | 一般 AWS |
任務 | 描述 | 所需的技能 |
---|---|---|
填入遠端儲存庫。 | 從複製的儲存庫,將 | DevOps 工程師 |
定義您的環境。 |
| DevOps 工程師 |
定義您的護欄。 |
| DevOps 工程師 |
定義您的政策。 |
| DevOps 工程師 |
任務 | 描述 | 所需的技能 |
---|---|---|
設定資訊清單檔案。 |
| DevOps 工程師 |
啟動管道。 | 遞交變更並推送至您在 | DevOps 工程師 |
核准變更。 |
| 一般 AWS、政策核准者 |
驗證部署。 |
| 一般 AWS |
故障診斷
問題 | 解決方案 |
---|---|
管道 | 如果
|
管道 | 如果護欄或政策定義中有任何錯誤,「在驗證與計劃階段期間 IAM Access Analyzer 中尋找」訊息會顯示在管道輸出中。此模式使用 IAM Access Analyzer 來驗證最終政策。請執行下列操作:
|
相關資源
JSON 政策元素參考 (IAM 文件)
資源控制政策 (AWS Organizations 文件)
服務控制政策 (AWS Organizations 文件)
新增或移除對 Amazon Bedrock 基礎模型的存取權 (Amazon Bedrock 文件)
在 CodePipeline (CodePipeline 文件) 中核准或拒絕核准動作 CodePipeline
其他資訊
以資源為基礎的委派政策範例
以下是 的範例資源型委派政策 AWS Organizations。它允許委派的管理帳戶管理組織的 SCPs RCPs。在下列範例政策中,將 <MEMBER_ACCOUNT_ID>
取代為您部署政策管理管道的帳戶 ID。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegationToAudit", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<MEMBER_ACCOUNT_ID>:root" }, "Action": [ "organizations:ListTargetsForPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:AttachPolicy", "organizations:DetachPolicy", "organizations:DisablePolicyType", "organizations:EnablePolicyType", "organizations:UpdatePolicy", "organizations:DescribeEffectivePolicy", "organizations:DescribePolicy", "organizations:DescribeResourcePolicy" ], "Resource": "*" } ] }
將現有政策遷移至管道
如果您有要透過此管道遷移和管理的現有 SCPs 或 RCPs,您可以使用程式碼儲存庫 sample-repository/utils
資料夾中的 Python 指令碼。這些指令碼包括:
check-if-scp-exists-in-env.py
– 此指令碼會檢查指定的政策是否適用於您在environments.json
檔案中定義的特定環境中的任何目標。輸入下列命令來執行此指令碼:python3 check-if-scp-exists-in-env.py \ --policy-type <POLICY_TYPE> \ --policy-name <POLICY_NAME> \ --env-id <ENV_ID>
在此命令中取代以下內容:
<POLICY_TYPE>
是scp
或rcp
<POLICY_NAME>
是 SCP 或 RCP 的名稱<ENV_ID>
是您在environments.json
檔案中定義的環境 ID
create-environments.py
– 此指令碼會根據您環境中目前的 SCPs和 RCPs 建立 environment.json 檔案。它不包括透過 部署的政策 AWS Control Tower。輸入下列命令來執行此指令碼,其中<POLICY_TYPE>
為scp
或rcp
:python create-environments.py --policy-type <POLICY_TYPE>
verify-policies-capacity.py
– 此指令碼會檢查您定義的每個環境,以判斷每個 AWS Organizations 政策相關配額的剩餘容量。您可以定義要在environments.json
檔案中檢查的環境。輸入下列命令來執行此指令碼,其中<POLICY_TYPE>
為scp
或rcp
:python verify-policies-capacity.py --policy-type <POLICY_TYPE>