Jak chronić strefy i rekordy DNS

Uwaga

Zalecamy korzystanie z modułu Azure Az programu PowerShell do interakcji z platformą Azure. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. 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 zapewniane przez usługę Azure Resource Manager: Kontrola dostępu oparta na rolach platformy Azure (Azure RBAC) 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 na temat sposobu zarządzania dostępem na podstawie ról platformy Azure, 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. Udzielanie administratorowi DNS uprawnień Współautor strefy DNS dla tej grupy zasobów umożliwia pełną kontrolę nad tymi strefami DNS. Unika udzielania niepotrzebnych uprawnień. Administrator DNS nie może tworzyć ani zatrzymywać maszyn wirtualnych.

Najprostszym sposobem przypisywania uprawnień RBAC platformy Azure jest użycie 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 udzielić uprawnień.

Zrzut ekranu przedstawiający stronę kontroli dostępu dla grupy zasobów.

Uprawnienia można również przyznać przy użyciu 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 zastosować do subskrypcji, grupy zasobów lub pojedynczego zasobu. Ten zasób może być indywidualną strefą DNS lub pojedynczym zestawem rekordów.

Na przykład grupa zasobów myResourceGroup zawiera strefę contoso.com i podzone 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 kontroli dostępu opartej na rolach platformy Azure na poziomie strefy można przyznać za pośrednictwem 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ń.

Zrzut ekranu przedstawiający stronę kontroli dostępu dla strefy DNS.

Uprawnienia można również przyznać przy użyciu 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>/"

Kontrola dostępu oparta na rolach platformy Azure na poziomie zestawu rekordów

Uprawnienia są stosowane na poziomie zestawu rekordów. Użytkownik otrzymuje kontrolę nad wpisami, których potrzebują i nie może wprowadzić żadnych innych zmian.

Uprawnienia kontroli dostępu opartej na rolach platformy Azure na poziomie rekordów można skonfigurować za pomocą Azure Portal, używając przycisku Użytkownicy na stronie zestawu rekordów:

Zrzut ekranu przedstawiający przycisk użytkownika w zestawie rekordów.

Uprawnienia kontroli dostępu opartej na rolach platformy Azure na poziomie zestawu rekordów można również przyznać przy użyciu 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 używane do zarządzania rekordami CAME 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/c276fc76-9cd4-44c9-99a7-4fd71546436e"
    ]
}

Właściwość Actions definiuje następujące uprawnienia specyficzne dla systemu DNS:

  • Microsoft.Network/dnsZones/CNAME/* zapewnia pełną kontrolę nad rekordami CNAME
  • Microsoft.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 ich aktualizowanie nie jest efektywną kontrolą. Uniemożliwia usunięcie zestawów rekordów, ale nie uniemożliwia ich modyfikowania. Dozwolone modyfikacje obejmują dodawanie i usuwanie rekordów z zestawu rekordów, w tym usuwanie 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.

Definicje ról niestandardowych nie mogą być obecnie zdefiniowane za pośrednictwem Azure Portal. Rolę niestandardową opartą na tej definicji roli można utworzyć przy użyciu 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 Azure Portal. Na stronie strefy DNS wybierz pozycję Blokady, a następnie wybierz pozycję + Dodaj:

Zrzut ekranu przedstawiający blokady zasobów na poziomie strefy.

Blokady zasobów na poziomie strefy można również utworzyć za pośrednictwem 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ą kontrolką. 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 usuwanie 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 Azure PowerShell. Nie są one obsługiwane w 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

Po usunięciu strefy 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 firmę. 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, a jednocześnie pozwala 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. Żadne zestawy rekordów nie są usuwane.

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.

Jeśli 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 — w tym samym czasie, co podejście do ochrony strefy DNS w głębi systemu .

Następne kroki