我需要停止在Azure订阅上创建所有资源,除了:
我现在想到的唯一方法就是通过Azure策略,有人会知道如何编写这样的策略吗?
答案 0 :(得分:2)
好吧,您基本上需要将not
和anyof
与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"
}
资源类型可能是错误的,但我不确定您到底要干什么。
答案 1 :(得分:1)
策略需要先定义(在其中编写策略逻辑),然后再进行策略分配(在其中将定义分配给作用域)。策略定义可以分为策略计划(AKA策略集定义)。这些计划也可以分配给范围。范围可以在资源组级别,订阅级别或管理组级别定义。
可以通过门户网站编写和分配策略,方法是首先创建策略定义,然后进行分配。 IMO在通过门户网站进行操作时可能会有些麻烦。或者可以通过ARM模板部署它们。不幸的是,当前未将门户网站模板部署配置为在资源组级别(08/29/2019)以外的任何其他位置进行部署。但是通过部署API编写和部署要容易得多。我用邮差来做到这一点。
可以通过对以下URI进行PUT来完成订阅范围(如您所描述的)策略部署。
https://management.azure.com/subscriptions/:subscriptionId/providers/Microsoft.Resources/deployments/mypolicydeployment?api-version=2019-05-01
其中:subscriptionId是您的实际订阅ID的邮递员参数符号。
您将需要获取承载令牌以对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"
}
}
}
}
部署模板包含一个定义,该定义包含您描述的策略以及策略分配。策略分配设置为“取决于”策略定义。这是因为策略分配取决于是否存在正确部署的定义。否则,您将永远失去比赛条件。
某些字段可以细分为参数,就像我对订阅ID所做的那样。为了适用于其他订阅范围,只需更改参数值并确保您的承载令牌已获得该订阅的授权。
答案 2 :(得分:0)
您在哪里可以制定天青政策?
Refer this doc,您可以限制/允许资源类型
答案 3 :(得分:0)
仅对您要使用的这3个对象使用操作进行自定义RBAC 角色。
这里的策略还可以,但是如果他能够从订阅中取消分配该策略,则取决于用户角色。 为防止用户这样做: