Så här skyddar du DNS-zoner och -poster

Anteckning

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

DNS-zoner och -poster är viktiga resurser. Om du tar bort en DNS-zon eller en enskild DNS-post kan det leda till avbrott i tjänsten. Det är viktigt att DNS-zoner och -poster skyddas mot obehöriga eller oavsiktliga ändringar.

Den här artikeln beskriver hur Azure DNS gör att du kan skydda dina privata DNS-zoner och poster mot sådana ändringar. Vi tillämpar två kraftfulla värdepappersfunktioner som tillhandahålls av Azure Resource Manager: Rollbaserad åtkomstkontroll i Azure (Azure RBAC) och resurslås.

Rollbaserad Azure-åtkomstkontroll

Rollbaserad åtkomstkontroll i Azure (Azure RBAC) möjliggör detaljerad åtkomsthantering för Azure-användare, grupper och resurser. Med Azure RBAC kan du bevilja den åtkomstnivå som användarna behöver. Mer information om hur Azure RBAC hjälper dig att hantera åtkomst finns i Vad är rollbaserad åtkomstkontroll i Azure (Azure RBAC).

Rollen DNS-zondeltagare

Rollen DNS-zondeltagare är en inbyggd roll för att hantera privata DNS-resurser. Den här rollen som tillämpas på en användare eller grupp gör det möjligt för dem att hantera DNS-resurser.

Resursgruppen myResourceGroup innehåller fem zoner för Contoso Corporation. Genom att ge DNS-administratören behörighet som DNS-zondeltagare till den resursgruppen får du fullständig kontroll över dessa DNS-zoner. Den undviker att bevilja onödiga behörigheter. DNS-administratören kan inte skapa eller stoppa virtuella datorer.

Det enklaste sättet att tilldela Azure RBAC-behörigheter är via Azure Portal.

Öppna Åtkomstkontroll (IAM) för resursgruppen, välj + Lägg till och välj sedan rollen DNS-zondeltagare . Välj de användare eller grupper som krävs för att bevilja behörigheter.

Skärmbild av åtkomstkontrollsidan för resursgruppen.

Behörigheter kan också beviljas med hjälp av 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

Motsvarande kommando är också tillgängligt via 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 på zonnivå

Azure RBAC-regler kan tillämpas på en prenumeration, en resursgrupp eller på en enskild resurs. Den resursen kan vara en enskild DNS-zon eller en enskild postuppsättning.

Resursgruppen myResourceGroup innehåller till exempel zonen contoso.com och en customers.contoso.com. CNAME-poster skapas för varje kundkonto. Administratörskontot som används för att hantera CNAME-poster tilldelas behörighet att skapa poster i customers.contoso.com-zonen . Kontot kan endast hantera customers.contoso.com .

Azure RBAC-behörigheter på zonnivå kan beviljas via Azure Portal. Öppna Åtkomstkontroll (IAM) för zonen, välj + Lägg till, välj sedan rollen DNS-zondeltagare och välj de användare eller grupper som krävs för att bevilja behörigheter.

Skärmbild av åtkomstkontrollsidan för DNS-zonen.

Behörigheter kan också beviljas med hjälp av 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

Motsvarande kommando är också tillgängligt via 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>/"

Postuppsättningsnivå För Azure RBAC

Behörigheter tillämpas på postuppsättningsnivå. Användaren beviljas kontroll för de poster som de behöver och kan inte göra några andra ändringar.

Azure RBAC-behörigheter på postuppsättningsnivå kan konfigureras via Azure Portal med hjälp av knappen Användare på postuppsättningssidan:

Skärmbild av användarknappen i postuppsättningen.

Azure RBAC-behörigheter på postuppsättningsnivå kan också beviljas med hjälp av 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

Motsvarande kommando är också tillgängligt via 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>"

Anpassade roller

Den inbyggda rollen DNS-zondeltagare ger fullständig kontroll över en DNS-resurs. Det går att skapa egna anpassade Azure-roller för att ge mer detaljerad kontroll.

Kontot som används för att hantera CAME:er beviljas endast behörighet att hantera CNAME-poster. Kontot kan inte ändra poster av andra typer. Kontot kan inte utföra åtgärder på zonnivå, till exempel zonborttagning.

I följande exempel visas en anpassad rolldefinition för att endast hantera CNAME-poster:

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

Egenskapen Actions definierar följande DNS-specifika behörigheter:

  • Microsoft.Network/dnsZones/CNAME/* ger fullständig kontroll över CNAME-poster
  • Microsoft.Network/dnsZones/read ger behörighet att läsa DNS-zoner, men inte ändra dem, så att du kan se zonen där CNAME skapas.

De återstående åtgärderna kopieras från den inbyggda rollen DNS-zondeltagare.

Anteckning

Att använda en anpassad Azure-roll för att förhindra att postuppsättningar tas bort samtidigt som de fortfarande kan uppdateras är inte en effektiv kontroll. Det förhindrar att postuppsättningar tas bort, men det förhindrar inte att de ändras. Tillåtna ändringar inkluderar att lägga till och ta bort poster från postuppsättningen, inklusive att ta bort alla poster för att lämna en tom postuppsättning. Detta har samma effekt som att ta bort postuppsättningen från en DNS-matchningssynpunkt.

Anpassade rolldefinitioner kan för närvarande inte definieras via Azure Portal. En anpassad roll som baseras på den här rolldefinitionen kan skapas med hjälp av Azure PowerShell:

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

Den kan också skapas via Azure CLI:

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

Rollen kan sedan tilldelas på samma sätt som inbyggda roller, enligt beskrivningen tidigare i den här artikeln.

Mer information om hur du skapar, hanterar och tilldelar anpassade roller finns i Anpassade Azure-roller.

Resurslås

Azure Resource Manager stöder en annan typ av säkerhetskontroll, möjligheten att låsa resurser. Resurslås tillämpas på resursen och är effektiva för alla användare och roller. Mer information finns i Låsa resurser med Azure Resource Manager.

Det finns två typer av resurslås: CanNotDelete och ReadOnly. Dessa låstyper kan tillämpas antingen på en Privat DNS zon eller på en enskild postuppsättning. I följande avsnitt beskrivs flera vanliga scenarier och hur du stöder dem med hjälp av resurslås.

Skydda mot alla ändringar

Om du vill förhindra att ändringar görs tillämpar du ett ReadOnly-lås på zonen. Det här låset förhindrar att nya postuppsättningar skapas och befintliga postuppsättningar ändras eller tas bort.

Resurslås på zonnivå kan skapas via Azure Portal. På sidan DNS-zon väljer du Lås och sedan + Lägg till:

Skärmbild av resurslås på zonnivå.

Resurslås på zonnivå kan också skapas via 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

Motsvarande kommando är också tillgängligt via 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>"

Skydda enskilda poster

Om du vill förhindra att en befintlig DNS-postuppsättning ändras använder du ett ReadOnly-lås på postuppsättningen.

Anteckning

Att tillämpa ett CanNotDelete-lås på en postuppsättning är inte en effektiv kontroll. Det förhindrar att postuppsättningen tas bort, men den förhindrar inte att den ändras. Tillåtna ändringar inkluderar att lägga till och ta bort poster från postuppsättningen, inklusive att ta bort alla poster för att lämna en tom postuppsättning. Detta har samma effekt som att ta bort postuppsättningen från en DNS-matchningssynpunkt.

Resurslås på postuppsättningsnivå kan för närvarande bara konfigureras med hjälp av Azure PowerShell. De stöds inte i Azure Portal eller 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

Skydda mot borttagning av zoner

När en zon tas bort i Azure DNS tas alla postuppsättningar i zonen bort. Det går inte att ångra den här åtgärden. Att oavsiktligt ta bort en kritisk zon kan ha en betydande inverkan på verksamheten. Det är viktigt att skydda mot oavsiktlig borttagning av zonen.

Om du tillämpar ett CanNotDelete-lås på en zon förhindras zonen från att tas bort. Lås ärvs av underordnade resurser. Ett lås förhindrar att postuppsättningar i zonen tas bort. Som beskrivs i anteckningen ovan är det ineffektivt eftersom poster fortfarande kan tas bort från befintliga postuppsättningar.

Du kan också använda ett CanNotDelete-lås på en postuppsättning i zonen, till exempel SOA-postuppsättningen. Zonen tas inte bort utan att postuppsättningarna tas bort. Det här låset skyddar mot borttagning av zoner, samtidigt som postuppsättningar i zonen kan ändras fritt. Om ett försök görs att ta bort zonen identifierar Azure Resource Manager borttagningen. Borttagningen skulle också ta bort SOA-postuppsättningen, Azure Resource Manager blockerar anropet eftersom SOA är låst. Inga postuppsättningar tas bort.

Följande PowerShell-kommando skapar ett CanNotDelete-lås mot SOA-posten för den angivna zonen:

# 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

Ett annat alternativ för att förhindra oavsiktlig borttagning av zonen är att använda en anpassad roll. Den här rollen säkerställer att de konton som används för att hantera dina zoner inte har zonborttagningsbehörigheter.

När du behöver ta bort en zon kan du framtvinga en tvåstegsborttagning:

  • Först beviljar du zonborttagningsbehörigheter
  • För det andra beviljar du behörighet att ta bort zonen.

Den anpassade rollen fungerar för alla zoner som används av dessa konton. Konton med zonborttagningsbehörigheter, till exempel prenumerationsägaren, kan fortfarande av misstag ta bort en zon.

Det är möjligt att använda båda metoderna – resurslås och anpassade roller – samtidigt som en djupgående skyddsmetod för DNS-zonskydd.

Nästa steg