
示例工程教程后端【免费下载链接】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点击查看免费下载本指南以 python/example_code/auditmanager/README.md 为骨架结合同目录下的三个完整 Python 脚本及其单元测试系统讲解如何用 AWS SDK for PythonBoto3完成 Audit Manager 的三大典型任务从 AWS Config 合规包生成自定义控制与框架、聚合 Security Hub 控制项创建框架、以及按单日证据生成评估报告。读完本文你将掌握 Audit Manager 核心 API 的调用方式、分页与轮询的工程处理以及基于 botocore Stubber 的离线测试方法。概述Audit Manager 与示例定位AWS Audit Manager 帮助用户持续审计 AWS 使用情况简化对法规与行业标准的风险与合规管理。它围绕评估assessment—控制control—框架framework—证据evidence—报告report这一套术语体系运转框架是控制项的集合控制项绑定到具体数据源如 AWS Config 规则、Security Hub 标准控制评估过程收集证据最终产出可下载的评估报告。在 python/example_code/auditmanager 目录下仓库提供了三个单服务场景Scenario示例每个示例通过多次调用 Audit Manager以及 AWS ConfigAPI 完成一项具体任务场景脚本核心目标从 AWS Config 合规包创建自定义框架framework_from_conformance_pack.py把合规包中的托管规则批量转成自定义控制并组装成框架创建包含 Security Hub 控制的自定义框架security_hub_custom_framework.py枚举所有以 Security Hub 为数据源的标准控制并建成一个框架创建评估报告create_assessment_report.py为指定评估生成仅含单日证据的评估报告并下载这三个脚本都遵循仓库统一的结构类封装业务逻辑、run_demo()作为入口、if __name__ __main__支持命令行直接运行并且每个场景都有对应的单元测试文件。下面先从环境准备开始再逐个场景深入。环境准备与运行先决条件基础前置条件按照 python/README.md 的约定你需要一个 AWS 账户并按 AWS 共享配置与凭据参考指南配置好默认凭据与默认 RegionPython 3.6.0 或更高版本。进入示例目录后建议先创建并激活虚拟环境python -m venv .venv source .venv/bin/activate # Linux、macOS 或 UnixWindows 使用 .venv\Scripts\activate然后安装依赖python -m pip install -r requirements.txtrequirements.txt 声明了两个包boto31.26.79AWS SDK for Python 运行时与pytest7.2.1跑单元测试用。安装完成后各场景脚本可直接运行python framework_from_conformance_pack.py python security_hub_custom_framework.py python create_assessment_report.pyIAM 权限与场景级前置条件原 README 强调了两类准备IAM 最小权限为运行示例的身份授予适当权限。Audit Manager 官方建议参考允许完全管理员访问与允许管理访问两类策略示例同时遵循最小权限原则只授予完成任务所需的最小权限集。场景专属前置条件创建自定义控制时若以AWS Security Hub为数据源需要先启用 Security Hub并启用全部安全标准从AWS Config 合规包创建自定义控制与框架前需要先启用 AWS Config并部署想要使用的合规包。费用提醒运行示例脚本以及运行测试都可能产生 AWS 账户费用例如创建控制、框架、评估报告本身以及其背后的审计资源。本文所有示例均非在全部 AWS 区域测试过请确认目标区域可用。场景一从 AWS Config 合规包创建自定义框架任务拆解framework_from_conformance_pack.py 演示如下三步流程获取 AWS Config 合规包列表并让用户选择一个合规包为该合规包内的每条托管规则在 Audit Manager 中创建一个自定义控制用这些控制创建一个 Audit Manager 自定义框架。脚本以交互方式运行先打印当前账户下所有合规包名称再要求输入ConformancePackNamepython framework_from_conformance_pack.py源码级解析ConformancePack 类ConformancePack类构造函数接收两个客户端config_clientboto3 的config客户端和auditmanager_clientboto3 的auditmanager客户端将三个步骤封装为三个方法。第一步get_conformance_pack()调用 AWS Config 的describe_conformance_packs()用集合推导式提取全部ConformancePackName打印给用户随后input()读取选择并做校验——若输入不在列表中则抛出Exception(Invalid conformance pack)。若 boto3 调用失败ClientError则记录日志并重新抛出由上层run_demo()终止。第二步create_custom_controls(cpack_name)是核心转换逻辑rules_in_pack self.config_client.describe_conformance_pack_compliance( ConformancePackNamecpack_name ) for rule in rules_in_pack.get(ConformancePackRuleComplianceList): config_rule self.config_client.describe_config_rules( ConfigRuleNames[rule.get(ConfigRuleName)] ) source_id ( config_rule.get(ConfigRules)[0] .get(Source, {}) .get(SourceIdentifier) ) custom_control self.auditmanager_client.create_control( nameConfig- rule.get(ConfigRuleName), controlMappingSources[ { sourceName: ConfigRule, sourceSetUpOption: System_Controls_Mapping, sourceType: AWS_Config, sourceKeyword: { keywordInputType: SELECT_FROM_LIST, keywordValue: source_id, }, } ], ).get(control, {}) am_controls.append({id: custom_control.get(id)})这里的调用链值得注意describe_conformance_pack_compliance()返回ConformancePackRuleComplianceList给出合规包内每条规则的ConfigRuleName对每条规则再调用describe_config_rules()从其Source.SourceIdentifier中取出托管规则标识如AWS_EC2_EIP_NO_PUBLIC_IP之类的托管规则 ID调用create_control()创建自定义控制。controlMappingSources是关键参数sourceType固定为AWS_ConfigsourceSetUpOption为System_Controls_MappingsourceKeyword用SELECT_FROM_LIST输入类型承载source_id——这正是把 Audit Manager 控制绑定到具体 AWS Config 托管规则的映射方式控制创建成功后脚本只保留{id: ...}存入列表供下一步组装框架。第三步create_custom_framework(cpack_name, am_control_ids)调用create_assessment_framework()组装框架custom_framework self.auditmanager_client.create_assessment_framework( nameConfig-Conformance-pack- cpack_name, controlSets[{name: cpack_name, controls: am_control_ids}], )框架名称以Config-Conformance-pack-为前缀拼接合规包名controlSets中 control set 名直接用合规包名controls列表即为上一步生成的控制 ID 集合。成功后打印框架名称与 ID。run_demo()的编排顺序正是原 README 描述的三步get_conformance_pack()→create_custom_controls()→create_custom_framework()。测试验证test/test_framework_from_conformance_pack.py 覆盖了三个方法的正常与异常路径test_get_conformance_pack通过参数化注入合法名、非法名与异常码验证合法输入返回合规包名、非法输入抛Exception、ClientError被重新抛出test_create_custom_controls先桩测describe_conformance_pack_compliance与每条规则的describe_config_rules再桩测对应的create_control最终断言返回的控制 ID 列表与预期一致test_create_custom_framework验证create_assessment_framework收到Config-Conformance-pack-名称与对应 control set 结构。这些测试使用的桩函数定义在 python/test_tools/auditmanager_stubber.py 中stub_describe_conformance_packs、stub_describe_conformance_pack_compliance、stub_describe_config_rules位于 Config 的 stubber 中而stub_create_control、stub_create_assessment_framework则封装于AuditManagerStubber桩测时会精确比对expected_params中的controlMappingSources结构从测试侧印证了上面解析的参数约定。场景二创建包含 Security Hub 控制项的自定义框架任务拆解security_hub_custom_framework.py 演示两步流程获取所有以 Security Hub 作为数据源的标准控制standard controls将这些控制放进一个自定义框架。运行方式python security_hub_custom_framework.py源码级解析SecurityHub 类SecurityHub类只依赖auditmanager_client两个方法对应两个步骤。get_sechub_controls()实现分页扫描全部标准控制再逐个过滤出数据源为 Security Hub 的项。关键工程点有三处使用list_controls(controlTypeStandard, maxResults100)分页拉取标准控制元数据controlType参数将查询限定为标准控制若响应携带nextToken则下一页请求带上该 tokenpage计数随翻页递增并打印对每个控制调用get_control(controlId...)获取完整详情list_controls返回的controlMetadataList只有元数据不含controlSources字段因此必须逐个取详情以AWS Security Hub in control_details.get(controlSources)作为过滤条件命中者将其id收入sechub_control_list。next_token None page 1 while True: if next_token is None: control_list self.auditmanager_client.list_controls( controlTypeStandard, maxResults100 ) else: control_list self.auditmanager_client.list_controls( controlTypeStandard, nextTokennext_token, maxResults100 ) for control in control_list.get(controlMetadataList): control_details self.auditmanager_client.get_control( controlIdcontrol.get(id) ).get(control, {}) if AWS Security Hub in control_details.get(controlSources): sechub_control_list.append({id: control_details.get(id)}) next_token control_list.get(nextToken) if not next_token: break page 1create_custom_framework(am_controls)与场景一类似调用create_assessment_framework(nameAll Security Hub Controls Framework, controlSets[{name: Security-Hub, controls: am_controls}])框架名固定为All Security Hub Controls Frameworkcontrol set 名为Security-Hub。成功后打印框架名称与 ID。测试验证test/test_security_hub_custom_framework.py 的test_get_sechub_controls通过stub_runner参数化三种分页情形单页、两页带 token、中途出错桩测list_controlscontrolTypeStandard、maxResults100与get_control返回controlSourcesAWS Security Hub断言最终收集到的控制 ID 与分页次数乘积一致test_create_custom_framework则验证All Security Hub Controls Framework与Security-Hubcontrol set 的入参结构。同样地stub_list_controls与stub_get_control实现于 auditmanager_stubber.py。场景三创建只含单日证据的评估报告任务拆解create_assessment_report.py 演示如何为指定评估生成一份仅包含某一天证据的评估报告流程包括输入校验、清空既有报告选择、按日期重新圈选证据文件夹、创建报告并轮询状态、最后下载。运行方式python create_assessment_report.py源码级解析AuditReport 类AuditReport类依赖auditmanager_client用五个方法串起整个流水线。get_input()完成交互输入与三重校验输入评估 ID 后先用uuid.UUID()校验其是否为合法 UUID输入证据日期后经dateutil.parser.parse(...).date()校验yyyy-mm-dd格式依赖python-dateutil运行时由 boto3 传递引入调用get_assessment(assessmentId...)确认该评估真实存在不存在时ClientError被捕获并返回(None, None)上层据此跳过后续流程。clear_staging(assessment_uuid, evidence_date)负责清场分页调用get_evidence_folders_by_assessment(assessmentId..., maxResults1000)同样支持nextToken翻页对每个证据文件夹依据assessmentReportSelectionCount与totalEvidence的关系做两种处理若assessmentReportSelectionCount totalEvidence文件夹整体被选入报告调用disassociate_assessment_report_evidence_folder()将整个文件夹移出报告若部分证据被选中assessmentReportSelectionCount 0调用get_evidence_by_evidence_folder()拉取该文件夹内全部证据筛出assessmentReportSelection Yes的证据 ID再用batch_disassociate_assessment_report_evidence()批量取消选中。同时方法会把名称等于目标日期的文件夹 ID 收集进interested_folder_id_list即单日证据的候选集合并返回。add_folder_to_staging(assessment_uuid, folder_id_list)对目标日期对应的每个证据文件夹调用associate_assessment_report_evidence_folder()把它们重新纳入报告选择范围。get_report(assessment_uuid)完成创建、轮询、下载三段report self.auditmanager_client.create_assessment_report( nameReportViaScript, descriptiontesting, assessmentIdstr(assessment_uuid), ) if self._is_report_generated(report.get(assessmentReport).get(id)): report_url self.auditmanager_client.get_assessment_report_url( assessmentReportIdreport.get(assessmentReport).get(id), assessmentIdstr(assessment_uuid), ) urllib.request.urlretrieve( report_url.get(preSignedUrl).get(link), report_url.get(preSignedUrl).get(hyperlinkName), )_is_report_generated(assessment_report_id)是状态轮询实现每 5 秒调用一次list_assessment_reports(maxResults1)检查最新报告的 ID 是否匹配且状态为COMPLETE累计等待超过 900 秒15 分钟仍未完成则返回False脚本会提示改到控制台手动下载报告。下载借助get_assessment_report_url返回的预签名 URL通过urllib.request.urlretrieve落盘为hyperlinkName命名的文件。测试验证test/test_create_assessment_report.py 覆盖面很全test_get_input用参数化覆盖非法 UUID、非法日期、合法输入与get_assessment抛错四类情况test_clear_staging覆盖空文件夹列表、整文件夹取消、部分证据批量取消、分页两个 token以及TestException中断等路径test_add_folder_to_staging与test_get_report分别桩测关联文件夹、创建报告→轮询stub_list_assessment_reports直接返回COMPLETE状态→获取预签名 URL 的完整链路并monkeypatch掉urllib.request.urlretrieve避免真实下载。测试体系基于 botocore Stubber 的离线验证三个场景的单元测试都放在 test/ 目录下。测试基础设施有两个关键约定conftest.py 将../../即python/加入模块搜索路径再from test_tools.fixtures.common import *引入仓库公共测试夹具——make_stubber、stub_runner、monkeypatch等能力都来自 python/test_toolsAudit Manager 相关的桩函数集中封装在 python/test_tools/auditmanager_stubber.py 的AuditManagerStubber类中包括stub_get_assessment、stub_get_evidence_folders_by_assessment、stub_disassociate_assessment_report_evidence_folder、stub_get_evidence_by_evidence_folder、stub_batch_disassociate_assessment_report_evidence、stub_associate_assessment_report_evidence_folder、stub_create_assessment_report、stub_list_assessment_reports、stub_get_assessment_report_url、stub_create_control、stub_create_assessment_framework、stub_list_controls、stub_get_control等。桩测会严格比对请求参数expected_params与响应结构这正是测试能精准验证上面各场景 API 调用参数的原因。单元测试使用桩响应请求不会真正发往 AWS因此不会产生账户费用。按 python/README.md 的说明在示例目录下运行python -m pytest -m not integ即可执行全部单元测试集成测试-m integ会真实创建/销毁资源并可能产生费用务必谨慎。运行与排查要点小结交互式输入场景一要求输入合规包名且会校验其必须在describe_conformance_packs返回的列表中场景三要求输入合法 UUID 形式的评估 ID 与yyyy-mm-dd格式日期输入不合法时脚本直接跳过后续流程。分页处理list_controls、get_evidence_folders_by_assessment均以nextToken循环直至返回空 token代码中分别以maxResults100与maxResults1000控制页大小。状态轮询评估报告生成是异步过程示例采用 5 秒间隔、最长 900 秒的轮询配合list_assessment_reports的COMPLETE状态判断。资源命名规律场景一控制名为Config-规则名、框架名为Config-Conformance-pack-合规包名场景二框架名为All Security Hub Controls Framework场景三报告名为ReportViaScript方便在控制台回溯识别。依赖与版本脚本要求boto31.26.79Audit Manager 客户端支持list_controls/get_control等 API 的版本基线、pytest7.2.1。扩展阅读阅读 python/example_code/auditmanager/README.md 可查看场景的官方编排说明python/test_tools/auditmanager_stubber.py 集中展示了 Audit Manager 全部被用到 API 的请求/响应结构python/test_tools 提供了make_stubber、stub_runner等通用测试夹具python/README.md 说明了虚拟环境、依赖安装、单元/集成测试及 Docker 镜像运行的统一约定AWS 官方还提供 Audit Manager 用户指南与 API Reference含 Boto3 Audit Manager 服务参考其中对什么是 Audit Manager概念与术语设置 Audit Manager以及身份策略示例等章节可作为理解本仓库示例术语体系的背景资料。最后再次提醒这些示例会真实创建控制、框架与评估报告等资源运行与测试均可能产生 AWS 账户费用建议使用最小权限 IAM 身份并在非生产账户或受控环境中执行。Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.SPDX-License-Identifier: Apache-2.0赞分享示例工程教程后端【免费下载链接】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点击查看免费下载相关推荐Windows风扇控制终极方案如何用FanControl实现精准温控与静音平衡Windows风扇控制终极方案如何用FanControl实现精准温控与静音平衡 面对电脑风扇噪音与散热效率的两难选择FanControl为Windows用户桌面应用智能硬件Floci AWS Config 服务实战指南配置规则、合规评估与状态模拟Floci AWS Config 服务实战指南配置规则、合规评估与状态模拟 本篇技术指南以 Floci 开源仓库的 docs/services/config.gVisor安全合规评估报告gVisor安全合规评估报告 执行摘要 评估日期: {{date}} 评估版本: gVisor {{version}} 合规状态: {{status}} 详细发云原生容器运行时操作系统应用安全上一篇国家中小学智慧教育平台电子课本下载终极指南三步获取PDF教材的免费工具下一篇SkeletonView入门指南优雅的iOS骨架屏加载动画创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考