Как управлять зонами DNS с помощью PowerShell

В этой статье описывается, как управлять зонами DNS с помощью Azure PowerShell. Зонами DNS также можно управлять с помощью кроссплатформенного интерфейса командной строки Azure или портала Azure.

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

Зона DNS используется для размещения DNS-записей определенного домена. Чтобы разместить свой домен в Azure DNS, необходимо создать зону DNS для этого доменного имени. Каждая запись DNS для вашего домена создается внутри этой зоны DNS.

Например, домен contoso.com может содержать несколько записей DNS, включая mail.contoso.com (для почтового сервера) и www.contoso.com (для веб-сайта).

При создании зоны DNS в Azure DNS учитывайте следующее.

  • Имя зоны должно быть уникальным в пределах группы ресурсов, а зона не должна существовать. В противном случае операция завершится ошибкой.
  • То же имя зоны можно использовать повторно в другой группе ресурсов или другой подписке Azure.
  • Если нескольким зонам присвоено одно и то же имя, каждому экземпляру назначаются разные адреса серверов доменных имен. С помощью регистратора доменных имен можно настроить только один набор адресов.

Примечание

Для создания зоны DNS с доменным именем в Azure DNS необязательно быть его владельцем. Однако, чтобы настроить серверы доменных имен Azure DNS в качестве правильных серверов для доменного имени с помощью регистратора доменных имен, необходимо быть владельцем домена.

Дополнительные сведения см. в статье Делегирование домена в Azure DNS.

Настройка Azure PowerShell для Azure DNS

Подготовка к работе

Важно!

Для использования этой функции Azure в PowerShell требуется установленный модуль AzureRM. Это устаревший модуль, поддерживаемый только в Windows PowerShell 5.1.x, в который больше не добавляются новые функции. Модули Az и AzureRM являются несовместимыми при использовании с одинаковыми версиями PowerShell. Если вам необходимы обе версии, выполните следующее:

  1. Удалите модуль Az в сеансе PowerShell 5.1.
  2. Установите модуль AzureRM в сеансе PowerShell 5.1.
  3. Скачайте и установите PowerShell Core 6.x или последующей версии.
  4. Установите модуль Az в сеансе PowerShell Core.

Перед началом настройки убедитесь, что у вас есть следующие компоненты.

Вход в учетную запись Azure

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

Connect-AzAccount

Выбор подписки

Просмотрите подписки учетной записи.

Get-AzSubscription

Выберите, какие подписки Azure будут использоваться.

Select-AzSubscription -SubscriptionName "your_subscription_name"

Создание группы ресурсов

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

Если используется существующая группа ресурсов, можно пропустить этот шаг.

New-AzResourceGroup -Name MyDNSResourceGroup -location "West US"

Создание зоны DNS

Зона DNS создается с помощью командлета New-AzDnsZone.

В следующем примере будет создана зона DNS contoso.com в группе ресурсов MyDNSResourceGroup:

New-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup

В следующем примере демонстрируется создание зоны DNS с двумя тегами Azure Resource Manager (project = demo и env = test):

New-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup -Tag @{ project="demo"; env="test" }

Получение зоны DNS

Чтобы получить зону DNS, используйте командлет Get-AzDnsZone . Эта операция возвращает объект зоны DNS, соответствующий существующей зоне в Azure DNS. Объект содержит данные о зоне (например, число наборов записей), но не сами наборы записей (см. Get-AzDnsRecordSet).

Get-AzDnsZone -Name contoso.com –ResourceGroupName MyDNSResourceGroup

Name                  : contoso.com
ResourceGroupName     : myresourcegroup
Etag                  : 00000003-0000-0000-8ec2-f4879750d201
Tags                  : {project, env}
NameServers           : {ns1-01.azure-dns.com., ns2-01.azure-dns.net., ns3-01.azure-dns.org.,
                        ns4-01.azure-dns.info.}
NumberOfRecordSets    : 2
MaxNumberOfRecordSets : 5000

Перечисление зон DNS

Если опустить имя зоны в командлете Get-AzDnsZone, можно получить список всех зон в группе ресурсов. Эта операция возвращает массив объектов зоны.

$zoneList = Get-AzDnsZone -ResourceGroupName MyDNSResourceGroup
$zoneList

Если опустить имя зоны и имя группы ресурсов в командлете Get-AzDnsZone, то можно получить список всех зон в подписке Azure.

$zoneList = Get-AzDnsZone
$zoneList

Обновление зоны DNS

Изменить ресурс зоны DNS можно с помощью командлета Set-AzDnsZone. При этом ни один набор записей DNS в пределах зоны командлетом не обновляется (см. статью Управление записями и наборами записей DNS с помощью PowerShell). Эта команда используется только для обновления свойств самого ресурса зоны. В настоящее время к записываемым свойствам зоны относятся только теги Azure Resource Manager для ресурса зоны.

Используйте один из двух описанных ниже способов обновления зоны DNS.

Укажите зону с помощью имени и группы ресурсов.

При этом подходе существующие теги зоны заменяются указанными значениями.

Set-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup -Tag @{ project="demo"; env="test" }

Укажите зону с помощью объекта $zone.

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

# Get the zone object
$zone = Get-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup

# Remove an existing tag
$zone.Tags.Remove("project")

# Add a new tag
$zone.Tags.Add("status","approved")

# Commit changes
Set-AzDnsZone -Zone $zone

При использовании Set-AzDnsZone с объектом $zone используются проверки Etag , чтобы убедиться, что параллельные изменения не перезаписываются. Чтобы отменить эти проверки, укажите необязательный параметр -Overwrite.

Удаление зоны DNS

Зоны DNS можно удалить с помощью командлета Remove-AzDnsZone.

Примечание

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

Сведения о защите от случайного зоны удаления см. в разделе How to protect DNS zones and records (Как защитить зоны и записи DNS).

Используйте один из двух описанных ниже способов удаления зоны DNS.

Укажите зону с помощью имени зоны и имени группы ресурсов.

Remove-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup

Укажите зону с помощью объекта $zone.

Удаляемую зону можно указать с помощью объекта $zone, который возвращается командлетом Get-AzDnsZone.

$zone = Get-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup
Remove-AzDnsZone -Zone $zone

Объект зоны также можно направить в конвейер, а не передавать в качестве параметра:

Get-AzDnsZone -Name contoso.com -ResourceGroupName MyDNSResourceGroup | Remove-AzDnsZone

Как и для командлета Set-AzDnsZone, при указании зоны с помощью объекта $zone вы включаете проверки Etag, чтобы убедиться, что параллельные изменения не удаляются. Чтобы отменить эти проверки, используйте параметр -Overwrite.

Запросы на подтверждение

Командлеты New-AzDnsZone, Set-AzDnsZone и Remove-AzDnsZone поддерживают запросы на подтверждение.

Оба командлета (New-AzDnsZone и Set-AzDnsZone) запрашивают подтверждение, если привилегированная переменная $ConfirmPreference в PowerShell имеет значение Medium или ниже. Поскольку удаление зоны DNS может стать причиной нежелательных условий, командлет Remove-AzDnsZone запрашивает подтверждение, если переменная PowerShell $ConfirmPreference имеет любое значение, отличное от None.

Поскольку переменная $ConfirmPreference по умолчанию имеет значение High, то по умолчанию подтверждение запрашивается только командлетом Remove-AzDnsZone.

Текущее значение $ConfirmPreference можно переопределить с помощью параметра -Confirm. Если вы определите -Confirm или -Confirm:$True, командлет будет запрашивать подтверждение перед выполнением. Если вы определите -Confirm:$False, командлет не будет запрашивать подтверждение.

Дополнительные сведения об элементах -Confirm и $ConfirmPreference см. в статье о привилегированных переменных.

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

Узнайте, как управлять наборами записей и записями в зоне DNS.
Узнайте, как делегировать свой домен в Azure DNS.
Просмотрите справочную документацию по Azure DNS PowerShell.