Delen via


DNS-zones en -records beschermen

Notitie

Het wordt aanbevolen 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 van Azure

Op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC) maakt gedetailleerd 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 voor 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. Als u de DNS-beheerder machtigingen voor DNS-zonebijdrager aan die resourcegroep verleent, is volledige controle over deze DNS-zones mogelijk. Het voorkomt dat onnodige machtigingen worden verleend. De DNS-beheerder kan geen virtuele machines maken of stoppen.

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

Open Toegangsbeheer (IAM) voor de resourcegroep en selecteer vervolgens + 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 op 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. Het beheerdersaccount dat wordt gebruikt voor het beheren van CNAME-records, krijgt machtigingen 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 Azure Portal. Open Toegangsbeheer (IAM) voor de zone, selecteer + Toevoegen, selecteer vervolgens de rol Dns-zonebijdrager en selecteer de vereiste gebruikers of groepen om machtigingen te verlenen.

Schermopname van de pagina toegangsbeheer voor 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>/"

Recordsetniveau Azure RBAC

Machtigingen worden toegepast op recordsetniveau. De gebruiker krijgt controle over vermeldingen die ze nodig hebben en kan geen andere wijzigingen aanbrengen.

Azure RBAC-machtigingen op recordniveau 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 recordniveau 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

Met de ingebouwde rol Inzender voor DNS-zone is volledige controle over een DNS-resource mogelijk. Het is mogelijk om uw eigen aangepaste Azure-rollen te bouwen om nauwkeurige controle te bieden.

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

In het volgende voorbeeld ziet u alleen een aangepaste roldefinitie voor 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-zone.

Notitie

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

Aangepaste roldefinities kunnen momenteel niet worden gedefinieerd via 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 ondersteunt een ander type beveiligingsbeheer, 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 wordt beschreven 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. Met deze vergrendeling voorkomt u dat nieuwe recordsets worden gemaakt en dat bestaande recordsets niet worden gewijzigd of verwijderd.

Resourcevergrendelingen op zoneniveau kunnen worden gemaakt via Azure Portal. Selecteer Vergrendelingen op de pagina DNS-zone 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-recordset 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 wordt voorkomen dat deze wordt gewijzigd. Toegestane wijzigingen omvatten het toevoegen en verwijderen van records uit de recordset, inclusief het verwijderen van alle records om een lege recordset te verlaten. Dit heeft hetzelfde effect als het verwijderen van de recordset vanuit het oogpunt van DNS-resolutie.

Resourcevergrendelingen op recordsetniveau kunnen momenteel alleen worden geconfigureerd met behulp van Azure PowerShell. Ze worden niet ondersteund in 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 heeft het potentieel om een aanzienlijke bedrijfsimpact te hebben. Het is belangrijk om te beschermen tegen onbedoelde zoneverwijdering.

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 het ineffectief omdat records nog steeds uit de bestaande recordsets kunnen worden verwijderd.

Als alternatief past u een CanNotDelete-vergrendeling toe 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 vrij kunnen worden gewijzigd. Als er een poging wordt gedaan om de zone te verwijderen, detecteert Azure Resource Manager deze verwijdering. Als u de SOA-recordset verwijdert, blokkeert Azure Resource Manager de aanroep omdat de SOA is vergrendeld. Er worden geen recordsets verwijderd.

Met de volgende PowerShell-opdracht maakt u een CanNotDelete-vergrendeling op basis van 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 machtigingen voor zone verwijderen hebben.

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

  • Verwijs eerst machtigingen voor het verwijderen van zones
  • 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 machtigingen voor zone verwijderen, zoals de eigenaar van het abonnement, kunnen nog steeds per ongeluk een zone verwijderen.

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

Volgende stappen