1

我需要停止在我的 azure 订阅上创建所有资源,除了:

  • 逻辑应用
  • 仪表板
  • 解决方案

我现在能想到的唯一方法是通过 Azure Policy,有人知道如何编写这样的策略吗?

4

4 回答 4

2

好吧,您基本上需要使用notanyof结合deny

"if": {
    "not": {
        "anyOf": [
            {
                "field": "type",
                "equals": "Microsoft.Logic/workflows"
            },
            {
                "field": "type",
                "equals": "Microsoft.OperationsManagement/solutions"
            },
            {
                "field": "type",
                "equals": "Microsoft.Portal/dashboards"
            }
        ]
    }
},
"then": {
    "effect": "Deny"
}

资源类型可能是错误的,但我不确定你到底在追求什么。

于 2019-08-07T12:29:13.507 回答
1

策略需要定义(编写策略逻辑的位置)和策略分配(将定义分配给范围的位置)。策略定义可以分组为策略倡议(AKA 策略集定义)。这些倡议也可以分配给一个范围。范围可以在资源组级别、订阅级别或管理组级别定义。

通过首先创建策略定义然后分配它,可以通过门户编写和分配策略。通过门户网站完成时,IMO 可能会有点麻烦。或者它们可以通过 ARM 模板进行部署。不幸的是,门户模板部署当前未配置为在资源组级别 (08/29/2019) 以外的任何位置进行部署。但是通过部署 API 编写和部署要容易得多。我使用邮递员来做到这一点。

订阅范围(如您所描述的)策略部署可以通过 PUT 到以下 URI 完成。

https://management.azure.com/subscriptions/:subscriptionId/providers/Microsoft.Resources/deployments/mypolicydeployment?api-version=2019-05-01

其中 :subscriptionId 是您的实际订阅 ID 的 Postman 参数表示法。

您将需要获取不记名令牌以对 PUT 请求进行身份验证,并且该用户必须具有部署和分配策略的权限。这是另一个主题,您可以在此处了解更多信息 ( https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code )。

此外,我在 PUT 请求中提供了一个 "Content-Type" = "application/json" 标头。

我的这是我的身体有效载荷,适用于您的保单。

    {
    "location": "westus2",
   "properties": {
   "mode": "Incremental",
   "template": {
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "subscriptionId": {
            "type": "string"
        }
    },
    "resources": [
        {
            "type": "Microsoft.Authorization/policyDefinitions",
            "name": "my-deny-policy",
            "apiVersion": "2018-05-01",
            "location": "westus2",
            "properties": {
                "displayName": "My Deny Policy",
                "policyType": "Custom",
                "description": "This policy DENYS all resource creation except, Logic Apps, Dashboards, and Solutions.",
                "mode": "All",
                "policyRule": {
                    "if": {
                        "not": {
                            "anyOf": [
                                {
                                    "field": "type",
                                    "equals": "Microsoft.Logic/workflows"
                                },
                                {
                                    "field": "type",
                                    "equals": "Microsoft.OperationsManagement/solutions"
                                },
                                {
                                    "field": "type",
                                    "equals": "Microsoft.Portal/dashboards"
                                }
                            ]
                        }
                    },
                    "then": {
                        "effect": "Deny"
                    }
                }
            }
        },
        {
            "name": "my-policy-assignment",
            "type": "Microsoft.Authorization/policyAssignments",
            "apiVersion": "2018-05-01",
            "location": "westus2",
            "identity": {
                "type": "SystemAssigned"
            },
            "properties": {
                "displayName": "My Policy Assignment",
                "policyDefinitionId": "[concat('/subscriptions/', parameters('subscriptionId'), '/providers/Microsoft.Authorization/policyDefinitions/my-deny-policy')]",
                "scope": "[concat('/subscriptions/', parameters('subscriptionId'), '/')]",
                "notScopes": [],
                "parameters": {},
                "description": "This assignment contains my policy to DENY creation of all resources except logic apps, dashboards, and solutions.",
                "metadata": {}
            },
            "dependsOn": [
                "my-deny-policy"
            ]
        }
    ]
},
"parameters": {
    "subscriptionId": {
        "value": "XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX"
    }
   }
}
}

部署模板包含一个定义,其中包含您描述的策略以及策略分配。策略分配设置为“dependsOn”策略定义。这是因为策略分配取决于要正确部署的定义的存在。否则,将出现您将永远输掉的比赛条件。

某些字段可以分解为参数,就像我对订阅 ID 所做的那样。为了在另一个订阅范围内应用,只需更改参数值并确保您的不记名令牌已获得该订阅的授权。

于 2019-08-29T16:42:19.007 回答
0

仅针对您想要的这 3 个使用“ ACTIONS ”创建自定义 RBAC角色。

此处的策略可以,但取决于用户角色是否能够从订阅中取消分配此类策略。为了防止用户这样做:

  • 在用户没有权限的情况下应用比订阅(管理组)更高级别的策略。
  • 或禁止用户(具有 RBAC 角色)处理策略定义和分配。
  • 或使用蓝图创建此策略并为此蓝图分配设置只读锁定。
于 2019-10-24T18:20:42.177 回答
0

您在创建 azure 策略时究竟在哪里存货?
请参阅此文档,您可以限制/允许资源类型

于 2019-08-07T12:24:37.310 回答