Proteggere zone e record DNS privati

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

Le zone e i record DNS privati sono risorse critiche. L'eliminazione di una zona DNS o di un singolo record DNS può comportare un'interruzione del servizio. È importante proteggere le zone e i record DNS da modifiche non autorizzate o accidentali.

Questo articolo spiega come è possibile proteggere le zone e i record DNS privati da queste modifiche con DNS di Azure. Si usano due potenti funzionalità di sicurezza fornite da Azure Resource Manager: il Controllo degli accessi in base al ruolo di Azure e i blocchi delle risorse.

Controllo dell'accesso basato sui ruoli di Azure

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. Con il Controllo degli accessi in base al ruolo di Azure è possibile concedere il livello di accesso necessario agli utenti. Per altre informazioni sul modo in cui il Controllo degli accessi in base al ruolo di Azure facilita la gestione degli accessi, vedere l'articolo relativo al Controllo degli accessi in base al ruolo di Azure.

Ruolo Collaboratore per la zona DNS privata

Il ruolo Collaboratore per la zona DNS privata è un ruolo predefinito per la gestione delle risorse DNS private. Questo ruolo applicato a un utente o a un gruppo consente di gestire le risorse DNS private.

Il gruppo di risorse myPrivateDNS contiene cinque zone per Contoso Corporation. La concessione all'amministratore DNS delle autorizzazioni del ruolo Collaboratore per la zona DNS privata per tale gruppo di risorse consente il controllo completo su queste zone DNS. Evita di concedere autorizzazioni non necessarie. L'amministratore DNS non può creare o arrestare macchine virtuali.

Il modo più semplice per assegnare le autorizzazioni del Controllo degli accessi in base al ruolo di Azure è tramite il portale di Azure.

Aprire Controllo di accesso (IAM) per il gruppo di risorse, selezionare Aggiungi, quindi selezionare il ruolo Collaboratore per la zona DNS privata. Selezionare gli utenti o i gruppi necessari per concedere le autorizzazioni.

Screenshot of RBAC for private DNS resource group.

Queste autorizzazioni possono essere concesse anche tramite Azure PowerShell:

# Grant 'Private DNS Zone Contributor' permissions to all zones in a resource group

$rsg = "<resource group name>"
$usr = "<user email address>"
$rol = "Private DNS Zone Contributor"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -ResourceGroupName $rsg

Il comando equivalente è disponibile anche tramite l'interfaccia della riga di comando di Azure:

# Grant 'Private DNS Zone Contributor' permissions to all zones in a resource group

az role assignment create \
--assignee "<user email address>" \
--role "Private DNS Zone Contributor" \
--resource-group "<resource group name>"

Controllo degli accessi in base al ruolo di Azure a livello di zona privata

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. Tale risorsa può essere una singola zona DNS o un singolo set di record.

Ad esempio, il gruppo di risorse myPrivateDNS contiene la zona private.contoso.com e una zona secondaria customers.private.contoso.com. Vengono creati record CNAME per ogni account cliente. All'account amministratore usato per gestire i record CNAME vengono assegnate le autorizzazioni per creare record nella zona customers.private.contoso.com. L'account può gestire solo customers.private.contoso.com.

È possibile concedere le autorizzazioni del Controllo degli accessi in base al ruolo di Azure a livello di zona tramite il portale di Azure. Aprire Controllo di accesso (IAM) per la zona, selezionare Aggiungi, quindi selezionare il ruolo Collaboratore per la zona DNS privata. Selezionare gli utenti o i gruppi necessari per concedere le autorizzazioni.

Screenshot of RBAC for private DNS zone.

Queste autorizzazioni possono essere concesse anche tramite Azure PowerShell:

# Grant 'Private DNS Zone Contributor' permissions to a specific zone

$rsg = "<resource group name>"
$usr = "<user email address>"
$zon = "<zone name>"
$rol = "Private DNS Zone Contributor"
$rsc = "Microsoft.Network/privateDnsZones"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -ResourceGroupName $rsg -ResourceName $zon -ResourceType $rsc

Il comando equivalente è disponibile anche tramite l'interfaccia della riga di comando di Azure:

# Grant 'Private DNS Zone Contributor' permissions to a specific zone

az role assignment create \
--assignee <user email address> \
--role "Private DNS Zone Contributor" \
--scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateDnsZones/<zone name>/"

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

Le autorizzazioni vengono applicate a livello di set di record. All'utente viene concesso il controllo per le voci necessarie e non è possibile apportare altre modifiche.

Le autorizzazioni del Controllo degli accessi in base al ruolo di Azure a livello di set di record possono essere configurate tramite il portale di Azure, usando il pulsante Controllo di accesso (IAM) nella pagina dei set di record:

Screenshot of RBAC for private DNS record set.

Screenshot of role assignment for private DNS record set.

Le autorizzazioni del Controllo degli accessi in base al ruolo di Azure a livello di set di record possono anche essere concesse tramite Azure PowerShell:

# Grant permissions to a specific record set

$usr = "<user email address>"
$rol = "Private DNS Zone Contributor"
$sco = 
"/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateDnsZones/<zone name>/<record type>/<record name>"

New-AzRoleAssignment -SignInName $usr -RoleDefinitionName $rol -Scope $sco

Il comando equivalente è disponibile anche tramite l'interfaccia della riga di comando di Azure:

# Grant permissions to a specific record set

az role assignment create \
--assignee "<user email address>" \
--role "Private DNS Zone Contributor" \
--scope "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateDnsZones/<zone name>/<record type>/<record name>"

Ruoli personalizzati

Il ruolo Collaboratore per la zona DNS privata predefinito consente il controllo completo su una risorsa DNS. È possibile creare ruoli personalizzati di Azure per fornire un controllo più dettagliato.

All'account usato per gestire i record CNAME viene concessa l'autorizzazione per gestire solo i record CNAME. L'account non è in grado di modificare i record di altri tipi. L'account non è in grado di eseguire operazioni a livello di zona, ad esempio l'eliminazione della zona.

L'esempio seguente illustra la definizione di un ruolo personalizzato per gestire solo record CNAME:

{
    "Name": "Private DNS CNAME Contributor",
    "Id": "",
    "IsCustom": true,
    "Description": "Can manage DNS CNAME records only.",
    "Actions": [
        "Microsoft.Network/privateDnsZones/CNAME/*",
        "Microsoft.Network/privateDNSZones/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:

  • Microsoft.Network/privateDnsZones/CNAME/* concede il controllo completo sui record CNAME
  • Microsoft.Network/privateDNSZones/read concede l'autorizzazione per leggere le zone DNS private, ma non per modificarle, consentendo di visualizzare l'area in cui viene creato il record CNAME.

Nota

L'uso di un ruolo personalizzato di Azure per impedire l'eliminazione di set di record, consentendo tuttavia il relativo aggiornamento, non consente un controllo efficace. Impedisce l'eliminazione di set di record, ma non la relativa modifica. Le modifiche consentite includono 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. Questo è lo stesso effetto ottenuto eliminando il set di record dal punto di vista della risoluzione DNS.

Non è attualmente possibile specificare definizioni di ruoli personalizzati tramite il portale di Azure. È possibile creare un ruolo personalizzato basato su questa definizione di ruolo tramite Azure PowerShell:

# Create new role definition based on input file

New-AzRoleDefinition -InputFile <file path>

Può anche essere creato tramite l'interfaccia della riga di comando di Azure:

# Create new role definition based on input file

az role create -inputfile <file path>

Il ruolo può quindi essere assegnato come avviene per i ruoli predefiniti, come descritto in precedenza in questo articolo.

Per altre informazioni su come creare, gestire e assegnare ruoli personalizzati, vedere Ruoli personalizzati di Azure.

Blocchi di risorse

Azure Resource Manager supporta un altro tipo di controllo di sicurezza, ovvero la possibilità di bloccare le risorse. I blocchi delle risorse vengono applicati alla risorsa e sono efficaci in tutti gli utenti e i ruoli. Per altre informazioni, vedere Bloccare le risorse con Gestione risorse di Azure.

Esistono due tipi di blocchi delle risorse: CanNotDelete e ReadOnly. Questi tipi di blocco possono essere applicati a una zona DNS privata o a un singolo set di record. Le sezioni seguenti descrivono diversi scenari comuni e come supportarli usando i blocchi risorse.

Protezione da tutte le modifiche

Per evitare che vengano apportate modifiche, applicare un blocco ReadOnly alla zona. Il blocco impedisce di creare nuovi set di record oppure modificare o eliminare i set di record esistenti.

I blocchi risorse a livello di zona possono essere creati tramite il portale di Azure. Nella pagina della zona DNS, selezionare Blocchi, quindi selezionare +Aggiungi:

Screenshot of locks for private DNS zone.

I blocchi delle risorse a livello di zona possono essere creati anche tramite Azure PowerShell:

# Lock a DNS zone

$lvl = "<lock level>"
$lnm = "<lock name>"
$rsc = "<zone name>"
$rty = "Microsoft.Network/privateDnsZones"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rsc -ResourceType $rty -ResourceGroupName $rsg

Il comando equivalente è disponibile anche tramite l'interfaccia della riga di comando di Azure:

# Lock a DNS zone

az lock create \
--lock-type "<lock level>" \
--name "<lock name>" \
--resource-name "<zone name>" \
--namespace "Microsoft.Network" \
--resource-type "privateDnsZones" \
--resource-group "<resource group name>"

Protezione di singoli record

Per evitare che venga modificato un set di record DNS esistente, impostare il blocco ReadOnly al set di record.

Nota

L'applicazione di un blocco CanNotDelete a un set di record non è un controllo efficace. Impedisce l'eliminazione del set di record, ma non impedisce che venga modificato. Le modifiche consentite includono 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. Questo è lo stesso effetto ottenuto eliminando il set di record dal punto di vista della risoluzione DNS.

I blocchi risorse a livello di set di record possono attualmente essere configurati solo tramite Azure PowerShell. Non sono supportati nel portale di Azure o nell'interfaccia della riga di comando di Azure.

Azure PowerShell

# Lock a DNS record set

$lvl = "<lock level>"
$lnm = "<lock name>"
$rnm = "<zone name>/<record set name>"
$rty = "Microsoft.Network/privateDnsZones/<record type>"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rnm -ResourceType $rty -ResourceGroupName $rsg

Protezione dall'eliminazione di zone

Quando viene eliminata una zona in DNS di Azure, vengono eliminati tutti i set di record in essa contenuti. Questa operazione non può essere annullata. L'eliminazione accidentale di una zona critica può avere un impatto notevole. È importante proteggersi dall'eliminazione accidentale delle zone.

L'applicazione di un blocco CanNotDelete a una zona impedisce l'eliminazione della zona. I blocchi vengono ereditati dalle risorse figlio. Un blocco impedisce l'eliminazione di set di record nella zona. Come descritto nella nota precedente, è inefficace perché i record possono comunque essere rimossi dai set di record esistenti.

In alternativa, applicare un blocco CanNotDelete a un set di record nella zona, ad esempio il set di record SOA. La zona non viene eliminata senza eliminare anche i set di record. Questo blocco protegge dall'eliminazione della zona, consentendo al tempo stesso di modificare liberamente i set di record all'interno della zona. Se si prova a eliminare la zona, Azure Resource Manager rileva questa rimozione. La rimozione eliminerebbe anche il set di record SOA. Azure Resource Manager blocca la chiamata perché il record SOA è bloccato. Nessun set di record viene eliminato.

Il comando PowerShell seguente crea un blocco CanNotDelete sul record SOA della zona specificata:

# Protect against zone delete with CanNotDelete lock on the record set

$lvl = "CanNotDelete"
$lnm = "<lock name>"
$rnm = "<zone name>/@"
$rty = "Microsoft.Network/privateDnsZones/SOA"
$rsg = "<resource group name>"

New-AzResourceLock -LockLevel $lvl -LockName $lnm -ResourceName $rnm -ResourceType $rty -ResourceGroupName $rsg

Un'altra opzione per impedire l'eliminazione accidentale della zona consiste nell'usare un ruolo personalizzato. Questo ruolo garantisce che gli account usati per gestire le zone non abbiano le autorizzazioni di eliminazione della zona.

Quando è necessario eliminare una zona, è possibile applicare un'eliminazione in due passaggi:

  • Prima di tutto, concedere le autorizzazioni di eliminazione della zona
  • In secondo luogo, concedere le autorizzazioni per eliminare la zona.

Il ruolo personalizzato funziona per tutte le zone a cui si accede da tali account. Gli account con autorizzazioni di eliminazione della zona, ad esempio il proprietario della sottoscrizione, possono comunque eliminare accidentalmente una zona.

È possibile usare entrambi gli approcci, ovvero blocchi delle risorse e ruoli personalizzati, contemporaneamente come metodo di difesa avanzato per la protezione delle zone DNS.

Passaggi successivi