实战指南:定义、计划、分配与版本管理)
【免费下载链接】context-hub项目地址https://gitcode.com/gh_mirrors/co/context-hub点击查看免费下载导读azure-mgmt-resource-policy是 Azure Resource ManagerARM管理平面上的 Azure Policy Python SDK用于以编程方式创建自定义策略定义、在订阅/资源组/资源/管理组各作用域下分配策略与计划Initiative、管理策略集定义以及查看定义版本。本文以仓库中维护的 mgmt-resource-policy Python 文档 为主体结合同仓库的 Azure 生态文档如 Policy Insights SDK 指南与 Context Hub 内容规范系统讲解安装、认证、作用域处理、核心工作流与常见陷阱读完即可上手完成定义—计划—分配—版本管理的完整治理链路。这个包是做什么的azure-mgmt-resource-policy是 Azure Policy 的 ARM 管理平面 SDK。当你需要以下能力时使用它创建或更新自定义策略定义policy definitions在订阅、资源组、资源或管理组作用域下分配策略或计划创建策略集定义policy set definitions即计划/Initiative检查策略定义与计划的版本信息访问由PolicyClient暴露的策略专用管理操作主要导入入口from azure.mgmt.resource.policy import PolicyClient需要特别强调的是这是 ARM 管理客户端用于 Azure Policy资源管理而不是用于查询 Policy Insights 的合规结果。合规状态查询、事件查询与修正remediation工作流应使用azure-mgmt-policyinsights仓库中的 Policy Insights 指南 覆盖了policy_states、policy_events、remediations、policy_restrictions等操作组。两个 SDK 的分工是先用mgmt-resource-policy把策略建好并分配出去再用mgmt-policyinsights观察合规结果并执行修正。安装将包与azure-identity一起安装python -m pip install azure-mgmt-resource-policy1.0.0b1 azure-identity常见替代方式uv add azure-mgmt-resource-policy1.0.0b1 azure-identity poetry add azure-mgmt-resource-policy1.0.0b1 azure-identity版本说明依据当前官方公开资料PyPI 当前公开版本为1.0.0b1要求 Python3.9。Azure 官方 Python 包索引同样列出1.0.0b1。Azure 的依赖报告源码树中已出现1.0.0b2因此在锁定比 PyPI 公开页面更新的预发布版本前务必先确认你的环境实际解析到的包版本。azure-identity是必需的配套依赖——仓库中其他 Azure 文档如 mgmt-policyinsights 的常见陷阱一节同样强调只装管理 SDK 而漏装 azure-identity是最常见的错误之一。认证与客户端初始化本地开发认证az login az account set --subscription subscription-id-or-name export AZURE_SUBSCRIPTION_IDsubscription-id服务主体认证export AZURE_TENANT_IDtenant-id export AZURE_CLIENT_IDclient-id export AZURE_CLIENT_SECRETclient-secret export AZURE_SUBSCRIPTION_IDsubscription-id如果还要使用管理组操作export AZURE_MANAGEMENT_GROUP_IDmanagement-group-id基础客户端初始化import os from azure.identity import DefaultAzureCredential from azure.mgmt.resource.policy import PolicyClient subscription_id os.environ[AZURE_SUBSCRIPTION_ID] client PolicyClient( credentialDefaultAzureCredential(), subscription_idsubscription_id, )如果本地脚本只想使用 Azure CLI 登录态import os from azure.identity import AzureCliCredential from azure.mgmt.resource.policy import PolicyClient client PolicyClient( credentialAzureCliCredential(), subscription_idos.environ[AZURE_SUBSCRIPTION_ID], )注意即使后续只调用管理组相关操作构造PolicyClient时subscription_id依然是必填参数详见后文重要陷阱。当前客户端暴露的操作组policy_definitionspolicy_assignmentspolicy_set_definitionspolicy_definition_versionspolicy_set_definition_versionspolicy_tokensdata_policy_manifests从源码结构看这个操作组集合与 Azure SDK 拆分策略一致azure-mgmt-resource-policy从azure-mgmt-resource中拆分出来独立承担 Policy 相关的全部管理操作。作用域Scope处理策略分配与部分查询 API 需要完整的 ARM 作用域字符串。常见模式import os subscription_id os.environ[AZURE_SUBSCRIPTION_ID] management_group_id os.environ[AZURE_MANAGEMENT_GROUP_ID] subscription_scope f/subscriptions/{subscription_id} resource_group_scope ( f/subscriptions/{subscription_id}/resourceGroups/example-rg ) resource_scope ( f{resource_group_scope} /providers/Microsoft.Storage/storageAccounts/examplestorage ) management_group_scope ( f/providers/Microsoft.Management/managementGroups/{management_group_id} )如果作用域字符串格式错误即使认证完全正确SDK 调用也会失败。管理组作用域必须使用完整的/providers/Microsoft.Management/managementGroups/{managementGroup}形式而不是只传组名。常用工作流列出内置策略定义优先使用内置列表 API 复用现成的 Azure Policy而不是直接创建自定义策略for definition in client.policy_definitions.list_built_in( filtercategory eq Storage, top5, ): print(definition.name) print(definition.display_name) print(definition.id)发现目标后可按名称获取单个内置定义first next(client.policy_definitions.list_built_in(top1)) definition client.policy_definitions.get_built_in( policy_definition_namefirst.name ) print(definition.id) print(definition.display_name)在订阅作用域创建自定义策略定义以下示例使用 Azure Policy以编程方式创建策略一文中的存储账户审计规则from azure.mgmt.resource.policy.models import PolicyDefinition definition client.policy_definitions.create_or_update( policy_definition_nameaudit-storage-public-network, parametersPolicyDefinition( policy_typeCustom, modeAll, display_nameAudit Storage Accounts Open to Public Networks, description( Audit storage accounts whose network default action allows public access. ), metadata{category: Storage}, version1.0.0, policy_rule{ if: { allOf: [ { field: type, equals: Microsoft.Storage/storageAccounts, }, { field: ( Microsoft.Storage/storageAccounts/ networkAcls.defaultAction ), equals: Allow, }, ] }, then: {effect: audit}, }, ), ) print(definition.id)关键点解析policy_type自定义策略固定为Custommode决定策略作用的资源类型All表示作用于所有资源类型。policy_rule直接传入规则体if/then结构不要用 REST 风格的顶层properties对象包裹。versionx.y.z形式的语义版本。metadata.category可配合list_built_in(filtercategory eq ...)的过滤模式使用。要在管理组作用域创建同类定义改为调用create_or_update_at_management_group(...)并传入management_group_id。将策略分配到资源组使用返回的定义 ID 与完整作用域字符串from azure.mgmt.resource.policy.models import PolicyAssignment scope ( f/subscriptions/{subscription_id}/resourceGroups/example-rg ) assignment client.policy_assignments.create( scopescope, policy_assignment_nameaudit-storage-public-network, parametersPolicyAssignment( display_nameAudit Storage Accounts Open to Public Networks, descriptionAudit storage accounts in this resource group., policy_definition_iddefinition.id, enforcement_modeDefault, not_scopes[ ( f{scope}/providers/Microsoft.Storage/ storageAccounts/excludedaccount ) ], ), ) print(assignment.id)policy_definition_id指向已创建的definition.id也可以是指向内置定义或计划的 ID。enforcement_modeDefault表示正常强制执行DoNotEnforce可禁用效果但不删除分配。not_scopes排除列表用于豁免个别资源。若分配附加了托管身份identity则必须同时设置PolicyAssignment.location。查看分配生效的版本元数据可配合expand参数assignment client.policy_assignments.get_by_id( policy_assignment_id( f{scope}/providers/Microsoft.Authorization/ policyAssignments/audit-storage-public-network ), expandLatestDefinitionVersion,EffectiveDefinitionVersion, ) print(assignment.latest_definition_version) print(assignment.effective_definition_version)创建计划策略集定义计划把一条或多条策略定义组合成单个可分配对象from azure.mgmt.resource.policy.models import ( PolicyDefinitionReference, PolicySetDefinition, ) initiative client.policy_set_definitions.create_or_update( policy_set_definition_namestorage-guardrails, parametersPolicySetDefinition( policy_typeCustom, display_nameStorage Guardrails, descriptionGroup storage-related governance rules., metadata{category: Storage}, version1.0.0, policy_definitions[ PolicyDefinitionReference( policy_definition_iddefinition.id, policy_definition_reference_idaudit-storage-public-network, ) ], ), ) print(initiative.id)policy_definition_reference_id计划内部对该定义的唯一引用标识后续在 Policy Insights 中对计划分配中的单条定义执行修正remediation时需要用到它参见 mgmt-policyinsights 文档 中关于policy_definition_reference_id的说明。管理组级计划使用create_or_update_at_management_group(...)。列出定义版本当前包对策略定义与计划都提供了一等公民的版本操作for item in client.policy_definition_versions.list( policy_definition_nameaudit-storage-public-network ): print(item.name) print(item.id)for item in client.policy_set_definition_versions.list( policy_set_definition_namestorage-guardrails ): print(item.name) print(item.id)版本操作组还提供内置与管理组变体用于检查非订阅作用域的定义。注意单独的 definition-version 资源期望x.y.z形式的语义版本号。查询数据策略清单Data Policy Manifests如果需要数据资源类型的策略模式元数据使用data_policy_manifestsfor manifest in client.data_policy_manifests.list( filternamespace eq Microsoft.KeyVault.Data ): print(manifest.namespace) print(manifest.resource_type)这类清单描述了 Azure 数据资源如 KeyVault 数据平面上可用的策略模式信息是数据平面治理场景下的补充查询入口。重要陷阱subscription_id在构造PolicyClient时仍然必填即使之后只调用管理组操作。作用域字符串必须是完整 ARM ID管理组使用/providers/Microsoft.Management/managementGroups/{managementGroup}不能只写组名。使用 SDK 模型类时policy_rule直接作为规则体传入不要包在 REST 风格的顶层properties对象里。PolicyAssignment.location仅在附加托管身份时才必需加了identity就必须同时设置location。分配列表过滤器使用服务端专用表达式如atScope()、atExactScope()、policyDefinitionId eq {value}定义列表过滤器使用如category eq {value}的模式。版本操作期望x.y.z形式的语义版本号。本包属于 Azure Resource Manager 拆分包体系较新的azure-mgmt-resource文档已明确将策略操作归口到azure-mgmt-resource-policy。版本敏感性说明azure-mgmt-resource-policy在当前公开文档中仍处于 beta 阶段。公开的 Azure 包页面当前对齐1.0.0b1而 Azure 依赖报告源码树中已出现1.0.0b2。如果项目从内部或预发布源固定版本先核实实际可用的版本再照抄示例。从azure-mgmt-resource拆分对迁移有影响在当前azure-mgmt-resource 25.x的指引中policy不再被视为主资源管理包的一部分迁移时应将策略相关 import 改为本包。与合规工作流的衔接mgmt-resource-policy只负责策略的建、管、分不负责合规查询。策略分配完成后建议按如下分工组织代码阶段SDK典型操作定义/计划/分配azure-mgmt-resource-policycreate_or_update、create、版本列表合规状态/事件azure-mgmt-policyinsightspolicy_states、policy_events修正作业azure-mgmt-policyinsightsremediations创建前预检azure-mgmt-policyinsightspolicy_restrictions仓库中 mgmt-policyinsights 的 Python 文档 提供了上述后三类的完整示例例如用latest获取当前合规快照、用begin_trigger_subscription_evaluation触发重新评估、以及用CheckRestrictionsRequest在创建资源前检查 Azure Policy 是否会拒绝。文档在仓库中的定位本指南对应的源文件位于 content/azure/docs/mgmt-resource-policy/python/DOC.md属于 Context Hub 内容体系中的多语言文档变体languages: python。其 frontmatter 遵循 Content Guide 的规范versions: 1.0.0b1记录的是包版本对应 PyPI 上的版本号source: maintainer表示信任级别。开发者可以借助 Context Hub CLI 按 ID 获取该文档用法参见 CLI Reference例如chub get azure/mgmt-resource-policy --lang py并可通过chub feedback对文档质量进行反馈帮助维护者持续改进内容详见 Feedback and Annotations。小结azure-mgmt-resource-policy用一套统一的PolicyClient覆盖了 Azure Policy 管理平面的全部核心操作内置与自定义定义、订阅/资源组/资源/管理组四种作用域分配、计划Initiative管理、定义版本与数据策略清单查询。配合azure-mgmt-policyinsights的合规、事件、修正与预检能力即可构建完整的定义—分配—评估—修正治理闭环。使用时牢记三条基线完整 ARM 作用域字符串、现代azure-identity认证credential构造方式、以及不把policy_rule包进properties对象。赞分享【免费下载链接】context-hub项目地址https://gitcode.com/gh_mirrors/co/context-hub点击查看免费下载相关推荐RevokeMsgPatcher 五分钟上手给 PC 版微信、QQ、TIM 装好防撤回补丁并验证RevokeMsgPatcher 五分钟上手给 PC 版微信、QQ、TIM 装好防撤回补丁并验证 群里的通知、工作群里的关键一句等你反应过来就被撤回了聊天Azure Kubernetes Service 管理 SDK for Pythonazure-mgmt-containerservice 40.2.0 实战指南Azure Kubernetes Service 管理 SDK for Python azure mgmt containerservice 40.2.0 实CTF-Wiki 以太坊安全实战未初始化存储指针Uninitialized Storage Pointer漏洞原理与利用CTF Wiki 以太坊安全实战未初始化存储指针Uninitialized Storage Pointer漏洞原理与利用 导读 本文是 CTF Wiki上一篇docker-stacks镜像发布检查清单确保镜像质量与安全下一篇UI-TARS桌面版5分钟快速上手智能GUI自动化彻底告别重复性工作创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考