Jak chránit záznamy a zóny 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.

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ů, 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 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á pro uživatele nebo skupinu umožňuje spravovat prostředky DNS.

Skupina prostředků myResourceGroup obsahuje pět zón pro společnost Contoso Corporation. Udělení oprávnění přispěvatele zón DNS správce DNS této skupině prostředků umožňuje úplnou kontrolu nad těmito zónami DNS. Vyhne se 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ů, pak vyberte + Přidat a pak vyberte roli Přispěvatel zóny DNS . Vyberte požadované uživatele nebo skupiny, které mají udělit oprávnění.

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

Oprávnění je také možné udělit pomocí 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

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 na předplatné, skupinu prostředků nebo na jednotlivé prostředky. Tímto prostředkem může být samostatná zóna DNS nebo jednotlivá sada záznamů.

Například skupina prostředků myResourceGroup obsahuje contoso.com zóny a customers.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.contoso.com . Účet může spravovat jenom customers.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, pak vyberte roli Přispěvatel zóny DNS a vyberte požadované uživatele nebo skupiny, které mají udělit oprávnění.

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

Oprávnění je také možné udělit pomocí 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

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

Azure RBAC na úrovni sady záznamů

Oprávnění se použijí na úrovni sady záznamů. Uživatel má udělený ovládací prvek pro položky, 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 Uživatelé na stránce sady záznamů:

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

Oprávnění Azure RBAC na úrovni sady záznamů je také možné udělit pomocí 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

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ón 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 vlastní definici role pro správu pouze záznamů 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"
    ]
}

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 k jejich úpravám, 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, která zabrání odstranění sad záznamů a zároveň umožní jejich aktualizaci, není efektivním řízením. Brání odstranění sad záznamů, ale nebrání jejich změná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 nechala prázdná sada záznamů. To má stejný účinek jako odstranění sady záznamů z pohledu překladu DNS.

Vlastní definice rolí se v současné době 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 prostřednictvím Azure CLI:

# Create new role definition based on input file
az role definition create --role-definition <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í, schopnost zamknout 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ámků prostředků: CanNotDelete a ReadOnly. Tyto typy zámků je možné použít buď na Privátní DNS zónu, nebo na jednotlivé sady záznamů. Následující části popisují několik běžných scénářů a jejich podporu 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 zabraňuje vytvář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é vytvořit prostřednictvím 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 také možné vytvořit prostřednictvím 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

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 úpravám existující sady záznamů DNS, použijte na sadu 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 změná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 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 PowerShell. Nejsou podporované v 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 na zónu 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>"
$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 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