Поделиться через


Защита зон и записей DNS

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Сведения о начале работы см. в статье "Установка Azure PowerShell". Чтобы узнать, как перейти на модуль Az PowerShell, см. статью Миграция Azure PowerShell с AzureRM на Az.

Зоны и записи DNS являются критически важными ресурсами. Удаление зоны DNS или отдельной записи DNS может привести к отключению службы. Поэтому важно, чтобы важные зоны и записи DNS были защищены от несанкционированных или случайных изменений.

В этой статье объясняется, как Azure DNS позволяет защитить частные зоны и записи DNS от таких изменений. Мы применяем две мощные функции ценных бумаг, предоставляемые Azure Resource Manager: управление доступом на основе ролей Azure (Azure RBAC) и блокировки ресурсов.

Управление доступом на основе ролей Azure

Управление доступом на основе ролей Azure (Azure RBAC) обеспечивает точное управление доступом для пользователей, групп и ресурсов Azure. С помощью Azure RBAC можно предоставить уровень доступа, который требуется пользователям. Дополнительные сведения о том, как Azure RBAC помогает управлять доступом, см. в статье "Что такое управление доступом на основе ролей Azure" (Azure RBAC).

Роль участника в управлении зоной DNS

Роль участника зоны DNS — это встроенная роль для управления частными ресурсами DNS. Эта роль, применяемая к пользователю или группе, позволяет им управлять ресурсами DNS.

Группа ресурсов myResourceGroup содержит пять зон для корпорации Contoso. Предоставление участнику зоны DNS администратора прав доступа к этой группе ресурсов обеспечивает полный контроль над этими зонами DNS. Это позволяет избежать предоставления ненужных разрешений. Администратор DNS не может создавать или останавливать виртуальные машины.

Самый простой способ назначения разрешений Azure RBAC — на портале Azure.

Откройте элемент управления доступом (IAM) для группы ресурсов, а затем нажмите кнопку +Добавить, а затем выберите роль участника зоны DNS . Выберите необходимых пользователей или групп для предоставления разрешений.

Снимок экрана: страница управления доступом для группы ресурсов.

Разрешения также можно предоставить с помощью Azure PowerShell:

# Grant 'DNS Zone Contributor' permissions to all zones in a resource group

$usr = "<user email address>"
$rol = "DNS Zone Contributor"
$rsg = "<resource group name>"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -ResourceGroupName $rsg

Аналогичная команда также доступна через Azure CLI:

# Grant 'DNS Zone Contributor' permissions to all zones in a resource group

az role assignment create \
--assignee "<user email address>" \
--role "DNS Zone Contributor" \
--resource-group "<resource group name>"

Уровень зоны Azure RBAC

Правила Azure RBAC можно применять к подписке, группе ресурсов или к отдельному ресурсу. Этот ресурс может быть отдельной зоной DNS или отдельным набором записей.

Например, группа ресурсов myResourceGroup содержит contoso.com зоны и подзону customers.contoso.com. Записи CNAME создаются для каждой учетной записи клиента. Учетная запись администратора, используемая для управления записями CNAME, назначает разрешения на создание записей в зоне customers.contoso.com . Учетная запись может управлять только customers.contoso.com.

Разрешения Azure RBAC уровня зоны можно предоставить с помощью портала Azure. Откройте элемент управления доступом (IAM) для зоны, нажмите кнопку +Добавить, а затем выберите роль участника зоны DNS и выберите необходимых пользователей или групп для предоставления разрешений.

Снимок экрана: страница управления доступом для зоны DNS.

Разрешения также можно предоставить с помощью Azure PowerShell:

# Grant 'DNS Zone Contributor' permissions to a specific zone

$usr = "<user email address>"
$rol = "DNS Zone Contributor"
$rsg = "<resource group name>"
$zon = "<zone name>"
$typ = "Microsoft.Network/DNSZones"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -ResourceGroupName $rsg -ResourceName $zon -ResourceType $typ

Аналогичная команда также доступна через Azure CLI:

# Grant 'DNS Zone Contributor' permissions to a specific zone

az role assignment create \
--assignee <user email address> \
--role "DNS Zone Contributor" \
--scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/DnsZones/<zone name>/"

Уровень набора записей Azure RBAC

Разрешения применяются на уровне набора записей. Пользователю предоставляется управление нужными записями и не удается внести другие изменения.

Разрешения на уровне набора записей Azure RBAC можно настроить с помощью портала Azure с помощью кнопки "Пользователи " на странице набора записей:

Снимок экрана кнопки пользователя в наборе записей.

Разрешения на уровне набора записей Azure RBAC также можно предоставить с помощью Azure PowerShell:

# Grant permissions to a specific record set

$usr = "<user email address>"
$rol = "DNS Zone Contributor"
$sco = 
"/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/dnszones/<zone name>/<record type>/<record name>"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -Scope $sco

Аналогичная команда также доступна через Azure CLI:

# Grant permissions to a specific record set

az role assignment create \
--assignee "<user email address>" \
--role "DNS Zone Contributor" \
--scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/dnszones/<zone name>/<record type>/<record name>"

Настраиваемые роли

Встроенная роль участника зоны DNS обеспечивает полный контроль над ресурсом DNS. Можно создать собственные пользовательские роли Azure, чтобы обеспечить более детальное управление.

Учетная запись, используемая для управления записями CNAME, имеет разрешение только на управление этими записями. Учетная запись не может изменять записи других типов. Учетная запись не может выполнять такие операции уровня зоны, как удаление зоны.

В следующем примере показано определение пользовательской роли только для управления записями CNAME:

{
    "Name": "DNS CNAME Contributor",
    "Id": "",
    "IsCustom": true,
    "Description": "Can manage DNS CNAME records only.",
    "Actions": [
        "Microsoft.Network/dnsZones/CNAME/*",
        "Microsoft.Network/dnsZones/read",
        "Microsoft.Authorization/*/read",
        "Microsoft.Insights/alertRules/*",
        "Microsoft.ResourceHealth/availabilityStatuses/read",
        "Microsoft.Resources/deployments/*",
        "Microsoft.Resources/subscriptions/resourceGroups/read",
        "Microsoft.Support/*"
    ],
    "NotActions": [
    ],
    "AssignableScopes": [
        "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
    ]
}

Свойство Actions определяет следующие разрешения, относящиеся к DNS:

  • Microsoft.Network/dnsZones/CNAME/* предоставляет полный контроль над записями CNAME
  • Microsoft.Network/dnsZones/read предоставляет разрешение на чтение зон DNS, но не изменять их, позволяя видеть зону, в которой создается CNAME.

Остальные действия копируются из встроенной роли участника зоны DNS.

Примечание.

Использование настраиваемой роли Azure для предотвращения удаления наборов записей, позволяя обновлять их не является эффективным элементом управления. Он предотвращает удаление наборов записей, но не препятствует их изменению. Разрешенные изменения включают добавление и удаление записей из набора записей, включая удаление всех записей, чтобы оставить пустой набор записей. Это имеет тот же эффект, что и удаление набора записей с точки зрения разрешения DNS.

Пользовательские определения ролей в настоящее время не могут быть определены с помощью портала Azure. Пользовательская роль на основе этого определения роли можно создать с помощью Azure PowerShell:

# Create new role definition based on input file
New-AzRoleDefinition -InputFile <file path>

Его также можно создать с помощью Azure CLI:

# Create new role definition based on input file
az role definition create --role-definition <file path>

Затем роль можно назначить так же, как и встроенные роли, как это описано ранее в этой статье.

Дополнительные сведения о создании, управлении и назначении пользовательских ролей см. в статье о пользовательских ролях Azure.

Блокировки ресурсов

Azure Resource Manager поддерживает другой тип управления безопасностью, возможность блокировки ресурсов. Блокировку можно применить к конкретному ресурсу, и она будет действовать для всех пользователей и ролей. Дополнительные сведения см. в статье Блокировка ресурсов с помощью диспетчера ресурсов Azure.

Существует два типа блокировки ресурсов: CanNotDelete и ReadOnly. Блокировки этого типа могут применяться либо к Частной зоне DNS, либо к отдельному набору записей. В следующих разделах описаны несколько распространенных сценариев и их поддержка с помощью блокировок ресурсов.

Защита от всех изменений

Чтобы предотвратить внесение изменений, примените блокировку ReadOnly к зоне. Эта блокировка предотвращает создание новых наборов записей и удаление существующих наборов записей.

Блокировки ресурсов уровня зоны можно создавать с помощью портала Azure. На странице зоны DNS выберите "Блокировки", а затем нажмите кнопку +Добавить:

Скриншот блокировок ресурсов на уровне зоны.

Блокировки ресурсов уровня зоны также можно создавать с помощью Azure PowerShell:

# Lock a DNS zone

$lvl = "<lock level>"
$lnm = "<lock name>"
$rsc = "<zone name>"
$rty = "Microsoft.Network/DNSZones"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rsc -ResourceType $rty -ResourceGroupName $rsg

Аналогичная команда также доступна через Azure CLI:

# Lock a DNS zone

az lock create \
--lock-type "<lock level>" \
--name "<lock name>" \
--resource-name "<zone name>" \
--namespace "Microsoft.Network" \
--resource-type "DnsZones" \
--resource-group "<resource group name>"

Защита отдельных записей

Чтобы предотвратить изменение существующего набора записей DNS, примените блокировку ReadOnly к набору записей.

Примечание.

Применение блокировки CanNotDelete к набору записей не является эффективным элементом управления. Он предотвращает удаление набора записей, но не препятствует его изменению. Разрешенные изменения включают добавление и удаление записей из набора записей, включая удаление всех записей, чтобы оставить пустой набор записей. Это имеет тот же эффект, что и удаление набора записей с точки зрения разрешения DNS.

Блокировки ресурсов уровня записи в настоящее время можно настроить только с помощью Azure PowerShell. Они не поддерживаются на портале Azure или Azure CLI.

# Lock a DNS record set

$lvl = "<lock level>"
$lnm = "<lock name>"
$rsc = "<zone name>/<record set name>"
$rty = "Microsoft.Network/DNSZones/<record type>"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rsc -ResourceType $rty -ResourceGroupName $rsg

Защита от удаления зоны

При удалении зоны в Azure DNS все наборы записей в зоне удаляются. Отменить эту операцию невозможно. Случайное удаление критической зоны может оказать значительное влияние на бизнес. Важно защитить от случайного удаления зоны.

Применение блокировки CanNotDelete к зоне предотвращает удаление зоны. Блокировки наследуются дочерними ресурсами. Блокировка предотвращает удаление всех наборов записей в зоне. Как описано в описании выше, это неэффективно, так как записи по-прежнему могут быть удалены из существующих наборов записей.

В качестве альтернативы примените блокировку CanNotDelete к набору записей в зоне, например набор записей SOA. Удаление зоны невозможно без удаления наборов записей. Эта блокировка защищает от удаления зоны, сохраняя возможность свободного изменения наборов записей в пределах зоны. Если предпринята попытка удалить зону, Azure Resource Manager обнаруживает это удаление. Удаление также приведет к удалению набора записей SOA, Azure Resource Manager блокирует вызов, так как SOA заблокирован. Наборы записей не удаляются.

Следующая команда PowerShell создает блокировку CanNotDelete для записи SOA заданной зоны:

# Protect against zone delete with CanNotDelete lock on the record set

$lvl = "CanNotDelete"
$lnm = "<lock name>"
$rsc = "<zone name>/@"
$rty = "Microsoft.Network/DNSZones/SOA"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rsc -ResourceType $rty -ResourceGroupName $rsg

Другим вариантом предотвращения случайного удаления зоны является использование настраиваемой роли. Эта роль гарантирует, что учетные записи, используемые для управления зонами, не имеют разрешений на удаление зоны.

Когда необходимо удалить зону, можно применить двухфакторное удаление:

  • Сначала предоставьте разрешения на удаление зоны
  • Во-вторых, предоставьте разрешения на удаление зоны.

Пользовательская роль действует для всех зон, доступных через эти учетные записи. Учетные записи с разрешениями на удаление зоны, таких как владелец подписки, всё ещё могут случайно удалить зону.

Можно использовать оба подхода — блокировки ресурсов и пользовательские роли — одновременно, как и более подробный подход к защите зоны DNS.

Дальнейшие действия