Остановить создание ресурсов в подписке Azure
Мне нужно остановить создание всех ресурсов в моей подписке Azure, кроме:
- Логические приложения
- Сводки
- Решения
единственный способ, которым я могу думать об этом прямо сейчас, - с помощью политики Azure. Кто-нибудь знает, как написать такую политику?
3 ответа
Ну , в основном вам нужно использовать 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"
}
Типы ресурсов могут быть неправильными, но я не уверен, что именно вы после.
Политики требуют определений (где записана логика политики), а затем назначения политики (где определение назначается области). Определения политики можно сгруппировать в Инициативы политики (определения набора политик AKA). Эти Инициативы также могут быть назначены на область. Области можно определить на уровне группы ресурсов, уровня подписки или уровня группы управления.
Политики могут быть написаны и назначены через портал, сначала создав определение политики, а затем назначив его. ИМО, это может быть немного громоздким, когда осуществляется через портал. Или они могут быть развернуты через шаблон ARM. К сожалению, в настоящее время развертывание шаблона портала не настроено для развертывания на уровне, отличном от уровня группы ресурсов (29.08.2009). Но гораздо проще писать и развертывать через API развертывания. Я использую Почтальон, чтобы сделать это.
Развертывание политики в рамках подписки (как вы описываете) может быть выполнено через PUT для следующего URI.
https://management.azure.com/subscriptions/:subscriptionId/providers/Microsoft.Resources/deployments/mypolicydeployment?api-version=2019-05-01
Где:subscriptionId - это нотация параметра Postman для вашего фактического идентификатора подписки.
Вам нужно будет получить токен для проверки подлинности для запроса PUT, и у этого пользователя должны быть разрешения на развертывание и назначение политик. Это совсем другая тема, вы можете узнать больше об этом здесь ( https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code).
Кроме того, я поставляю заголовок "Content-Type" = "application/json" с моим запросом PUT.
Мой это полезный груз моего тела для вашей политики.
{
"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"
}
}
}
}
Шаблон развертывания содержит определение, содержащее описанную вами политику, а также назначение политики. Назначение политики установлено как "зависит от" определения политики. Это связано с тем, что назначение политики зависит от наличия определения для правильного развертывания. В противном случае, будет состояние гонки, которое вы всегда будете проигрывать.
Некоторые поля можно разбить на параметры, как я сделал с идентификатором подписки. Для применения в другой области подписки просто измените значение параметра и убедитесь, что ваш токен на предъявителя авторизован для этой подписки.
Сделайте настраиваемую роль RBAC с " ДЕЙСТВИЯМИ " только для этих трех нужных вам.
С политикой здесь все в порядке, но от роли пользователя зависит, сможет ли он отозвать такую политику из Подписки. Чтобы запретить пользователю это делать:
- Примените политику на уровне выше подписки (группа управления), где у пользователя нет прав.
- ИЛИ запретить пользователю (в роли RBAC) работать над определениями и назначениями политик.
- ИЛИ Создайте эту политику с помощью Blueprint и установите ReadOnly Lock для этого назначения Bluepring.
Где именно вы запасаетесь при создании лазурной политики?
Обратитесь к этому документу. Вы можете ограничить / разрешить использование типов ресурсов.