Как управлять зонами 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.
Если вам необходимы обе версии, выполните следующее:
- Удалите модуль Az в сеансе PowerShell 5.1.
- Установите модуль AzureRM в сеансе PowerShell 5.1.
- Скачайте и установите PowerShell Core 6.x или последующей версии.
- Установите модуль Az в сеансе PowerShell Core.
Перед началом настройки убедитесь, что у вас есть следующие компоненты.
- Подписка Azure. Если у вас нет подписки Azure, вы можете активировать преимущества для подписчиков MSDN или зарегистрировать бесплатную учетную запись.
- Вам потребуется установить последнюю версию командлетов PowerShell Azure Resource Manager. Подробнее: Установка и настройка Azure PowerShell.
Вход в учетную запись 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.