Jak chránit záznamy a zóny privátního DNS

Poznámka

K interakci s Azure doporučujeme použít modul Azure Az PowerShell. Začněte tím, že si projdete 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.

Privátní DNS zón a záznamů jsou důležité 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ů, které poskytuje Azure Resource Manager: řízení přístupu na základě role v Azure (Azure RBAC) a zámky prostředků.

Řízení přístupu na základě role v 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 Privátní DNS

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

Skupina prostředků myPrivateDNS obsahuje pět zón pro Společnost Contoso. Udělení oprávnění k této skupině prostředků správci DNS Privátní DNS Přispěvatel zóny umožní úplnou kontrolu nad těmito zónami DNS. Vyhnete se tak udělení zbytečných oprávnění. Správce DNS nemůže vytvářet ani zastavovat virtuální počítače.

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

Otevřete řízení přístupu (IAM) pro skupinu prostředků, vyberte Přidat a pak vyberte roli přispěvatele Privátní DNS zón. Vyberte požadované uživatele nebo skupiny, které mají udělit oprávnění.

Snímek obrazovky s RBAC pro skupinu prostředků privátního DNS

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

# Grant 'Private DNS Zone Contributor' permissions to all zones in a resource group

$rsg = "<resource group name>"
$usr = "<user email address>"
$rol = "Private DNS Zone Contributor"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -ResourceGroupName $rsg

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

# Grant 'Private DNS Zone Contributor' permissions to all zones in a resource group

az role assignment create \
--assignee "<user email address>" \
--role "Private DNS Zone Contributor" \
--resource-group "<resource group name>"

Azure RBAC na úrovni privátní zóny

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

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

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

Snímek obrazovky RBAC pro privátní zónu DNS

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

# Grant 'Private DNS Zone Contributor' permissions to a specific zone

$rsg = "<resource group name>"
$usr = "<user email address>"
$zon = "<zone name>"
$rol = "Private DNS Zone Contributor"
$rsc = "Microsoft.Network/privateDnsZones"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -ResourceGroupName $rsg -ResourceName $zon -ResourceType $rsc

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

# Grant 'Private DNS Zone Contributor' permissions to a specific zone

az role assignment create \
--assignee <user email address> \
--role "Private DNS Zone Contributor" \
--scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateDnsZones/<zone name>/"

Azure RBAC na úrovni sady záznamů

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

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

Snímek obrazovky s RBAC pro privátní sadu záznamů DNS

Snímek obrazovky s přiřazením role pro privátní sadu záznamů DNS

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

# Grant permissions to a specific record set

$usr = "<user email address>"
$rol = "Private DNS Zone Contributor"
$sco = 
"/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateDnsZones/<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 "Private DNS Zone Contributor" \
--scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateDnsZones/<zone name>/<record type>/<record name>"

Vlastní role

Integrovaná role Přispěvatel zóny Privátní 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ý se používá ke správě CNAME, 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 definici vlastní role pouze pro správu záznamů CNAME:

{
    "Name": "Private DNS CNAME Contributor",
    "Id": "",
    "IsCustom": true,
    "Description": "Can manage DNS CNAME records only.",
    "Actions": [
        "Microsoft.Network/privateDnsZones/CNAME/*",
        "Microsoft.Network/privateDNSZones/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/privateDnsZones/CNAME/* uděluje úplnou kontrolu nad záznamy CNAME.
  • Microsoft.Network/privateDNSZones/read uděluje oprávnění ke čtení privátních zón DNS, ale ne k jejich úpravě, což vám umožní zobrazit zónu, ve které se CNAME vytváří.

Poznámka

Použití vlastní role Azure k zabránění odstranění sad záznamů a jejich aktualizaci není efektivní. Brání odstranění sad záznamů, ale nebrání jejich úpravám. Mezi povolené úpravy patří přidání a odebrání záznamů ze sady záznamů, včetně odebrání všech záznamů, aby se ponechala prázdná sada záznamů. To má stejný účinek jako odstranění sady záznamů z pohledu překladu DNS.

Vlastní definice rolí se momentálně nedají definovat prostřednictvím Azure Portal. Vlastní roli založenou na této definici role je možné vytvořit pomocí Azure PowerShell:

# 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 create -inputfile <file path>

Role se pak dá 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 účinné 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ů se dají použít buď na zónu Privátní DNS, nebo na jednotlivé sady záznamů. Následující části popisují několik běžných scénářů a způsob jejich podpory pomocí zámků prostředků.

Ochrana před všemi změnami

Pokud chcete zabránit provedení změn, použijte na zónu zámek Jen pro čtení. Tento zámek zabrání vytvoření nových sad záznamů a úpravě nebo odstranění existujících sad záznamů.

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

Snímek obrazovky se zámky pro privátní zónu DNS

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

# Lock a DNS zone

$lvl = "<lock level>"
$lnm = "<lock name>"
$rsc = "<zone name>"
$rty = "Microsoft.Network/privateDnsZones"
$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 "privateDnsZones" \
--resource-group "<resource group name>"

Ochrana jednotlivých záznamů

Pokud chcete zabránit úpravám stávající sady záznamů DNS, použijte u sady záznamů zámek Jen pro čtení.

Poznámka

Použití zámku CanNotDelete na sadu záznamů není efektivní ovládací prvek. Zabrání odstranění sady záznamů, ale nezabrání jejím úpravám. Mezi povolené úpravy patří přidání a odebrání záznamů ze sady záznamů, včetně odebrání všech záznamů, aby se ponechala 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 PowerShell. Nejsou podporované v Azure Portal ani v Azure CLI.

Azure PowerShell

# Lock a DNS record set

$lvl = "<lock level>"
$lnm = "<lock name>"
$rnm = "<zone name>/<record set name>"
$rty = "Microsoft.Network/privateDnsZones/<record type>"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rnm -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 této zóně. Tuto operaci nelze vrátit zpět. Náhodné odstranění kritické zóny může mít významný dopad na firmu. Je důležité chránit před náhodným odstraněním zóny.

Použití zámku CanNotDelete u zóny zabrá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 to neefektivní, protože záznamy je stále možné odebrat z existujících sad záznamů.

Alternativně můžete použít zámek CanNotDelete na sadu záznamů v zóně, jako je například sada záznamů SOA. Zóna se neodstraní, aniž by se odstranily také sady záznamů. Tento zámek chrání před odstraněním zóny a současně umožňuje volně upravovat sady záznamů v rámci zóny. Pokud dojde k pokusu o odstranění zóny, Azure Resource Manager toto odebrání zjistí. Odebrání by také odstranilo sadu záznamů SOA, Azure Resource Manager blokuje volání, protože soa je uzamčená. Nebudou 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>"
$rnm = "<zone name>/@"
$rty = "Microsoft.Network/privateDnsZones/SOA"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rnm -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 odstranění ve dvou krocích:

  • 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ým 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 odstranit omylem.

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

Další kroky