Partilhar via


Restringir a conectividade pública no Azure HDInsight

Na arquitetura de rede virtual predefinida do Azure HDInsight, o fornecedor de recursos do HDInsight comunica com o cluster através de uma rede pública. Neste artigo, ficará a saber mais sobre os controlos avançados que pode utilizar para criar um cluster restrito do HDInsight onde a conectividade de entrada está restrita a uma rede privada.

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

O diagrama seguinte mostra o aspeto de uma potencial arquitetura de rede virtual do HDInsight quando resourceProviderConnection está definida para saída:

Diagrama da arquitetura do HDInsight com uma ligação de fornecedor de recursos de saída.

Nota

Restringir a conectividade pública é um pré-requisito para ativar Private Link e não deve ser considerado a mesma capacidade.

Inicializar um cluster restrito

Por predefinição, o fornecedor de recursos do HDInsight utiliza uma ligação de entrada ao cluster através de endereços IP públicos. Quando a resourceProviderConnection propriedade de rede está definida como saída, inverte as ligações ao fornecedor de recursos do HDInsight para que as ligações sejam sempre iniciadas a partir do cluster e sejam enviadas para o fornecedor de recursos.

Nesta configuração, sem uma ligação de entrada, não é necessário configurar etiquetas de serviço de entrada no grupo de segurança de rede. Também não é necessário ignorar a firewall ou a aplicação virtual de rede através de rotas definidas pelo utilizador.

Nota

As implementações no Microsoft Azure Government ainda podem exigir as etiquetas de serviço de entrada no grupo de segurança de rede e nas rotas definidas pelo utilizador.

Depois de criar o cluster, configure a resolução DNS adequada ao adicionar registos DNS necessários para o cluster do HDInsight restrito. O seguinte registo DNS (CNAME) de nome canónico é criado na zona DNS pública gerida pelo Azure: azurehdinsight.net.

<clustername>    CNAME    <clustername>-int

Para aceder ao cluster com nomes de domínio completamente qualificados (FQDNs), pode utilizar qualquer uma destas técnicas conforme adequado às suas necessidades:

  • Utilize diretamente os endereços IP privados do balanceador de carga interno.
  • Utilize a sua própria zona DNS privada para substituir os pontos finais do cluster. Neste caso, o nome da zona tem de ser azurehdinsight.net.

Por exemplo, para a zona azurehdinsight.netDNS privada, pode adicionar os 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 a colocação de clusters restritos na mesma rede virtual (com uma zona DNS privada para azurehdinsight.net) como outros clusters onde a conectividade pública está ativada. Pode causar conflitos ou comportamentos de resolução de DNS indesejados.

Para facilitar a configuração do DNS, devolvemos os FQDNs e os endereços IP privados correspondentes como parte da resposta do cluster GET . Pode utilizar este fragmento 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 lhe permite aceder a recursos específicos do cluster através de pontos finais privados. Estes recursos incluem:

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

Não é obrigatório utilizar pontos finais privados para estes recursos. No entanto, se planeia utilizar pontos finais privados para estes recursos, tem de criar os recursos e configurar os pontos finais privados e as entradas DNS antes de criar o cluster do HDInsight. Todos estes recursos devem estar acessíveis a partir da sub-rede do cluster, seja através de um ponto final privado ou de outra forma. Se estiver a planear utilizar um ponto final privado, recomenda-se que tire partido da sub-rede do cluster.

Quando ligar a Azure Data Lake Storage Gen2 através de um ponto final privado, certifique-se de que a conta de armazenamento Gen2 tem um ponto final definido para e blobdfs. Para obter mais informações, veja Criar um ponto final privado.

Utilizar uma firewall (opcional)

Os clusters do HDInsight ainda podem ligar à 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 fragmento de código JSON seguinte inclui as duas propriedades de rede que tem de configurar no modelo de Resource Manager do Azure para criar um cluster privado do HDInsight:

networkProperties: {
    "resourceProviderConnection": "Outbound"
}

Para obter um modelo completo com muitas das funcionalidades de segurança empresarial do HDInsight, incluindo Private Link, veja Modelo de segurança empresarial do HDInsight.

Para criar um cluster com o PowerShell, veja o exemplo.

Para criar um cluster com a CLI do Azure, veja o exemplo.

Passos seguintes