Come proteggere le zone e i record DNSHow to protect DNS zones and records

Le zone e i record DNS sono risorse critiche.DNS zones and records are critical resources. L'eliminazione di una zona DNS o persino di un singolo record DNS può comportare un'interruzione del servizio totale.Deleting a DNS zone or even just a single DNS record can result in a total service outage. È importante proteggere le zone e i record DNS critici da modifiche non autorizzate o accidentali.It is therefore important that critical DNS zones and records are protected against unauthorized or accidental changes.

Questo articolo spiega come è possibile proteggere i record e le zone DNS da queste modifiche con DNS di Azure.This article explains how Azure DNS enables you to protect your DNS zones and records against such changes. Si usano due potenti funzionalità di sicurezza fornite da Azure Resource Manager: il controllo degli accessi in base al ruolo e i blocchi risorse.We apply two powerful security features provided by Azure Resource Manager: role-based access control and resource locks.

Controllo degli accessi in base al ruoloRole-based access control

Il Controllo degli accessi in base al ruolo di Azure consente una gestione degli accessi specifica per gli utenti, i gruppi e le risorse di Azure.Azure Role-Based Access Control (RBAC) enables fine-grained access management for Azure users, groups, and resources. Il Controllo degli accessi in base al ruolo permette di concedere agli utenti esattamente il livello di accesso necessario per eseguire i propri processi.Using RBAC, you can grant precisely the amount of access that users need to perform their jobs. Per altre informazioni su come il Controllo degli accessi in base al ruolo facilita la gestione degli accessi, vedere l'articolo relativo al Controllo degli accessi in base al ruolo.For more information about how RBAC helps you manage access, see What is Role-Based Access Control.

Il ruolo di "collaboratore zona DNS"The 'DNS Zone Contributor' role

Il ruolo di "collaboratore zona DNS" è un ruolo predefinito fornito da Azure per la gestione delle risorse DNS.The 'DNS Zone Contributor' role is a built-in role provided by Azure for managing DNS resources. L'assegnazione di autorizzazioni come collaboratore zona DNS a un utente o a un gruppo consente a questo gruppo di gestire le risorse DNS, ma non le risorse di altro tipo.Assigning DNS Zone Contributor permissions to a user or group enables that group to manage DNS resources, but not resources of any other type.

Si supponga, ad esempio, che il gruppo di risorse "zonepersonali" contenga cinque zone per Contoso Corporation.For example, suppose the resource group 'myzones' contains five zones for Contoso Corporation. La concessione di autorizzazioni come "collaboratore zona DNS" all'amministratore DNS per questo gruppo di risorse consente il controllo completo su queste zone DNS.Granting the DNS administrator 'DNS Zone Contributor' permissions to that resource group, enables full control over those DNS zones. Si evita anche di concedere autorizzazioni non necessarie, ad esempio l'amministratore DNS non può creare o arrestare macchine virtuali.It also avoids granting unnecessary permissions, for example the DNS administrator cannot create or stop Virtual Machines.

Il modo più semplice per assegnare le autorizzazioni del Controllo degli accessi in base al ruolo è tramite il portale di Azure.The simplest way to assign RBAC permissions is via the Azure portal. Aprire il pannello "Controllo di accesso (IAM)" per il gruppo di risorse, fare clic su "Aggiungi", quindi selezionare il ruolo di "collaboratore zona DNS" e selezionare gli utenti o i gruppi necessari per concedere le autorizzazioni.Open the 'Access control (IAM)' blade for the resource group, then click 'Add', then select the 'DNS Zone Contributor' role and select the required users or groups to grant permissions.

Controllo degli accessi in base al ruolo a livello di gruppo di risorse tramite il portale di Azure

Queste autorizzazioni possono essere concesse anche tramite Azure PowerShell:Permissions can also be granted using Azure PowerShell:

# Grant 'DNS Zone Contributor' permissions to all zones in a resource group
New-AzureRmRoleAssignment -SignInName "<user email address>" -RoleDefinitionName "DNS Zone Contributor" -ResourceGroupName "<resource group name>"

Il comando equivalente è disponibile anche tramite l'interfaccia della riga di comando di Azure:The equivalent command is also available via the Azure CLI:

# Grant 'DNS Zone Contributor' permissions to all zones in a resource group
azure role assignment create --signInName "<user email address>" --roleName "DNS Zone Contributor" --resourceGroup "<resource group name>"

Controllo degli accessi in base al ruolo a livello di zonaZone level RBAC

Le regole del Controllo degli accessi in base al ruolo di Azure possono essere applicate a una sottoscrizione, a un gruppo di risorse o a una singola risorsa.Azure RBAC rules can be applied to a subscription, a resource group or to an individual resource. Nel caso di DNS di Azure, questa risorsa può essere una singola zona DNS o persino un singolo set di record.In the case of Azure DNS, that resource can be an individual DNS zone, or even an individual record set.

Si supponga, ad esempio, che il gruppo di risorse "zone personali" contenga la zona "contoso.com" e una sottozona "customers.contoso.com" in cui vengono creati i record CNAME per ciascun account cliente.For example, suppose the resource group 'myzones' contains the zone 'contoso.com' and a subzone 'customers.contoso.com' in which CNAME records are created for each customer account. All'account usato per gestire i record CNAME devono essere assegnate le autorizzazioni per creare i record solo nella zona "customers.contoso.com", senza consentire l'accesso alle altre zone.The account used to manage these CNAME records should be assigned permissions to create records in the 'customers.contoso.com' zone only, it should not have access to the other zones.

È possibile concedere le autorizzazioni del Controllo degli accessi in base al ruolo a livello di zona tramite il portale di Azure.Zone-level RBAC permissions can be granted via the Azure portal. Aprire il pannello "Controllo di accesso (IAM)" per la zona, fare clic su "Aggiungi", quindi selezionare il ruolo di "collaboratore zona DNS" e selezionare gli utenti o i gruppi necessari per concedere le autorizzazioni.Open the 'Access control (IAM)' blade for the zone, then click 'Add', then select the 'DNS Zone Contributor' role and select the required users or groups to grant permissions.

Controllo degli accessi in base al ruolo a livello di zona DNS tramite il portale di Azure

Queste autorizzazioni possono essere concesse anche tramite Azure PowerShell:Permissions can also be granted using Azure PowerShell:

# Grant 'DNS Zone Contributor' permissions to a specific zone
New-AzureRmRoleAssignment -SignInName "<user email address>" -RoleDefinitionName "DNS Zone Contributor" -ResourceGroupName "<resource group name>" -ResourceName "<zone name>" -ResourceType Microsoft.Network/DNSZones

Il comando equivalente è disponibile anche tramite l'interfaccia della riga di comando di Azure:The equivalent command is also available via the Azure CLI:

# Grant 'DNS Zone Contributor' permissions to a specific zone
azure role assignment create --signInName <user email address> --roleName "DNS Zone Contributor" --resource-name <zone name> --resource-type Microsoft.Network/DNSZones --resource-group <resource group name>

Controllo degli accessi in base al ruolo a livello di set di recordRecord set level RBAC

È possibile fare un ulteriore passo in avanti.We can go one step further. L'amministratore di posta elettronica per Contoso Corporation, ad esempio, necessita dell'accesso ai record MX e TXT al vertice della zona "contoso.com".Consider the mail administrator for Contoso Corporation, who needs access to the MX and TXT records at the apex of the 'contoso.com' zone. Non ha necessità di accedere agli altri record MX o TXT oppure ai record di altro tipo.She doesn't need access to any other MX or TXT records, or to any records of any other type. DNS di Azure consente di assegnare le autorizzazioni a livello di set di record con precisione per i record a cui l'amministratore di posta elettronica deve accedere.Azure DNS allows you to assign permissions at the record set level, to precisely the records that the mail administrator needs access to. All'amministratore di posta elettronica viene concesso esattamente il controllo di cui necessita, senza poter apportare altre modifiche.The mail administrator is granted precisely the control she needs, and is unable to make any other changes.

Le autorizzazioni del Controllo degli accessi in base al ruolo a livello di set di record possono essere configurate tramite il portale di Azure, usando il pulsante "Utenti" nel pannello dei set di record:Record-set level RBAC permissions can be configured via the Azure portal, using the 'Users' button in the record set blade:

Controllo degli accessi in base al ruolo a livello di set di record tramite il portale di Azure

Le autorizzazioni del Controllo degli accessi in base al ruolo a livello di set di record possono anche essere concesse tramite Azure PowerShell:Record-set level RBAC permissions can also be granted using Azure PowerShell:

# Grant permissions to a specific record set
New-AzureRmRoleAssignment -SignInName "<user email address>" -RoleDefinitionName "DNS Zone Contributor" -Scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/dnszones/<zone name>/<record type>/<record name>"

Il comando equivalente è disponibile anche tramite l'interfaccia della riga di comando di Azure:The equivalent command is also available via the Azure CLI:

# Grant permissions to a specific record set
azure role assignment create --signInName "<user email address>" --roleName "DNS Zone Contributor" --scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/dnszones/<zone name>/<record type>/<record name>"

Ruoli personalizzatiCustom roles

Il ruolo di "collaboratore zona DNS" predefinito consente il controllo completo su una risorsa DNS.The built-in 'DNS Zone Contributor' role enables full control over a DNS resource. È anche possibile creare ruoli di Azure di clienti, per fornire un controllo più capillare.It is also possible to build your own customer Azure roles, to provide even finer-grained control.

Si consideri di nuovo l'esempio in cui viene creato un record CNAME nella zona "customers.contoso.com" per ogni account cliente di Contoso Corporation.Consider again the example in which a CNAME record in the zone 'customers.contoso.com' is created for each Contoso Corporation customer account. All'account usato per gestire i record CNAME deve essere concessa l'autorizzazione per gestire solo i record CNAME.The account used to manage these CNAMEs should be granted permission to manage CNAME records only. Non è quindi possibile modificare i record di altri tipi, ad esempio i record MX, oppure eseguire operazioni a livello di zona, ad esempio l'eliminazione di una zona.It is then unable to modify records of other types (such as changing MX records) or perform zone-level operations such as zone delete.

L'esempio seguente illustra la definizione di un ruolo personalizzato per gestire solo record CNAME:The following example shows a custom role definition for managing CNAME records only:

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

La proprietà Actions definisce le autorizzazioni specifiche di DNS seguenti:The Actions property defines the following DNS-specific permissions:

  • Microsoft.Network/dnsZones/CNAME/* concede il controllo completo sui record CNAMEMicrosoft.Network/dnsZones/CNAME/* grants full control over CNAME records
  • Microsoft.Network/dnsZones/read concede l'autorizzazione per leggere le zone DNS, ma non per modificarle, consentendo di visualizzare l'area in cui viene creato il record CNAME.Microsoft.Network/dnsZones/read grants permission to read DNS zones, but not to modify them, enabling you to see the zone in which the CNAME is being created.

Le azioni rimanenti vengono copiate dal ruolo di collaboratore zona DNS predefinito.The remaining Actions are copied from the DNS Zone Contributor built-in role.

Nota

Non è efficace usare un ruolo personalizzato del Controllo degli accessi in base al ruolo per impedire l'eliminazione di set di record, consentendo tuttavia il relativo aggiornamento.Using a custom RBAC role to prevent deleting record sets while still allowing them to be updated is not an effective control. Impedisce l'eliminazione di set di record, ma non la relativa modifica.It prevents record sets from being deleted, but it does not prevent them from being modified. Alcune modifiche consentite sono l'aggiunta e la rimozione di record dal set di record, inclusa la rimozione di tutti i record per ottenere un set di record "vuoto".Permitted modifications include adding and removing records from the record set, including removing all records to leave an 'empty' record set. Questo è lo stesso effetto ottenuto eliminando il set di record dal punto di vista della risoluzione DNS.This has the same effect as deleting the record set from a DNS resolution viewpoint.

Attualmente non è possibile specificare definizioni di ruoli personalizzati tramite il portale di Azure.Custom role definitions cannot currently be defined via the Azure portal. È possibile creare un ruolo personalizzato basato su questa definizione di ruolo tramite Azure PowerShell:A custom role based on this role definition can be created using Azure PowerShell:

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

Può anche essere creato tramite l'interfaccia della riga di comando di Azure:It can also be created via the Azure CLI:

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

Il ruolo può quindi essere assegnato come avviene per i ruoli predefiniti, come descritto in precedenza in questo articolo.The role can then be assigned in the same way as built-in roles, as described earlier in this article.

Per altre informazioni su come creare, gestire e assegnare ruoli personalizzati, vedere Ruoli personalizzati nel Controllo degli accessi in base al ruolo di Azure.For more information on how to create, manage, and assign custom roles, see Custom Roles in Azure RBAC.

Blocchi risorseResource locks

Oltre al Controllo degli accessi in base al ruolo, Azure Resource Manager supporta un altro tipo di controllo di sicurezza, vale a dire la possibilità di "bloccare" le risorse.In addition to RBAC, Azure Resource Manager supports another type of security control, namely the ability to 'lock' resources. Le regole del Controllo degli accessi in base al ruolo di Azure consentono di controllare le azioni di utenti e gruppi specifici,mentre i blocchi risorse vengono applicati alla risorsa e hanno effetto su tutti gli utenti e i ruoli.Where RBAC rules allow you to control the actions of specific users and groups, resource locks are applied to the resource, and are effective across all users and roles. Per altre informazioni, vedere Bloccare le risorse con Gestione risorse di Azure.For more information, see Lock resources with Azure Resource Manager.

Esistono due tipi di blocchi risorse: DoNotDelete e ReadOnly.There are two types of resource lock: DoNotDelete and ReadOnly. Questi blocchi possono essere applicati a una zona DNS o a un singolo set di record.These can be applied either to a DNS zone, or to an individual record set. Le sezioni seguenti descrivono diversi scenari comuni e come supportarli usando i blocchi risorse.The following sections describe several common scenarios, and how to support them using resource locks.

Protezione da tutte le modificheProtecting against all changes

Per evitare che vengano apportate modifiche, applicare un blocco ReadOnly alla zona.To prevent any changes being made, apply a ReadOnly lock to the zone. In questo modo non è possibile creare nuovi set di record oppure modificare o eliminare i set di record esistenti.This prevents new record sets from being created, and existing record sets from being modified or deleted.

I blocchi risorse a livello di zona possono essere creati tramite il portale di Azure.Zone level resource locks can be created via the Azure portal. Nel pannello Zona DNS, fare clic su "Blocchi", quindi su "Aggiungi":From the DNS zone blade, click 'Locks', then 'Add':

Blocchi risorse a livello di zona tramite il portale di Azure

I blocchi risorse a livello di zona possono essere creati anche tramite Azure PowerShell:Zone-level resource locks can also be created via Azure PowerShell:

# Lock a DNS zone
New-AzureRmResourceLock -LockLevel <lock level> -LockName <lock name> -ResourceName <zone name> -ResourceType Microsoft.Network/DNSZones -ResourceGroupName <resource group name>

La configurazione di blocchi risorse di Azure non è attualmente supportata tramite l'interfaccia della riga di comando di Azure.Configuring Azure resource locks is not currently supported via the Azure CLI.

Protezione di singoli recordProtecting individual records

Per evitare che venga modificato un set di record DNS esistente, impostare il blocco ReadOnly al set di record.To prevent an existing DNS record set against modification, apply a ReadOnly lock to the record set.

Nota

L'applicazione di un blocco DoNotDelete a un set di record non è un controllo efficace.Applying a DoNotDelete lock to a record set is not an effective control. Impedisce l'eliminazione del set di record, ma non impedisce che venga modificato.It prevents the record set from being deleted, but it does not prevent it from being modified. Alcune modifiche consentite sono l'aggiunta e la rimozione di record dal set di record, inclusa la rimozione di tutti i record per ottenere un set di record "vuoto".Permitted modifications include adding and removing records from the record set, including removing all records to leave an 'empty' record set. Questo è lo stesso effetto ottenuto eliminando il set di record dal punto di vista della risoluzione DNS.This has the same effect as deleting the record set from a DNS resolution viewpoint.

I blocchi risorse a livello di set di record possono attualmente essere configurati solo tramite Azure PowerShell.Record set level resource locks can currently only be configured using Azure PowerShell. Non sono supportati nel portale di Azure o nell'interfaccia della riga di comando di Azure.They are not supported in the Azure portal or Azure CLI.

# Lock a DNS record set
New-AzureRmResourceLock -LockLevel <lock level> -LockName "<lock name>" -ResourceName "<zone name>/<record set name>" -ResourceType "Microsoft.Network/DNSZones/<record type>" -ResourceGroupName "<resource group name>"

Protezione dall'eliminazione di zoneProtecting against zone deletion

Quando viene eliminata una zona in DNS di Azure, vengono eliminati anche tutti i set di record in essa contenuti.When a zone is deleted in Azure DNS, all record sets in the zone are also deleted. Questa operazione non può essere annullata.This operation cannot be undone. L'eliminazione accidentale di una zona critica può avere un impatto notevole.Accidentally deleting a critical zone has the potential to have a significant business impact. È quindi molto importante evitare l'eliminazione accidentale di una zona.It is therefore very important to protect against accidental zone deletion.

L'applicazione di un blocco DoNotDelete a una zona impedisce l'eliminazione della zona.Applying a DoNotDelete lock to a zone prevents the zone from being deleted. Tuttavia, poiché i blocchi vengono ereditati dalle risorse figlio, impedisce anche che vengano eliminati set di record nella zona, creando un effetto potenzialmente indesiderato.However, since locks are inherited by child resources, it also prevents any record sets in the zone from being deleted, which may be undesirable. Inoltre, come descritto in precedenza, questo controllo non è efficace poiché i record possono essere rimossi dai set di record esistenti.Furthermore, as described in the note above, it is also ineffective since records can still be removed from the existing record sets.

In alternativa, è possibile applicare un blocco DoNotDelete a un set di record nella zona, ad esempio il set di record SOA.As an alternative, consider applying a DoNotDelete lock to a record set in the zone, such as the SOA record set. Poiché la zona non può essere eliminata senza eliminare anche i set di record, è possibile evitare l'eliminazione della zona, consentendo comunque di modificare i set di record all'interno della zona.Since the zone cannot be deleted without also deleting the record sets, this protects against zone deletion, while still allowing record sets within the zone to be modified freely. Se viene eseguito un tentativo di eliminare la zona, Azure Resource Manager rileva che questa operazione potrebbe eliminare anche il set di record SOA e blocca la chiamata perché il record SOA è bloccato.If an attempt is made to delete the zone, Azure Resource Manager detects this would also delete the SOA record set, and blocks the call because the SOA is locked. Nessun set di record viene eliminato.No record sets are deleted.

Il comando PowerShell seguente crea un blocco DoNotDelete sul record SOA della zona specificata:The following PowerShell command creates a DoNotDelete lock against the SOA record of the given zone:

# Protect against zone delete with DoNotDelete lock on the record set
New-AzureRmResourceLock -LockLevel DoNotDelete -LockName "<lock name>" -ResourceName "<zone name>/@" -ResourceType" Microsoft.Network/DNSZones/SOA" -ResourceGroupName "<resource group name>"

Un altro modo per impedire di eliminare accidentalmente la zona è usare un ruolo personalizzato per garantire che l'account operatore e l'account di servizio usati per gestire le zone non dispongano delle autorizzazioni per eliminare le zone.Another way to prevent accidental zone deletion is by using a custom role to ensure the operator and service accounts used to manage your zones do not have zone delete permissions. Quando è necessario eliminare una zona, è possibile farlo in due passaggi, prima concedendo le autorizzazioni per eliminare la zona (nell'ambito della zona stessa, per impedire di eliminarne una sbagliata) e poi eliminandola.When you do need to delete a zone, you can enforce a two-step delete, first granting zone delete permissions (at the zone scope, to prevent deleting the wrong zone) and second to delete the zone.

Questo secondo approccio ha il vantaggio di essere adatto a tutte le zone accessibili da tali account, senza che sia necessario ricordarsi di creare i blocchi.This second approach has the advantage that it works for all zones accessed by those accounts, without having to remember to create any locks. Lo svantaggio, invece, è che tutti gli account con autorizzazioni per eliminare le zone, ad esempio il proprietario della sottoscrizione, possono sempre eliminare una zona critica accidentalmente.It has the disadvantage that any accounts with zone delete permissions, such as the subscription owner, can still accidentally delete a critical zone.

Usare entrambi gli approcci contemporaneamente (blocchi di risorse e ruoli personalizzati) è un metodo di difesa avanzato per la protezione delle zone DNS.It is possible to use both approaches - resource locks and custom roles - at the same time, as a defense-in-depth approach to DNS zone protection.

Passaggi successiviNext steps