停止在 Azure 订阅上创建资源
Stop Creation of Resources on Azure Subscription
我需要停止在我的 Azure 订阅上创建所有资源,除了:
- 逻辑应用程序
- 仪表板
- 解决方案
我现在能想到的唯一方法是通过 Azure Policy,有人知道如何编写这样的策略吗?
您在创建 Azure Policy 方面的确切储备是什么?
Refer this doc,您可以 restrict/allow 根据资源类型
好吧,您基本上需要结合使用 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"
}
资源类型可能有误,但我不确定你到底在找什么。
策略需要定义(编写策略逻辑的地方),然后是策略分配(定义分配给范围的地方)。策略定义可以分组为策略倡议(又名策略集定义)。这些倡议也可以分配给一个范围。可以在资源组级别、订阅级别或管理组级别定义范围。
可以通过门户编写和分配策略,方法是首先创建策略定义,然后分配它。 IMO 这在通过门户完成时可能有点麻烦。或者它们可以通过 ARM 模板部署。遗憾的是,门户模板部署当前未配置为在资源组级别 (08/29/2019) 以外的任何位置进行部署。但是通过部署 API 编写和部署要容易得多。我使用 Postman 来做这个。
订阅范围(如您所描述的)策略部署可以通过 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" header。
我的,这是我的 body 策略负载。
{
"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 所做的那样。为了在另一个订阅范围内申请,只需更改参数值并确保您的持有者令牌已获得该订阅的授权。
只为这 3 个你想要的 Custom RBAC 角色设置“ACTIONS”。
这里的政策没问题,但这取决于用户角色是否能够从订阅中取消分配此类政策。
要防止用户这样做:
- 在用户没有权限的更高级别应用策略(管理组)。
- 或禁止用户(在 RBAC 角色中)处理策略
定义和赋值。
- 或使用蓝图创建此策略并
为此 Bluepring 分配设置只读锁定。
我需要停止在我的 Azure 订阅上创建所有资源,除了:
- 逻辑应用程序
- 仪表板
- 解决方案
我现在能想到的唯一方法是通过 Azure Policy,有人知道如何编写这样的策略吗?
您在创建 Azure Policy 方面的确切储备是什么?
Refer this doc,您可以 restrict/allow 根据资源类型
好吧,您基本上需要结合使用 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"
}
资源类型可能有误,但我不确定你到底在找什么。
策略需要定义(编写策略逻辑的地方),然后是策略分配(定义分配给范围的地方)。策略定义可以分组为策略倡议(又名策略集定义)。这些倡议也可以分配给一个范围。可以在资源组级别、订阅级别或管理组级别定义范围。
可以通过门户编写和分配策略,方法是首先创建策略定义,然后分配它。 IMO 这在通过门户完成时可能有点麻烦。或者它们可以通过 ARM 模板部署。遗憾的是,门户模板部署当前未配置为在资源组级别 (08/29/2019) 以外的任何位置进行部署。但是通过部署 API 编写和部署要容易得多。我使用 Postman 来做这个。
订阅范围(如您所描述的)策略部署可以通过 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" header。
我的,这是我的 body 策略负载。
{
"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 所做的那样。为了在另一个订阅范围内申请,只需更改参数值并确保您的持有者令牌已获得该订阅的授权。
只为这 3 个你想要的 Custom RBAC 角色设置“ACTIONS”。
这里的政策没问题,但这取决于用户角色是否能够从订阅中取消分配此类政策。 要防止用户这样做:
- 在用户没有权限的更高级别应用策略(管理组)。
- 或禁止用户(在 RBAC 角色中)处理策略 定义和赋值。
- 或使用蓝图创建此策略并 为此 Bluepring 分配设置只读锁定。