DNS-zones en -records beschermen

Notitie

U wordt aangeraden de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

DNS-zones en -records zijn essentiële resources. Als u een DNS-zone of één DNS-record verwijdert, kan dit leiden tot een storing in de service. Het is belangrijk dat DNS-zones en -records worden beveiligd tegen niet-geautoriseerde of onbedoelde wijzigingen.

In dit artikel wordt uitgelegd hoe u met Azure DNS uw privé-DNS-zones en -records kunt beveiligen tegen dergelijke wijzigingen. We passen twee krachtige effectenfuncties van Azure Resource Manager toe: op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) en resourcevergrendelingen.

Op rollen gebaseerd toegangsbeheer voor Azure

Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) maakt fijnmazig toegangsbeheer mogelijk voor Azure-gebruikers, -groepen en -resources. Met Azure RBAC kunt u het toegangsniveau verlenen dat gebruikers nodig hebben. Zie Wat is op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC)) voor meer informatie over hoe Azure RBAC u helpt bij het beheren van toegang.

De rol Inzender voor DNS-zone

De rol Inzender dns-zone is een ingebouwde rol voor het beheren van privé-DNS-resources. Met deze rol die wordt toegepast op een gebruiker of groep, kunnen ze DNS-resources beheren.

De resourcegroep myResourceGroup bevat vijf zones voor Contoso Corporation. Door de DNS-beheerder machtigingen voor inzender voor DNS-zones toe te kennen aan die resourcegroep, wordt volledige controle over deze DNS-zones mogelijk. Hiermee voorkomt u het verlenen van onnodige machtigingen. De DNS-beheerder kan geen virtuele machines maken of stoppen.

De eenvoudigste manier om Azure RBAC-machtigingen toe te wijzen, is via de Azure Portal.

Open Toegangsbeheer (IAM) voor de resourcegroep, selecteer + Toevoegen en selecteer vervolgens de rol Inzender voor DNS-zone . Selecteer de vereiste gebruikers of groepen om machtigingen te verlenen.

Schermopname van de pagina toegangsbeheer voor de resourcegroep.

Machtigingen kunnen ook worden verleend met behulp van 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

De equivalente opdracht is ook beschikbaar via de 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 op zoneniveau

Azure RBAC-regels kunnen worden toegepast op een abonnement, een resourcegroep of een afzonderlijke resource. Deze resource kan een afzonderlijke DNS-zone of een afzonderlijke recordset zijn.

De resourcegroep myResourceGroup bevat bijvoorbeeld de zone contoso.com en een subzone customers.contoso.com. CNAME-records worden gemaakt voor elk klantaccount. Aan het beheerdersaccount dat wordt gebruikt voor het beheren van CNAME-records, zijn machtigingen toegewezen voor het maken van records in de customers.contoso.com zone. Het account kan alleen customers.contoso.com beheren.

Azure RBAC-machtigingen op zoneniveau kunnen worden verleend via de Azure Portal. Open Toegangsbeheer (IAM) voor de zone, selecteer + Toevoegen, selecteer vervolgens de rol Inzender voor DNS-zone en selecteer de vereiste gebruikers of groepen om machtigingen te verlenen.

Schermopname van de pagina toegangsbeheer voor DE DNS-zone.

Machtigingen kunnen ook worden verleend met behulp van 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

De equivalente opdracht is ook beschikbaar via de 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 op recordniveau

Machtigingen worden toegepast op het niveau van de recordset. De gebruiker krijgt het beheer over vermeldingen die hij nodig heeft en kan geen andere wijzigingen aanbrengen.

Azure RBAC-machtigingen op recordsetniveau kunnen worden geconfigureerd via de Azure Portal, met behulp van de knop Gebruikers op de pagina voor het instellen van records:

Schermopname van de knop Gebruiker in de recordset.

Azure RBAC-machtigingen op recordsetniveau kunnen ook worden verleend met behulp van 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

De equivalente opdracht is ook beschikbaar via de 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>"

Aangepaste rollen

De ingebouwde rol Inzender voor DNS-zone maakt volledige controle over een DNS-resource mogelijk. Het is mogelijk om uw eigen aangepaste Azure-rollen te bouwen om nauwkeuriger beheer te bieden.

Het account dat wordt gebruikt voor het beheren van CNAME-records krijgt alleen toestemming om CNAME-records te beheren. Het account kan geen records van andere typen wijzigen. Het account kan geen bewerkingen op zoneniveau uitvoeren, zoals het verwijderen van een zone.

In het volgende voorbeeld ziet u een aangepaste roldefinitie voor alleen het beheren van CNAME-records:

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

De eigenschap Actions definieert de volgende DNS-specifieke machtigingen:

  • Microsoft.Network/dnsZones/CNAME/* verleent volledige controle over CNAME-records
  • Microsoft.Network/dnsZones/read verleent toestemming om DNS-zones te lezen, maar niet om ze te wijzigen, zodat u de zone kunt zien waarin de CNAME wordt gemaakt.

De resterende acties worden gekopieerd uit de ingebouwde rol Inzender voor DNS-zones.

Notitie

Het gebruik van een aangepaste Azure-rol om te voorkomen dat recordsets worden verwijderd terwijl ze toch kunnen worden bijgewerkt, is geen effectief besturingselement. Hiermee voorkomt u dat recordsets worden verwijderd, maar niet dat ze worden gewijzigd. Toegestane wijzigingen omvatten het toevoegen en verwijderen van records uit de recordset, waaronder het verwijderen van alle records om een lege recordset achter te laten. Dit heeft hetzelfde effect als het verwijderen van de recordset vanuit het oogpunt van DNS-omzetting.

Aangepaste roldefinities kunnen momenteel niet worden gedefinieerd via de Azure Portal. Een aangepaste rol op basis van deze roldefinitie kan worden gemaakt met behulp van Azure PowerShell:

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

Het kan ook worden gemaakt via de Azure CLI:

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

De rol kan vervolgens op dezelfde manier worden toegewezen als ingebouwde rollen, zoals eerder in dit artikel is beschreven.

Zie Aangepaste Azure-rollen voor meer informatie over het maken, beheren en toewijzen van aangepaste rollen.

Resourcevergrendelingen

Azure Resource Manager biedt ondersteuning voor een ander type beveiligingsbeheer, namelijk de mogelijkheid om resources te vergrendelen. Resourcevergrendelingen worden toegepast op de resource en zijn effectief voor alle gebruikers en rollen. Zie voor meer informatie Resources vergrendelen met Azure Resource Manager.

Er zijn twee typen resourcevergrendeling: CanNotDelete en ReadOnly. Deze vergrendelingstypen kunnen worden toegepast op een Privé-DNS zone of op een afzonderlijke recordset. In de volgende secties worden verschillende veelvoorkomende scenario's beschreven en hoe u deze kunt ondersteunen met behulp van resourcevergrendelingen.

Bescherming tegen alle wijzigingen

Als u wilt voorkomen dat er wijzigingen worden aangebracht, past u een ReadOnly-vergrendeling toe op de zone. Deze vergrendeling voorkomt dat nieuwe recordsets worden gemaakt en dat bestaande recordsets worden gewijzigd of verwijderd.

Resourcevergrendelingen op zoneniveau kunnen worden gemaakt via de Azure Portal. Selecteer op de pagina DNS-zone de optie Vergrendelingen en selecteer vervolgens + Toevoegen:

Schermopname van resourcevergrendelingen op zoneniveau.

Resourcevergrendelingen op zoneniveau kunnen ook worden gemaakt 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

De equivalente opdracht is ook beschikbaar via de 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>"

Afzonderlijke records beveiligen

Als u wilt voorkomen dat een bestaande DNS-record wordt gewijzigd, past u een ReadOnly-vergrendeling toe op de recordset.

Notitie

Het toepassen van een CanNotDelete-vergrendeling op een recordset is geen effectief besturingselement. Hiermee voorkomt u dat de recordset wordt verwijderd, maar niet dat deze wordt gewijzigd. Toegestane wijzigingen omvatten het toevoegen en verwijderen van records uit de recordset, waaronder het verwijderen van alle records om een lege recordset achter te laten. Dit heeft hetzelfde effect als het verwijderen van de recordset vanuit het oogpunt van DNS-omzetting.

Resourcevergrendelingen op recordsetniveau kunnen momenteel alleen worden geconfigureerd met Azure PowerShell. Ze worden niet ondersteund in de Azure Portal of 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

Beveiliging tegen zoneverwijdering

Wanneer een zone wordt verwijderd in Azure DNS, worden alle recordsets in de zone verwijderd. Deze bewerking kan niet ongedaan worden gemaakt. Het per ongeluk verwijderen van een kritieke zone kan een aanzienlijke bedrijfsimpact hebben. Het is belangrijk om u te beschermen tegen onbedoeld verwijderen van zones.

Het toepassen van een CanNotDelete-vergrendeling op een zone voorkomt dat de zone wordt verwijderd. Vergrendelingen worden overgenomen door onderliggende resources. Een vergrendeling voorkomt dat recordsets in de zone worden verwijderd. Zoals beschreven in de bovenstaande opmerking, is dit niet effectief omdat records nog steeds kunnen worden verwijderd uit de bestaande recordsets.

Als alternatief kunt u een CanNotDelete-vergrendeling toepassen op een recordset in de zone, zoals de SOA-recordset. De zone wordt niet verwijderd zonder ook de recordsets te verwijderen. Deze vergrendeling beschermt tegen zoneverwijdering, terwijl recordsets binnen de zone nog steeds vrij kunnen worden gewijzigd. Als er een poging wordt gedaan om de zone te verwijderen, detecteert Azure Resource Manager deze verwijdering. Bij het verwijderen wordt ook de SOA-recordset verwijderd. Azure Resource Manager blokkeert de aanroep omdat de SOA is vergrendeld. Er worden geen recordsets verwijderd.

Met de volgende PowerShell-opdracht maakt u een CanNotDelete-vergrendeling voor de SOA-record van de opgegeven zone:

# 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

Een andere optie om onbedoelde zoneverwijdering te voorkomen, is door een aangepaste rol te gebruiken. Deze rol zorgt ervoor dat de accounts die worden gebruikt voor het beheren van uw zones, geen zone-verwijderingsmachtigingen hebben.

Wanneer u een zone moet verwijderen, kunt u een verwijdering in twee stappen afdwingen:

  • Ververleent u eerst machtigingen voor het verwijderen van de zone
  • Ten tweede verleent u machtigingen om de zone te verwijderen.

De aangepaste rol werkt voor alle zones die door deze accounts worden geopend. Accounts met zone-verwijderingsmachtigingen, zoals de eigenaar van het abonnement, kunnen nog steeds per ongeluk een zone verwijderen.

Het is mogelijk om beide benaderingen - resourcevergrendelingen en aangepaste rollen - tegelijkertijd te gebruiken als een diepgaande verdedigingsbenadering voor DNS-zonebeveiliging.

Volgende stappen