ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AWS Control Tower 基础场景实战指南:用 SDK for Python 管理 Baseline、Control 与 Landing Zone

AWS Control Tower 基础场景实战指南:用 SDK for Python 管理 Baseline、Control 与 Landing Zone 示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载本篇技术指南以 AWS 官方代码示例仓库 aws-doc-sdk-examples 中的 Control Tower 基础场景scenario为核心介绍如何使用 AWS SDK for PythonBoto3与 AWS Control Tower 及 Control Catalog 服务交互完成基线baseline、控制control和着陆区landing zone的日常治理操作。读完本文你将掌握从列出基线到启用、重置、禁用基线再到启停控制并轮询操作状态的一整套可运行实战流程并能基于仓库源码定位每个 API 调用的底层实现与测试验证。场景总览这个示例做了什么该示例来源于仓库中的 场景说明文档它演示了通过 AWS SDK 与 AWS Control Tower 和 Control Catalog 服务协作的典型流程。AWS Control Tower 帮助你在 AWS 上基于最佳实践搭建并治理安全的多账户环境。示例涵盖四类核心交互列出可用的基线和控制baselines controls。管理基线启用、禁用、重置。操作控制启用、禁用、查询操作状态。与着陆区landing zone交互。仓库中该场景的正式实现位于 python/example_code/controltower核心代码文件包括controltower_wrapper.py封装所有 AWS Control Tower 与 Control Catalog API 调用的ControlTowerWrapper类。scenario_controltower.pyControlTowerScenario类编排完整交互流程。hello/hello_controltower.py入门级 Hello 示例。前置条件与依赖安装根据 Python 实现 README运行前需要按 python 目录 README 准备 AWS 凭证与 Boto3 环境。在虚拟环境中安装依赖python -m pip install -r requirements.txtrequirements.txt 中声明的依赖如下包名最低版本用途boto31.26.79AWS SDK for PythonControl Tower 与 Control Catalog 客户端pytest7.2.1运行单元测试qrcode7.4.2其他示例共用的二维码依赖本示例间接引入pycognito2022.12.0Cognito 相关共用依赖本示例间接引入需要特别注意的是运行基线baseline和控件control管理部分之前必须在账户中预先设置好着陆区landing zone。示例文档建议按照 AWS Control Tower 快速入门指引完成设置。若没有着陆区示例会跳过这些依赖着陆区的操作仅演示列表类只读操作。Hello 示例初始化客户端并列出基线入门示例位于 hello/hello_controltower.py核心思路是创建 Boto3 的controltower客户端通过分页器调用list_baselines并打印返回的基线名称def hello_controltower(controltower_client) - None: print(Hello, AWS Control Tower! Lets list available baselines:\n) paginator controltower_client.get_paginator(list_baselines) page_iterator paginator.paginate() baseline_names [] try: for page in page_iterator: for baseline in page[baselines]: baseline_names.append(baseline[name]) print(f{len(baseline_names)} baseline(s) retrieved.) for baseline_name in baseline_names: print(f\t{baseline_name}) except controltower_client.exceptions.AccessDeniedException: print(Access denied. Please ensure you have the necessary permissions.)运行方式python hello/hello_controltower.py这里使用了 Boto3 的分页器paginator机制自动遍历list_baselines的多个响应页避免手动处理NextToken。入口处直接通过boto3.client(controltower)使用共享凭证文件中的默认配置。完整场景ControlTowerScenario 的执行流程完整场景由 scenario_controltower.py 中的ControlTowerScenario类驱动启动命令为python scenario_controltower.py场景类的初始化需要两个客户端一个封装 Control Tower/Control Catalog 调用的ControlTowerWrapper以及一个 Boto3 Organizations 客户端用于检查并创建组织、Sandbox OUclass ControlTowerScenario: IDENTITY_CENTER_BASELINE baseline/LN25R72TTG6IGPTQ def __init__(self, controltower_wrapper, org_client): self.controltower_wrapper controltower_wrapper self.org_client org_client ...main入口按如下方式装配并运行if __name__ __main__: org boto3.client(organizations) control_tower_wrapper ControlTowerWrapper.from_client() scenario ControlTowerScenario(control_tower_wrapper, org) scenario.run_scenario()其中ControlTowerWrapper.from_client()是一个类方法一次性创建controltower与controlcatalog两个 Boto3 客户端classmethod def from_client(cls): controltower_client boto3.client(controltower) controlcatalog_client boto3.client(controlcatalog) return cls(controltower_client, controlcatalog_client)Setup 阶段确定着陆区并准备组织场景首先通过 STS 获取当前账户 ID然后调用list_landing_zones()列出已有着陆区如果存在着陆区交互式询问用户是否直接使用列表中的第一个着陆区或输入其他着陆区 ID。如果不存在着陆区则提示用户参考 AWS Control Tower 控制台快速入门文档自行搭建并跳过依赖着陆区的后续操作。选定着陆区后调用setup_organization()完成组织准备其逻辑为调用 Organizations 的describe_organization检查当前账户是否已加入组织若抛出AWSOrganizationsNotInUseException则调用create_organization(FeatureSetALL)新建组织并通过organization_activewaiter 等待组织就绪每 5 秒探测一次最多 12 次。通过list_roots获取根 OU然后在根下搜索名为Sandbox的 OU若不存在则调用create_organizational_unit创建并等待organizational_unit_active。最终返回 Sandbox OU 的 ID同时将 OU 的 ARN 记录到self.ou_arn作为后续启用基线和控件的目标标识。从该实现可以看到基线/控件的启用目标是一个 OU ARN而非账户 ARN——这正是 Control Tower 治理模型对组织单元施加规则的体现。Baselines 阶段列出、启用、重置与禁用此阶段贯穿了基线的完整生命周期调用list_baselines()列出全部基线并在其中识别出名为AWSControlTowerBaseline的治理基线。若已使用着陆区调用list_enabled_baselines()列出当前已启用的基线同时检查其中是否包含类常量IDENTITY_CENTER_BASELINE baseline/LN25R72TTG6IGPTQ对应的 IAM Identity Center 基线——若已启用其 ARN 必须作为参数传给其他基线以保证治理一致性。交互询问后以基线版本5.0调用enable_baseline(self.ou_arn, ic_baseline_arn, baseline_arn, 5.0)启用 Control Tower 基线。随后依次询问是否重置reset_enabled_baseline与禁用disable_baseline禁用后为了让后续控件操作仍处于可治理状态示例会再次启用该基线。Controls 阶段从 Control Catalog 列出并操作控件控件管理部分与 Control Catalog 服务深度结合调用list_controls()从 Control Catalog 分页拉取全部控件打印前 5 个的名称与 ARN。若存在着陆区调用list_enabled_controls(target_ou)列出该 OU 上已启用的控件。从 Control Catalog 结果中挑选一个尚未启用的控件通过已启用控件 ARN 集合做差集得到交互询问后调用enable_control(control_arn, target_ou)启用。最后交互询问是否调用disable_control(control_arn, target_ou)禁用该控件。底层实现剖析ControlTowerWrapper 与操作状态轮询controltower_wrapper.py 中的ControlTowerWrapper将全部 API 调用封装为可复用方法下表汇总了各方法对应的底层 API 与关键逻辑封装方法底层 Boto3 API服务关键说明list_baselineslist_baselinesControl Tower分页聚合baselines字段enable_baselineenable_baselineControl Tower参数含baselineIdentifier、baselineVersion、targetIdentifier及可选的 Identity Center 参数get_baseline_operationget_baseline_operationControl Tower返回baselineOperation.statusreset_enabled_baselinereset_enabled_baselineControl Tower入参为已启用基线的标识符disable_baselinedisable_baselineControl Tower入参为已启用基线的标识符list_enabled_baselineslist_enabled_baselinesControl Tower分页聚合enabledBaselineslist_landing_zoneslist_landing_zonesControl Tower分页聚合landingZoneslist_controlslist_controlsControl Catalog分页聚合Controls注意大小写差异enable_controlenable_controlControl Tower入参controlIdentifiertargetIdentifierdisable_controldisable_controlControl Tower入参同上get_control_operationget_control_operationControl Tower返回controlOperation.statuslist_enabled_controlslist_enabled_controlsControl Tower按targetIdentifier分页聚合enabledControls异步操作的等待模式轮询直到 SUCCEEDED/FAILEDControl Tower 的基线/控件操作是异步的enable_baseline、reset_enabled_baseline、disable_baseline、enable_control、disable_control都会先拿到一个operationIdentifier然后进入统一的轮询循环while True: status self.get_baseline_operation(operation_id) print(fBaseline operation status: {status}) if status in [SUCCEEDED, FAILED]: break time.sleep(30)即每 30 秒查询一次操作状态直到返回SUCCEEDED或FAILED才继续。这是 Control Tower 类异步治理操作的通用处理范式可以直接复用到其他治理工作流中。幂等与异常处理设计源码中体现了对真实运行环境的充分容错基线已启用enable_baseline捕获ValidationException当错误消息包含already enabled时仅打印提示并返回None场景据此回退查找已启用的基线 ARN。控件已启用enable_control同样对already enabled做幂等处理若抛出ResourceNotFoundException且消息包含not registered with AWS Control Tower则明确提示必须先启用 Control Tower 才能操作控件。禁用冲突disable_baseline捕获ConflictException并跳过禁用步骤避免因资源状态冲突导致整个场景中断。权限问题多个 list 方法专门处理AccessDeniedException提示用户检查 IAM 权限是否符合最小权限原则。测试验证如何确认场景按预期执行仓库为该场景提供了完整的单元测试位于 test/test_scenario_run.py 与 test/conftest.py。测试使用仓库自带的 stubber 机制make_stubber在不真正创建 AWS 资源的前提下模拟 Control Tower、Control Catalog、Organizations 三个服务的响应。MockManager.setup_stubs依次 stub 了如下调用序列恰好对应场景的执行顺序list_landing_zones→describe_organization→list_roots→list_organizational_units_for_parent→list_baselines→list_enabled_baselines→enable_baseline→get_baseline_operation(SUCCEEDED) →reset_enabled_baseline→get_baseline_operation→disable_baseline→get_baseline_operation→enable_baseline重新启用→get_baseline_operation→list_controls→list_enabled_controls→enable_control→get_control_operation→disable_control→get_control_operation。同时通过input_mocker.mock_answers依次注入 6 个y回答模拟用户在交互提示下全部选择是。最终断言标准输出包含This concludes the example scenario.验证整个流程完整走通。仓库还提供一个标记为integ的集成测试版本用于在真实 AWS 环境中以不使用着陆区路径运行。运行注意事项与成本提示会产生 AWS 费用运行示例与测试都可能产生 AWS 账户费用建议参考 AWS 定价与免费套餐信息评估成本。最小权限原则为运行代码的 IAM 角色授予尽可能少、仅覆盖本场景所需 APIcontroltower:*、controlcatalog:ListControls、organizations:*中必要项、sts:GetCallerIdentity的权限。区域可用性示例并非在所有 AWS 区域经过测试需确认所用区域支持 Control Tower 服务。着陆区依赖基线启用/重置/禁用与控件启停均依赖已存在的着陆区与 Sandbox OU仅查看类操作列出基线、列出控件不需要着陆区。更多资源场景总说明scenarios/basics/controltower/README.mdPython 实现说明python/example_code/controltower/README.md封装类源码controltower_wrapper.py场景编排源码scenario_controltower.py入门示例hello_controltower.py单元测试test_scenario_run.py赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐AWS Control Tower 治理实战基于 AWS SDK for Java 2.x 的 Landing Zone、Baseline 与 Control 全流程操作指南AWS Control Tower 治理实战基于 AWS SDK for Java 2.x 的 Landing Zone、Baseline 与 Control示例工程教程后端使用 AWS SDK for SAP ABAP 管理 AWS Control TowerBaseline、Control 与 Landing Zone 实战指南使用 AWS SDK for SAP ABAP 管理 AWS Control TowerBaseline、Control 与 Landing Zone 实战指示例工程教程后端AWS Control Tower 治理实战使用 SDK for PythonBoto3管理着陆区、基线Baseline与治理控制ControlAWS Control Tower 治理实战使用 SDK for PythonBoto3管理着陆区、基线Baseline与治理控制Control示例工程教程后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表