Руководство по Создание определения пользовательской политики
Определение пользовательской политики позволяет клиентам устанавливать собственные правила для использования Azure. Эти правила часто применяют для:
- Рекомендации по безопасности.
- Управление затратами.
- Правила для конкретной организации (например, именование или расположения).
Независимо от потребностей в пользовательской политике шаги по ее созданию будут одинаковы для всех.
Прежде чем создавать пользовательскую политику, проверьте, нет ли в примерах готовой политики, соответствующей вашим требованиям.
Процесс создания пользовательской политики включает следующее:
- определение бизнес-требований;
- сопоставление каждого требования со свойством ресурса Azure;
- сопоставление свойства c псевдонимами;
- определение требуемого эффекта;
- составление определения политики.
Необходимые компоненты
Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Определение требований
Прежде чем создавать определение политики, важно определиться с назначением политики. В этом руководстве используйте общее требование к безопасности предприятия в качестве цели, чтобы проиллюстрировать описанные ниже действия.
- Каждая учетная запись хранения должна быть включена для HTTPS.
- Каждая учетная запись хранения должна быть отключена для HTTP.
Требования должны четко определять состояние ресурса.
Хотя мы определили ожидаемое состояние ресурса, мы не определили, что мы хотим сделать с несоответствующим ресурсами. Политика Azure поддерживает множество эффектов. В этом руководстве мы определим бизнес-требование, чтобы предотвратить создание ресурсов, если они не соответствуют бизнес-правилам. Для удовлетворения этой цели мы используем эффект запрета. Нам также нужна возможность блокирования политики для определенных назначений. Используйте отключенный эффект и сделайте эффект параметром в определении политики.
Определение свойств ресурсов
Исходя из нашего бизнес-требования, с помощью Политики Azure будет проводится аудит такого ресурса Azure, как учетная запись хранения. Но нам неизвестно, какие свойства использовать в определении политики. Политика Azure вычисляет представление ресурса в формате JSON, поэтому необходимо понять свойства, доступные в этом ресурсе.
Есть много способов определить свойства ресурса Azure. Мы рассмотрим каждый из этих учебников:
- расширение Политика Azure для VS Code.
- Шаблоны Azure Resource Manager (шаблоны ARM).
- Экспорт существующего ресурса.
- Опыт создания.
- Шаблоны быстрого запуска (GitHub).
- Справочные документы по шаблону.
- Обозреватель ресурсов Azure.
Просмотр ресурсов в расширении для VS Code
Расширение VS Code можно использовать для просмотра ресурсов в среде и свойств Resource Manager для каждого ресурса.
Шаблоны ARM
Существует несколько способов просмотреть шаблон ARM, который содержит нужное нам свойство.
Существующий ресурс на портале
Простейший способ узнать свойства ресурса — изучить существующий ресурс аналогичного типа. Ресурсы, которые уже настроены на соответствие политике, также подойдут для этой цели. Просмотрите страницу шаблона экспорта в разделе "Параметры" в портал Azure для этого конкретного ресурса.
Предупреждение
Шаблон Resource Manager, экспортированный на портал Azure, невозможно напрямую присвоить свойству deployment
для шаблона Resource Manager в определении политики deployIfNotExists.
Если открыть эту страницу для учетной записи хранения, отобразится примерно такой шаблон:
"resources": [
{
"comments": "Generalized from resource: '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount'.",
"type": "Microsoft.Storage/storageAccounts",
"sku": {
"name": "Standard_LRS",
"tier": "Standard"
},
"kind": "Storage",
"name": "[parameters('storageAccounts_mystorageaccount_name')]",
"apiVersion": "2018-07-01",
"location": "westus",
"tags": {
"ms-resource-usage": "azure-cloud-shell"
},
"scale": null,
"properties": {
"networkAcls": {
"bypass": "AzureServices",
"virtualNetworkRules": [],
"ipRules": [],
"defaultAction": "Allow"
},
"supportsHttpsTrafficOnly": false,
"encryption": {
"services": {
"file": {
"enabled": true
},
"blob": {
"enabled": true
}
},
"keySource": "Microsoft.Storage"
}
},
"dependsOn": []
}
]
В разделе properties
задано значение с именем false
supportsHttpsTrafficOnly
. Это свойство выглядит так, как это может быть свойство, которое мы ищем. Кроме того, type
ресурс имеет значение Microsoft.Storage/storageAccounts
. Тип позволяет ограничить применение политики для ресурсов только этого типа.
Создание ресурса на портале
Другой способ — создание ресурса на портале. При создании учетной записи хранения на портале требуется параметр на вкладке "Дополнительно". Возможные его состояния — Отключено и Включено. Значок сведений содержит больше текста, который подтверждает, что этот параметр, скорее всего, является нужным свойством. Но портал не сообщает нам имя свойства на этом экране.
На вкладке Просмотр и создание внизу есть ссылка Скачать шаблон для автоматизации. Ссылка открывает шаблон для создания ресурса, который мы настроили. В этом случае нас интересуют следующие сведения:
...
"supportsHttpsTrafficOnly": {
"type": "bool"
}
...
"properties": {
"accessTier": "[parameters('accessTier')]",
"supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]"
}
...
Эта информация сообщает нам тип свойства, а также подтверждает supportsHttpsTrafficOnly
, что свойство, которое мы ищем.
Шаблоны быстрого запуска на GitHub
Шаблоны быстрого запуска Azure на GitHub имеют сотни шаблонов ARM, созданных для различных ресурсов. Эти шаблоны обеспечивают отличный способ отыскать требуемое свойство ресурса. Некоторые свойства могут показаться тем, что вы ищете, но контролировать что-то другое.
Справочная документация по ресурсам
Чтобы проверить supportsHttpsTrafficOnly
правильное свойство, проверьте ссылку на шаблон ARM для ресурса учетной записи хранения в поставщике хранилища. Объект свойств содержит список допустимых параметров. При выборе StorageAccountPropertiesCreateParameters
ссылки на объект отображается таблица допустимых свойств. supportsHttpsTrafficOnly
присутствует и описание соответствует тому, что мы ищем в отношении бизнес-требований.
Обозреватель ресурсов Azure
Еще одну возможность оценить ресурсы Azure предоставляет обозреватель ресурсов Azure (предварительная версия). Это средство использует контекст подписки, поэтому вам необходимо пройти проверку подлинности на веб-сайте с помощью учетных данных Azure. Пройдя проверку подлинности, можно просмотреть сведения о поставщиках, подписках, группах ресурсов и ресурсах.
Найдите ресурс учетной записи хранения и просмотрите его свойства. Мы видим supportsHttpsTrafficOnly
здесь свойство, а также. На вкладке Документация видно, что описание свойства соответствует сведениям из справочника, полученным нами ранее.
Поиск псевдонима свойства
Мы определили свойство ресурса, но нам нужно сопоставить это свойство с псевдонимом.
Есть несколько способов определить псевдонимы ресурса Azure. Мы рассмотрим каждый из этих учебников:
- расширение Политика Azure для VS Code.
- Azure CLI.
- Azure PowerShell.
Получение псевдонимов в расширении VS Code
Расширение Политики Azure для расширения VS Code позволяет легко просматривать ресурсы и обнаруживать псевдонимы.
Примечание.
Расширение VS Code предоставляет только свойства режима диспетчера ресурсов и не отображает свойств режима поставщика ресурсов.
Azure CLI
Для поиска псевдонимов ресурса в Azure CLI используется группа команд az provider
. Мы фильтруем Microsoft.Storage
пространство имен на основе сведений о ресурсе Azure ранее.
# Login first with az login if not using Cloud Shell
# Get Azure Policy aliases for type Microsoft.Storage
az provider show --namespace Microsoft.Storage --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"
В результатах мы видим псевдоним, поддерживаемый учетными записями хранения с именем supportsHttpsTrafficOnly
. Наличие такого псевдонима позволяет нам создать политику для соблюдения бизнес-требований.
Azure PowerShell
Для поиска псевдонимов ресурса в Azure PowerShell используется командлет Get-AzPolicyAlias
. Отфильтруйте пространство Microsoft.Storage
имен на основе сведений о ресурсе Azure ранее.
# Login first with Connect-AzAccount if not using Cloud Shell
# Use Get-AzPolicyAlias to list aliases for Microsoft.Storage
(Get-AzPolicyAlias -NamespaceMatch 'Microsoft.Storage').Aliases
Как и Azure CLI, результаты показывают псевдоним, поддерживаемый учетными записями хранения с именем supportsHttpsTrafficOnly
.
Определение требуемого эффекта
Решение о том, что делать с ресурсами, которые не отвечают требованиям, не менее важно, чем решение о том, что оценивать в первую очередь. Каждый возможный ответ такому ресурсу, называется эффектом. Эффект отвечает за регистрацию ресурсов, которые не отвечают требованиям, их блокировку, добавление в них данных и наличие у них зависимых развертываний, а также приведение их в состояние соответствия требованиям.
В нашем примере мы deny
хотим, чтобы ресурсы, не соответствующие требованиям, созданные в нашей среде Azure. Аудит является хорошим выбором для эффекта политики, чтобы определить, какой эффект политики имеет перед его настройкой deny
. Один из способов упростить изменение эффекта — задать ему параметры. Дополнительные сведения см . в параметрах .
Создание определения
Теперь у нас есть подробные сведения о свойстве, которым мы хотим управлять, включая его псевдоним. Затем мы создадим само правило политики. Если вы не знакомы с языком политики, см. структуру определения политики ссылки на структуру определения политики. Ниже приведен пустой шаблон определения политики:
{
"properties": {
"displayName": "<displayName>",
"description": "<description>",
"mode": "<mode>",
"parameters": {
<parameters>
},
"policyRule": {
"if": {
<rule>
},
"then": {
"effect": "<effect>"
}
}
}
}
Метаданные
Первые три компонента — это метаданные политики. Этим компонентам мы можем быстро задать значения, так как знаем, для чего создаем правило. Параметр mode касается главным образом тегов и расположения ресурсов. Так как нам не нужно ограничивать оценку ресурсами, поддерживающими теги, используйте все значение для mode
.
"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",
Параметры
Хотя мы не использовали параметр для изменения оценки, мы хотим использовать параметр, чтобы разрешить изменение effect
для устранения неполадок. Вы определяете effectType
параметр и ограничиваете его только deny
и disabled
. Эти два варианта обеспечивают соответствие нашим бизнес-требованиям. Готовый блок параметров выглядит следующим образом:
"parameters": {
"effectType": {
"type": "string",
"defaultValue": "Deny",
"allowedValues": [
"Deny",
"Disabled"
],
"metadata": {
"displayName": "Effect",
"description": "Enable or disable the execution of the policy"
}
}
},
Правило политики
Составление правила политики является последним шагом в создании определения пользовательской политики. Мы определили два оператора для тестирования:
- Учетная запись
type
Microsoft.Storage/storageAccounts
хранения . - Учетная запись
supportsHttpsTrafficOnly
хранения неtrue
является.
Так как нам нужно, чтобы оба этих оператора были истинными, используйте логический allOf
оператор. effectType
Передайте параметр в эффект вместо того, чтобы сделать статическое объявление. Готовое правило имеет следующий вид:
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
},
{
"field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
"notEquals": "true"
}
]
},
"then": {
"effect": "[parameters('effectType')]"
}
Завершенное определение
Определив все три части политики, мы получили такое завершенное определение:
{
"properties": {
"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",
"parameters": {
"effectType": {
"type": "string",
"defaultValue": "Deny",
"allowedValues": [
"Deny",
"Disabled"
],
"metadata": {
"displayName": "Effect",
"description": "Enable or disable the execution of the policy"
}
}
},
"policyRule": {
"if": {
"allOf": [
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
},
{
"field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
"notEquals": "true"
}
]
},
"then": {
"effect": "[parameters('effectType')]"
}
}
}
}
Завершенное определение можно использовать для создания новой политики. Портал Azure и все пакеты SDK (для Azure CLI, Azure PowerShell и REST API) по-разному принимают определения, поэтому просмотрите команды для каждого средства, чтобы правильно использовать определения. Затем, используя эффект с заданными параметрами, назначьте определение требуемым ресурсам для управления безопасностью своих учетных записей хранения.
Очистка ресурсов
Если вы закончите работу с ресурсами из этого руководства, выполните следующие действия, чтобы удалить все созданные назначения или определения:
Выберите Определения (или Назначения, если вы пытаетесь удалить назначение) в разделе Разработка в левой части страницы службы Политика Azure.
Найдите новую инициативу либо определение политики (или назначение), которые вы хотите удалить.
Щелкните строку правой кнопкой мыши или выберите многоточие в конце определения (или назначения), а затем выберите Удалить определение (или Удаление назначения).
Отзыв
В этом руководстве вы успешно выполнили следующие действия:
- определили бизнес-требования;
- сопоставили каждое требование со свойством ресурса Azure;
- сопоставили свойства c псевдонимами;
- определили требуемый эффект;
- составили определение политики.
Следующие шаги
Используйте определение пользовательской политики для создания и назначения политики, как описано в следующей статье:
Create and assign a policy definition (Создание и назначение определения политики).