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


Защита частных зон 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.

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

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

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

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

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

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

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

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

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

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

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

Уровень частной зоны Azure RBAC

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

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

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

Снимок экрана: RBAC для частной зоны DNS.

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

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

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

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

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

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

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

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

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

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

Снимок экрана: RBAC для частного набора записей DNS.

Снимок экрана: назначение ролей для частного набора записей DNS.

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

# Grant permissions to a specific record set

$usr = "<user email address>"
$rol = "Private DNS Zone Contributor"
$sco = 
"/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateDnsZones/<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 "Private DNS Zone Contributor" \
--scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateDnsZones/<zone name>/<record type>/<record name>"

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

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

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

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

{
    "Name": "Private DNS CNAME Contributor",
    "Id": "",
    "IsCustom": true,
    "Description": "Can manage DNS CNAME records only.",
    "Actions": [
        "Microsoft.Network/privateDnsZones/CNAME/*",
        "Microsoft.Network/privateDNSZones/read",
        "Microsoft.Authorization/*/read",
        "Microsoft.Insights/alertRules/*",
        "Microsoft.ResourceHealth/availabilityStatuses/read",
        "Microsoft.Resources/deployments/*",
        "Microsoft.Resources/subscriptions/resourceGroups/read",
        "Microsoft.Support/*"
    ],
    "NotActions": [
    ],
    "AssignableScopes": [
        "/subscriptions/<subscription id>"
    ]
}

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

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

Замечание

Использование настраиваемой роли 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 create -inputfile <file path>

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

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

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

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

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

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

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

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

Снимок экрана: блокировки для частной зоны DNS.

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

# Lock a DNS zone

$lvl = "<lock level>"
$lnm = "<lock name>"
$rsc = "<zone name>"
$rty = "Microsoft.Network/privateDnsZones"
$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 "privateDnsZones" \
--resource-group "<resource group name>"

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

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

Замечание

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

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

Azure PowerShell

# Lock a DNS record set

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

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rnm -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>"
$rnm = "<zone name>/@"
$rty = "Microsoft.Network/privateDnsZones/SOA"
$rsg = "<resource group name>"

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

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

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

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

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

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

Дальнейшие шаги