Restringir a conectividade pública no Azure HDInsight

Na arquitetura de rede virtual padrão do Azure HDInsight, o provedor de recursos do HDInsight se comunica com o cluster por meio de uma rede pública. Neste artigo, você aprenderá sobre os controles avançados que podem ser usados para criar um cluster HDInsight restrito em que a conectividade de entrada é restrita a uma rede privada.

Se quiser conectividade pública entre o cluster HDInsight e os recursos dependentes, considere restringir a conectividade do cluster seguindo as diretrizes em Controlar o tráfego de rede no Azure HDInsight. Além de restringir a conectividade pública, você pode configurar os recursos de dependência habilitados para Link Privado do Azure para usar com clusters HDInsight.

O diagrama a seguir mostra a aparência de uma potencial arquitetura de rede virtual do HDInsight quando resourceProviderConnection definida como saída:

Diagrama mostrando a arquitetura do HDInsight usando uma conexão de provedor de recursos de saída.

Nota

Restringir a conectividade pública é um pré-requisito para habilitar o Private Link e não deve ser considerado o mesmo recurso.

Inicializar um cluster restrito

Por padrão, o provedor de recursos do HDInsight usa uma conexão de entrada com o cluster usando endereços IP públicos. Quando a resourceProviderConnection propriedade de rede é definida como saída, ela reverte as conexões com o provedor de recursos HDInsight para que as conexões sejam sempre iniciadas de dentro do cluster e saiam para o provedor de recursos.

Nessa configuração, sem uma conexão de entrada, não há necessidade de configurar marcas de serviço de entrada no grupo de segurança de rede. Também não há necessidade de ignorar o firewall ou o dispositivo virtual de rede por meio de rotas definidas pelo usuário.

Nota

As implementações no Microsoft Azure Government ainda podem exigir as tags de serviço de entrada no grupo de segurança de rede e rotas definidas pelo usuário.

Depois de criar o cluster, configure a resolução DNS adequada adicionando registros DNS necessários para o cluster HDInsight restrito. O seguinte registro DNS de nome canônico (CNAME) é criado na zona DNS pública gerenciada pelo Azure: azurehdinsight.net.

<clustername>    CNAME    <clustername>-int

Para acessar o cluster usando FQDNs (nomes de domínio totalmente qualificados), você pode usar uma destas técnicas conforme apropriado para suas necessidades:

  • Use os endereços IP privados do balanceador de carga interno diretamente.
  • Use sua própria zona DNS privada para substituir os pontos de extremidade do cluster. Nesse caso, o nome da zona deve ser azurehdinsight.net.

Por exemplo, para sua zona azurehdinsight.netDNS privada, você pode adicionar seus endereços IP privados conforme necessário:

<clustername>        A   10.0.0.1
<clustername-ssh>    A   10.0.0.2

Nota

Não recomendamos colocar clusters restritos na mesma rede virtual (com uma zona DNS privada para azurehdinsight.net) que outros clusters em que a conectividade pública está habilitada. Pode causar conflitos ou comportamento de resolução de DNS não intencional.

Para facilitar a configuração do DNS, retornamos os FQDNs e os endereços IP privados correspondentes como parte da resposta do cluster GET . Você pode usar este trecho do PowerShell para começar:

<#
    This script is an example to help you get started with automation and can be adjusted based on your needs.
    This script assumes:
    - The HDInsight cluster has already been created, and the context where this script is run has permissions to read/write resources in the same resource group.
    - The private DNS zone resource exists in the same subscription as the HDInsight cluster.
We recommend that you use the latest version of the Az.HDInsight module.

#>
$subscriptionId = "<Replace with subscription for deploying HDInsight clusters, and containing private DNS zone resource>"

$clusterName = "<Replace with cluster name>"
$clusterResourceGroupName = "<Replace with resource group name>"

# For example, azurehdinsight.net for public cloud.
$dnsZoneName = "<Replace with private DNS zone name>"
$dnsZoneResourceGroupName = "<Replace with private DNS zone resource group name>"

Connect-AzAccount -SubscriptionId $subscriptionId

# 1. Get cluster endpoints
$clusterEndpoints = $(Get-AzHDInsightCluster -ClusterName $clusterName ` -ResourceGroupName $clusterResourceGroupName).ConnectivityEndpoints

$endpointMapping = @{}

foreach($endpoint in $clusterEndpoints)
{
    $label = $endpoint.Location.ToLower().Replace(".$dnsZoneName".ToLower(), "")
    $ip = $endpoint.PrivateIPAddress

    $endpointMapping.Add($label, $ip)
}

# 2. Confirm that the DNS zone exists.
Get-AzPrivateDnsZone -ResourceGroupName $dnsZoneResourceGroupName -Name $dnsZoneName -ErrorAction Stop

# 3. Update DNS entries for the cluster in the private DNS zone:
#    - If the entries already exist, update to the new IP.
#    - If the entries don't exist, create them.
$recordSets = Get-AzPrivateDnsRecordSet -ZoneName $dnsZoneName -ResourceGroupName $dnsZoneResourceGroupName -RecordType A

foreach($label in $endpointMapping.Keys)
{
    $updateRecord = $null

    foreach($record in $recordSets)
    {
        if($record.Name -eq $label)
        {
            $updateRecord = $record
            break;
        }
        
    }

    if($null -ne $updateRecord)
    {
        $updateRecord.Records[0].Ipv4Address = $endpointMapping[$label]
        Set-AzPrivateDnsRecordSet -RecordSet $updateRecord | Out-Null
    }
    else
    {
        New-AzPrivateDnsRecordSet `
            -ResourceGroupName $dnsZoneResourceGroupName `
            -ZoneName $dnsZoneName `
            -Name $label `
            -RecordType A `
            -Ttl 3600 `
            -PrivateDnsRecord (New-AzPrivateDnsRecordConfig -Ipv4Address $endpointMapping[$label]) | Out-Null
    }
}

A configuração resourceProviderConnection para saída também permite que você acesse recursos específicos do cluster usando pontos de extremidade privados. Esses recursos incluem:

  • Armazenamento: Azure Data Lake Storage Gen2 e Azure Blob Storage
  • Metastores SQL: Apache Ranger, Ambari, Oozie e Hive
  • Azure Key Vault

Não é obrigatório usar pontos de extremidade privados para esses recursos. Mas se você planeja usar pontos de extremidade privados para esses recursos, deverá criar os recursos e configurar os pontos de extremidade privados e as entradas DNS antes de criar o cluster HDInsight. Todos esses recursos devem ser acessíveis de dentro da sub-rede do cluster, seja por meio de um ponto de extremidade privado ou de outra forma. Se você estiver planejando usar um ponto de extremidade privado, é recomendável aproveitar a sub-rede do cluster.

Quando você se conectar ao Azure Data Lake Storage Gen2 por meio de um ponto de extremidade privado, verifique se a conta de armazenamento Gen2 tem um ponto de extremidade definido para ambos e blob dfs. Para obter mais informações, consulte Criar um ponto de extremidade privado.

Usar um firewall (opcional)

Os clusters HDInsight ainda podem se conectar à Internet pública para obter dependências de saída. Se quiser restringir o acesso, pode configurar uma firewall, mas não é um requisito.

Criar clusters

O trecho de código JSON a seguir inclui as duas propriedades de rede que você deve configurar em seu modelo do Azure Resource Manager para criar um cluster HDInsight privado:

networkProperties: {
    "resourceProviderConnection": "Outbound"
}

Para obter um modelo completo com muitos dos recursos de segurança empresarial do HDInsight, incluindo o Private Link, consulte Modelo de segurança empresarial do HDInsight.

Para criar um cluster usando o PowerShell, consulte o exemplo.

Para criar um cluster usando a CLI do Azure, consulte o exemplo.

Próximos passos