Jak chronić strefy i rekordy DNS
Uwaga
Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Aby rozpocząć, zobacz Instalowanie programu Azure PowerShell. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.
Strefy i rekordy DNS są zasobami krytycznymi. Usunięcie strefy DNS lub pojedynczego rekordu DNS może spowodować awarię usługi. Ważne jest, aby strefy i rekordy DNS chroniły przed nieautoryzowanymi lub przypadkowymi zmianami.
W tym artykule wyjaśniono, jak usługa Azure DNS umożliwia ochronę prywatnych stref DNS i rekordów przed takimi zmianami. Stosujemy dwie zaawansowane funkcje papierów wartościowych udostępniane przez usługę Azure Resource Manager: kontrolę dostępu opartą na rolach (RBAC) platformy Azure i blokady zasobów.
Kontrola dostępu na podstawie ról na platformie Azure
Kontrola dostępu oparta na rolach (RBAC) platformy Azure umożliwia szczegółowe zarządzanie dostępem dla użytkowników, grup i zasobów platformy Azure. Dzięki kontroli dostępu opartej na rolach platformy Azure możesz udzielić wymaganego poziomu dostępu użytkownikom. Aby uzyskać więcej informacji o tym, jak kontrola dostępu na podstawie ról platformy Azure ułatwia zarządzanie dostępem, zobacz Co to jest kontrola dostępu oparta na rolach (RBAC) platformy Azure.
Rola Współautor strefy DNS
Rola Współautor strefy DNS jest wbudowaną rolą do zarządzania prywatnymi zasobami DNS. Ta rola zastosowana do użytkownika lub grupy umożliwia zarządzanie zasobami DNS.
Grupa zasobów myResourceGroup zawiera pięć stref dla firmy Contoso Corporation. Przyznanie administratorowi DNS uprawnień Współautor strefy DNS dla tej grupy zasobów umożliwia pełną kontrolę nad tymi strefami DNS. Pozwala uniknąć udzielania niepotrzebnych uprawnień. Administrator DNS nie może tworzyć ani zatrzymywać maszyn wirtualnych.
Najprostszym sposobem przypisania uprawnień RBAC platformy Azure jest użycie witryny Azure Portal.
Otwórz pozycję Kontrola dostępu (IAM) dla grupy zasobów, a następnie wybierz pozycję + Dodaj, a następnie wybierz rolę Współautor strefy DNS. Wybierz wymaganych użytkowników lub grupy, aby przyznać uprawnienia.
Uprawnienia można również przyznać przy użyciu programu 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
Równoważne polecenie jest również dostępne za pośrednictwem interfejsu wiersza polecenia platformy Azure:
# 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>"
Kontrola dostępu oparta na rolach platformy Azure na poziomie strefy
Reguły RBAC platformy Azure można stosować do subskrypcji, grupy zasobów lub pojedynczego zasobu. Ten zasób może być pojedynczą strefą DNS lub pojedynczym zestawem rekordów.
Na przykład grupa zasobów myResourceGroup zawiera strefę contoso.com i podstrefę customers.contoso.com. Rekordy CNAME są tworzone dla każdego konta klienta. Konto administratora używane do zarządzania rekordami CNAME ma przypisane uprawnienia do tworzenia rekordów w strefie customers.contoso.com . Konto może zarządzać tylko customers.contoso.com .
Uprawnienia RBAC platformy Azure na poziomie strefy można przyznać za pośrednictwem witryny Azure Portal. Otwórz pozycję Kontrola dostępu (IAM) dla strefy, wybierz pozycję + Dodaj, a następnie wybierz rolę Współautor strefy DNS i wybierz wymaganych użytkowników lub grup, aby udzielić uprawnień.
Uprawnienia można również przyznać przy użyciu programu 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
Równoważne polecenie jest również dostępne za pośrednictwem interfejsu wiersza polecenia platformy Azure:
# 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>/"
Poziom RBAC platformy Azure na poziomie zestawu rekordów
Uprawnienia są stosowane na poziomie zestawu rekordów. Użytkownik ma kontrolę nad wpisami, których potrzebują i nie może wprowadzić żadnych innych zmian.
Uprawnienia RBAC na poziomie zestawu rekordów platformy Azure można skonfigurować za pośrednictwem witryny Azure Portal przy użyciu przycisku Użytkownicy na stronie zestawu rekordów:
Uprawnienia kontroli dostępu opartej na rolach platformy Azure na poziomie zestawu rekordów można również przyznać przy użyciu programu 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
Równoważne polecenie jest również dostępne za pośrednictwem interfejsu wiersza polecenia platformy Azure:
# 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>"
Role niestandardowe
Wbudowana rola Współautor strefy DNS umożliwia pełną kontrolę nad zasobem DNS. Istnieje możliwość utworzenia własnych niestandardowych ról platformy Azure w celu zapewnienia bardziej szczegółowej kontroli.
Konto, które jest używane do zarządzania rekordami CNAM, ma uprawnienie tylko do zarządzania rekordami CNAME. Konto nie może modyfikować rekordów innych typów. Konto nie może wykonywać operacji na poziomie strefy, takich jak usuwanie strefy.
W poniższym przykładzie przedstawiono niestandardową definicję roli do zarządzania tylko rekordami 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"
]
}
Właściwość Actions definiuje następujące uprawnienia specyficzne dla systemu DNS:
Microsoft.Network/dnsZones/CNAME/*
zapewnia pełną kontrolę nad rekordami CNAMEMicrosoft.Network/dnsZones/read
udziela uprawnień do odczytu stref DNS, ale nie do ich modyfikowania, umożliwiając wyświetlanie strefy, w której jest tworzona nazwa CNAME.
Pozostałe akcje są kopiowane z wbudowanej roli Współautor strefy DNS.
Uwaga
Używanie roli niestandardowej platformy Azure w celu zapobiegania usuwaniu zestawów rekordów, a jednocześnie zezwalanie na ich aktualizowanie nie jest efektywną kontrolą. Zapobiega usuwaniu zestawów rekordów, ale nie uniemożliwia ich modyfikacji. Dozwolone modyfikacje obejmują dodawanie i usuwanie rekordów z zestawu rekordów, w tym usunięcie wszystkich rekordów w celu pozostawienia pustego zestawu rekordów. Ma to taki sam efekt jak usunięcie zestawu rekordów z punktu widzenia rozpoznawania nazw DNS.
Nie można obecnie definiować definicji ról niestandardowych za pośrednictwem witryny Azure Portal. Rolę niestandardową opartą na tej definicji roli można utworzyć przy użyciu programu Azure PowerShell:
# Create new role definition based on input file
New-AzRoleDefinition -InputFile <file path>
Można go również utworzyć za pomocą interfejsu wiersza polecenia platformy Azure:
# Create new role definition based on input file
az role definition create --role-definition <file path>
Następnie rolę można przypisać w taki sam sposób, jak role wbudowane, jak opisano wcześniej w tym artykule.
Aby uzyskać więcej informacji na temat tworzenia ról niestandardowych, zarządzania nimi i przypisywania ich, zobacz Role niestandardowe platformy Azure.
Blokady zasobów
Usługa Azure Resource Manager obsługuje inny typ kontroli zabezpieczeń, możliwość blokowania zasobów. Blokady zasobów są stosowane do zasobu i są skuteczne we wszystkich użytkownikach i rolach. Aby uzyskać więcej informacji, zobacz Lock resources with Azure Resource Manager (Blokowanie zasobów w usłudze Azure Resource Manager).
Istnieją dwa typy blokady zasobów: CanNotDelete i ReadOnly. Te typy blokad można zastosować do strefy Prywatna strefa DNS lub do pojedynczego zestawu rekordów. W poniższych sekcjach opisano kilka typowych scenariuszy i sposób ich obsługi przy użyciu blokad zasobów.
Ochrona przed wszystkimi zmianami
Aby zapobiec wprowadzeniu zmian, zastosuj blokadę ReadOnly do strefy. Ta blokada uniemożliwia tworzenie nowych zestawów rekordów, a istniejące zestawy rekordów nie są modyfikowane lub usuwane.
Blokady zasobów na poziomie strefy można utworzyć za pośrednictwem witryny Azure Portal. Na stronie strefy DNS wybierz pozycję Blokady, a następnie wybierz pozycję + Dodaj:
Blokady zasobów na poziomie strefy można również utworzyć za pomocą programu 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
Równoważne polecenie jest również dostępne za pośrednictwem interfejsu wiersza polecenia platformy Azure:
# 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>"
Ochrona poszczególnych rekordów
Aby zapobiec modyfikacji istniejącego zestawu rekordów DNS, zastosuj blokadę ReadOnly do zestawu rekordów.
Uwaga
Zastosowanie blokady CanNotDelete do zestawu rekordów nie jest efektywną kontrolą. Uniemożliwia usunięcie zestawu rekordów, ale nie uniemożliwia jego modyfikacji. Dozwolone modyfikacje obejmują dodawanie i usuwanie rekordów z zestawu rekordów, w tym usunięcie wszystkich rekordów w celu pozostawienia pustego zestawu rekordów. Ma to taki sam efekt jak usunięcie zestawu rekordów z punktu widzenia rozpoznawania nazw DNS.
Blokady zasobów na poziomie zestawu rekordów można obecnie konfigurować tylko przy użyciu programu Azure PowerShell. Nie są one obsługiwane w witrynie Azure Portal ani w interfejsie wiersza polecenia platformy Azure.
# 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
Ochrona przed usunięciem strefy
Gdy strefa zostanie usunięta w usłudze Azure DNS, wszystkie zestawy rekordów w strefie zostaną usunięte. Nie można cofnąć tej operacji. Przypadkowe usunięcie strefy krytycznej może mieć znaczący wpływ na działalność biznesową. Ważne jest, aby chronić przed przypadkowym usunięciem strefy.
Zastosowanie blokady CanNotDelete do strefy uniemożliwia usunięcie strefy. Blokady są dziedziczone przez zasoby podrzędne. Blokada uniemożliwia usunięcie wszystkich zestawów rekordów w strefie. Jak opisano w powyższej notatce, jest nieskuteczne, ponieważ rekordy mogą być nadal usuwane z istniejących zestawów rekordów.
Alternatywnie zastosuj blokadę CanNotDelete do zestawu rekordów w strefie, takiego jak zestaw rekordów SOA. Strefa nie jest usuwana bez usuwania również zestawów rekordów. Ta blokada chroni przed usunięciem strefy, jednocześnie zezwalając na swobodne modyfikowanie zestawów rekordów w strefie. Jeśli zostanie podjęta próba usunięcia strefy, usługa Azure Resource Manager wykryje to usunięcie. Usunięcie spowoduje również usunięcie zestawu rekordów SOA, usługa Azure Resource Manager blokuje wywołanie, ponieważ soa jest zablokowana. Nie są usuwane żadne zestawy rekordów.
Następujące polecenie programu PowerShell tworzy blokadę CanNotDelete względem rekordu SOA danej strefy:
# 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
Inną opcją zapobiegania przypadkowemu usunięciu strefy jest użycie roli niestandardowej. Ta rola zapewnia, że konta używane do zarządzania strefami nie mają uprawnień do usuwania strefy.
Gdy musisz usunąć strefę, możesz wymusić usunięcie dwuetapowe:
- Najpierw przyznaj uprawnienia do usuwania strefy
- Po drugie przyznaj uprawnienia do usuwania strefy.
Rola niestandardowa działa dla wszystkich stref, do których uzyskują dostęp te konta. Konta z uprawnieniami usuwania strefy, takimi jak właściciel subskrypcji, mogą nadal przypadkowo usunąć strefę.
Można użyć obu metod — blokad zasobów i ról niestandardowych — jednocześnie jako podejścia do ochrony strefy DNS.
Następne kroki
- Aby uzyskać więcej informacji na temat pracy z kontrolą dostępu opartą na rolach platformy Azure, zobacz Co to jest kontrola dostępu oparta na rolach (RBAC) platformy Azure.
- Aby uzyskać więcej informacji na temat pracy z blokadami zasobów, zobacz Blokowanie zasobów za pomocą usługi Azure Resource Manager.