azure - 如何找到 azure policy 的流量
问题描述
我正在创建一个 Azure 策略,在很多帮助下我能够获得以下 json 策略,但它的行为方式与我所期望的不同。
根据我的理解(如果我错了,请纠正我):Azure Policy 基本上是一个 [if] 和 [then] 语句。在 [if] 之后,所有标签都出现在图片中,说明了这一点。如果条件 [Type : Resource Group] 匹配且 [Tag Name Env != prod ] 和 [Tag Name OS != windows ] [then] 拒绝。
但上述策略的结果是:如果我在单个 ResourceGroup 中指定 [Env = prod 并指定 OS = Linux],则该策略允许用户创建资源组。这不应该是政策的结果。
预期的结果应该是:
场景 1(策略行为正确):如果我只指定 [Env = prod] 那么它应该允许我创建 ResourceGroup 或者如果我指定其他任何内容则阻止我
场景 2(策略行为正确):[OS = Windows] 那么它应该允许我创建 RG,或者如果我指定其他任何内容,则阻止我。
场景 3(策略行为不正确):[env = prod and OS = linux] 那么它应该阻止我,因为第二个 TAG 不正确。
{
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"field": "tags.Env",
"notEquals": "Prod"
},
{
"field": "tags.OS",
"notEquals": "windows"
}
]
},
"then": { "effect": "deny" }
}
解决方案
您提供的策略定义按预期工作。只有在tags.Env != "Prod" && tags.OS != "Windows"
. 如果你翻转这个条件,你可以看到它将允许任何资源组 where tags.Env == "Prod" || tags.OS == "Windows"
,这就是你所经历的。
以下策略定义将拒绝任何没有预期标签的资源组:
{
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
},
{
"anyOf": [
{
"field": "tags.Env",
"notEquals": "Prod"
},
{
"field": "tags.OS",
"notEquals": "windows"
}
]
}
]
},
"then": {
"effect": "deny"
}
}
推荐阅读
- python-3.x - voronoi 镶嵌的 Delaunay 三角剖分
- html - 是否可以创建一个多行?
- postgresql - postgresql 从同一个表中选择行两次
- reactjs - 类型错误:无法读取未定义的属性(读取“目标”)
- r - 特别是使用 mlrMBO 包进行优化时,如何显示其他准确度指标?
- api - 在 PowerBI 中,如何在附加每个 API 查询之前添加“SourceID”列?
- typescript - 在同一个打字稿函数中指定泛型并推断泛型
- javascript - How to make a GET call to api.github with Express server
- php - annotations.yaml 中控制器的多个子目录
- elasticsearch - 优化从我的应用程序收集日志的旧索引