Sdílet prostřednictvím


Jak chránit záznamy a zóny DNS

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Pokud chcete začít, přečtěte si téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Zóny a záznamy DNS jsou kritické prostředky. Odstraněním zóny DNS nebo jednoho záznamu DNS může dojít k výpadku služby. Proto je důležité, aby zóny a záznamy DNS byly chráněny proti neoprávněným a náhodným změnám.

Tento článek vysvětluje, jak azure DNS umožňuje chránit privátní zóny a záznamy DNS před těmito změnami. Používáme dvě výkonné funkce cenných papírů poskytované Azure Resource Managerem: řízení přístupu na základě role v Azure (Azure RBAC) a zámky prostředků.

Řízení přístupu na základě rolí Azure

Řízení přístupu na základě role v Azure (Azure RBAC) umožňuje jemně odstupňovanou správu přístupu pro uživatele, skupiny a prostředky Azure. Pomocí Azure RBAC můžete udělit úroveň přístupu, kterou uživatelé potřebují. Další informace o tom, jak Azure RBAC pomáhá spravovat přístup, najdete v tématu Co je řízení přístupu na základě role v Azure (Azure RBAC).

Role Přispěvatel zóny DNS

Role Přispěvatel zóny DNS je předdefinovaná role pro správu privátních prostředků DNS. Tato role použitá u uživatele nebo skupiny umožňuje spravovat prostředky DNS.

Skupina prostředků myResourceGroup obsahuje pět zón pro společnost Contoso. Udělení oprávnění přispěvatele zón DNS správci DNS této skupině prostředků umožňuje úplnou kontrolu nad těmito zónami DNS. Vyhne se udělení nepotřebných oprávnění. Správce DNS nemůže vytvořit nebo zastavit virtuální počítače.

Nejjednodušší způsob, jak přiřadit oprávnění Azure RBAC, je prostřednictvím webu Azure Portal.

Otevřete řízení přístupu (IAM) pro skupinu prostředků a pak vyberte + Přidat a pak vyberte roli Přispěvatel zóny DNS. Vyberte požadované uživatele nebo skupiny k udělení oprávnění.

Snímek obrazovky se stránkou řízení přístupu pro skupinu prostředků

Oprávnění je možné udělit také pomocí Azure PowerShellu:

# 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

Ekvivalentní příkaz je k dispozici také prostřednictvím Azure CLI:

# 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>"

Azure RBAC na úrovni zóny

Pravidla Azure RBAC je možné použít pro předplatné, skupinu prostředků nebo pro jednotlivé prostředky. Tento prostředek může být samostatná zóna DNS nebo jednotlivá sada záznamů.

Například skupina prostředků myResourceGroup obsahuje zónu contoso.com a podzone customers.contoso.com. Záznamy CNAME se vytvářejí pro každý účet zákazníka. Účet správce používaný ke správě záznamů CNAME má přiřazená oprávnění k vytváření záznamů v customers.contoso.com zóně. Účet může spravovat pouze customers.contoso.com .

Oprávnění Azure RBAC na úrovni zóny je možné udělit prostřednictvím webu Azure Portal. Otevřete řízení přístupu (IAM) pro zónu, vyberte + Přidat, pak vyberte roli Přispěvatel zóny DNS a vyberte požadované uživatele nebo skupiny pro udělení oprávnění.

Snímek obrazovky se stránkou řízení přístupu pro zónu DNS

Oprávnění je možné udělit také pomocí Azure PowerShellu:

# 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

Ekvivalentní příkaz je k dispozici také prostřednictvím Azure CLI:

# 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>/"

Úroveň sady záznamů v Azure RBAC

Oprávnění se použijí na úrovni sady záznamů. Uživateli je uděleno řízení položek, které potřebují, a nemůže provádět žádné jiné změny.

Oprávnění Azure RBAC na úrovni sady záznamů je možné nakonfigurovat prostřednictvím webu Azure Portal pomocí tlačítka Uživatelé na stránce sady záznamů:

Snímek obrazovky s tlačítkem uživatele v sadě záznamů

Oprávnění Azure RBAC na úrovni sady záznamů je také možné udělit pomocí Azure PowerShellu:

# 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

Ekvivalentní příkaz je k dispozici také prostřednictvím Azure CLI:

# 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>"

Vlastní role

Integrovaná role Přispěvatel zóny DNS umožňuje úplnou kontrolu nad prostředkem DNS. Je možné vytvořit vlastní role Azure, které poskytují jemně odstupňované řízení.

Účet, který slouží ke správě CNAMEs, má udělená oprávnění pouze ke správě záznamů CNAME. Účet nemůže upravovat záznamy jiných typů. Účet nemůže provádět operace na úrovni zóny, jako je odstranění zóny.

Následující příklad ukazuje vlastní definici role pro správu záznamů CNAME pouze:

{
    "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"
    ]
}

Vlastnost Actions definuje následující oprávnění specifická pro DNS:

  • Microsoft.Network/dnsZones/CNAME/* uděluje úplnou kontrolu nad záznamy CNAME.
  • Microsoft.Network/dnsZones/read uděluje oprávnění ke čtení zón DNS, ale ne ke změně, což vám umožní zobrazit zónu, ve které se CNAME vytváří.

Zbývající akce se zkopírují z předdefinované role Přispěvatel zóny DNS.

Poznámka:

Použití vlastní role Azure, aby se zabránilo odstranění sad záznamů, zatímco jejich aktualizace stále umožňuje, není efektivní kontrolou. Zabrání odstranění sad záznamů, ale nezabrání jejich úpravám. Povolené úpravy zahrnují přidávání a odebírání záznamů ze sady záznamů, včetně odebrání všech záznamů, aby se nechala prázdná sada záznamů. To má stejný účinek jako odstranění sady záznamů z pohledu překladu DNS.

Definice vlastních rolí se v současné době nedají definovat prostřednictvím webu Azure Portal. Vlastní roli založenou na této definici role je možné vytvořit pomocí Azure PowerShellu:

# Create new role definition based on input file
New-AzRoleDefinition -InputFile <file path>

Můžete ho také vytvořit pomocí Azure CLI:

# Create new role definition based on input file
az role definition create --role-definition <file path>

Roli pak můžete přiřadit stejným způsobem jako předdefinované role, jak je popsáno výše v tomto článku.

Další informace o vytváření, správě a přiřazování vlastních rolí najdete v tématu Vlastní role Azure.

Zámky prostředků

Azure Resource Manager podporuje jiný typ řízení zabezpečení, možnost uzamknout prostředky. Zámky prostředků se použijí na prostředek a jsou efektivní pro všechny uživatele a role. Další informace najdete v tématu Zamknutí prostředků pomocí Azure Resource Manageru.

Existují dva typy zámku prostředků: CanNotDelete a ReadOnly. Tyto typy zámků lze použít buď na Privátní DNS zónu, nebo na jednotlivou sadu záznamů. Následující části popisují několik běžných scénářů a jejich podporu pomocí zámků prostředků.

Ochrana proti všem změnám

Pokud chcete zabránit provedení změn, použijte u zóny zámek Jen pro čtení. Tento zámek zabraňuje vytváření nových sad záznamů a stávající sady záznamů se neupravují nebo odstraňují.

Zámky prostředků na úrovni zóny je možné vytvořit prostřednictvím webu Azure Portal. Na stránce zóny DNS vyberte Zámky a pak vyberte + Přidat:

Snímek obrazovky se zámky prostředků na úrovni zóny

Zámky prostředků na úrovni zóny je možné vytvořit také prostřednictvím Azure PowerShellu:

# 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

Ekvivalentní příkaz je k dispozici také prostřednictvím 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 "DnsZones" \
--resource-group "<resource group name>"

Ochrana jednotlivých záznamů

Pokud chcete zabránit stávající sadě záznamů DNS proti úpravám, použijte u sady záznamů zámek ReadOnly.

Poznámka:

Použití zámku CanNotDelete u sady záznamů není efektivním ovládacím prvek. Zabrání odstranění sady záznamů, ale nezabrání jeho úpravě. Povolené úpravy zahrnují přidávání a odebírání záznamů ze sady záznamů, včetně odebrání všech záznamů, aby se nechala prázdná sada záznamů. To má stejný účinek jako odstranění sady záznamů z pohledu překladu DNS.

Zámky prostředků na úrovni sady záznamů je v současné době možné konfigurovat pouze pomocí Azure PowerShellu. Nejsou podporované na webu Azure Portal ani v Azure CLI.

# 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

Ochrana před odstraněním zóny

Při odstranění zóny v Azure DNS se odstraní všechny sady záznamů v zóně. Tuto operaci nelze vrátit zpět. Náhodné odstranění kritické zóny může mít významný obchodní dopad. Je důležité chránit před náhodným odstraněním zóny.

Použití zámku CanNotDelete v zóně brání odstranění zóny. Zámky dědí podřízené prostředky. Zámek zabraňuje odstranění všech sad záznamů v zóně. Jak je popsáno v poznámce výše, je neefektivní, protože záznamy je možné ze stávajících sad záznamů odebrat.

Jako alternativu použijte zámek CanNotDelete u sady záznamů v zóně, jako je sada záznamů SOA. Zóna se neodstraní bez odstranění sad záznamů. Tento zámek chrání před odstraněním zóny a zároveň umožňuje volně upravovat sady záznamů v rámci zóny. Pokud dojde k pokusu o odstranění zóny, Azure Resource Manager zjistí toto odebrání. Odebrání by také odstranilo sadu záznamů SOA, Azure Resource Manager blokuje volání, protože SOA je uzamčený. Nejsou odstraněny žádné sady záznamů.

Následující příkaz PowerShellu vytvoří zámek CanNotDelete pro záznam SOA dané zóny:

# 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

Další možností, jak zabránit náhodnému odstranění zóny, je použití vlastní role. Tato role zajišťuje, že účty používané ke správě zón nemají oprávnění k odstranění zóny.

Pokud potřebujete odstranit zónu, můžete vynutit dvoustupňové odstranění:

  • Nejprve udělte oprávnění k odstranění zóny.
  • Za druhé udělte oprávnění k odstranění zóny.

Vlastní role funguje pro všechny zóny, ke které tyto účty přistupují. Účty s oprávněními k odstranění zóny, jako je například vlastník předplatného, můžou zónu přesto omylem odstranit.

Oba přístupy – zámky prostředků a vlastní role – je možné používat současně jako hloubkový přístup k ochraně zón DNS.

Další kroky