如何制定策略为组织内新建资源自动添加CreatedBy:AccountID标签
原生Azure Policy暂不支持直接在策略表达式中获取资源创建者的Account ID,你当前策略中[????]的位置没有可用的内置模板函数可以直接返回创建者身份信息。你观察到AKS资源自带的CreatedBy标签,是AKS资源提供程序在服务侧自主写入的专属标识,并非通用策略能力实现。
可行实现方案
方案1:Activity Log + 无服务器服务自动打标(最推荐)
该方案可以100%覆盖所有资源创建场景,不会被绕过:
- 配置Azure活动日志警报,触发规则匹配
成功创建资源类事件 - 警报触发后调用Azure Function/自动化 runbook,从事件的
claims字段中提取创建者身份属性:oid字段值即为用户/服务主体在AAD中的Account ID- 可按需同时提取
upn、name等更易读的身份属性
- 调用ARM资源更新接口,为对应资源写入CreatedBy标签值
- 配置Azure活动日志警报,触发规则匹配
方案2:部署流程嵌入(适合统一使用基础设施即代码的场景)
如果组织内所有资源都通过统一的CI/CD流程部署,可以在部署模板(ARM/Bicep/Terraform)中加入参数,在部署时自动注入当前执行部署的身份ID,配合你现有的策略做合规校验。
现有策略优化建议
你当前策略的if条件使用allOf规则,只有当两个标签同时不存在时才会补加标签,建议修改为anyOf,实现缺哪个标签补哪个的效果:
{ "mode": "All", "policyRule": { "if": { "anyOf": [ { "field": "tags['CreatedOnDate']", "exists": "false" }, { "field": "tags['CreatedBy']", "exists": "false" } ] }, "then": { "effect": "append", "details": [ { "field": "tags['CreatedOnDate']", "value": "[utcNow()]" } ] } }, "parameters": {} }
注意上述策略中移除了CreatedBy的append规则,因为该字段无法通过原生策略直接赋值,需要配合前述的活动日志方案写入。
内容的提问来源于stack exchange,提问作者Yahav
相关产品推荐
相关产品推荐

