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 restrito do HDInsight em que a conectividade de entrada é restrita a uma rede privada.
Para ter conectividade pública entre seu cluster e recursos dependentes do HDInsight, 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 recursos de dependência habilitados para o Link Privado do Azure para ser usado com clusters HDInsight.
O seguinte diagrama mostra a aparência de uma possível arquitetura de rede virtual do HDInsight quando a resourceProviderConnection
é definida como de saída:
Observação
Restringir a conectividade pública é um pré-requisito para habilitar o Link Privado, que não deve ser considerada a mesma funcionalidade.
Inicializar um cluster restrito
Por padrão, o provedor de recursos do HDInsight usa uma conexão de entrada com o cluster por meio de endereços IPs públicos. Quando a propriedade de rede resourceProviderConnection
é definida como de saída, ela inverte as conexões com o provedor de recursos do HDInsight para que elas sejam sempre iniciadas dentro do cluster e saiam para o provedor de recursos.
Nessa configuração, sem uma conexão de entrada, não é necessário configurar marcas de serviço de entrada no grupo de segurança de rede. Também não é necessário ignorar o firewall ou a solução de virtualização de rede por meio de rotas definidas pelo usuário.
Observação
As implementações no Microsoft Azure Governamental ainda podem exigir as marcas de serviço de entrada no grupo de segurança de rede e nas rotas definidas pelo usuário.
Depois de criar o cluster, configure a resolução de DNS apropriada adicionando os registros DNS necessários para seu cluster restrito do HDInsight. O seguinte registro DNS de CNAME (nome canônico) é 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 qualquer uma destas técnicas conforme apropriado para suas necessidades:
- Use diretamente os endereços IP privados do balanceador de carga interno.
- Use sua zona DNS privada para substituir os pontos de extremidade do cluster. Nesse caso, o nome da zona precisa ser
azurehdinsight.net
.
Por exemplo, para sua zona DNS privada azurehdinsight.net
, você pode adicionar seus IPs privados, conforme necessário:
<clustername> A 10.0.0.1
<clustername-ssh> A 10.0.0.2
Observação
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. Isso pode causar conflitos ou comportamentos indesejados de resolução de DNS.
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 esse snippet de código 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
}
}
Adicionar conectividade de Link Privado a recursos dependentes de cluster (opcional)
A configuração de resourceProviderConnection
como de saída também permite que você acesse recursos específicos de cluster usando pontos de extremidade privados. Esses recursos incluem:
- Armazenamento: Azure Data Lake Storage Gen2 e Armazenamento de Blobs do Azure
- Metastores SQL: Apache Ranger, Ambari, Oozie e Hive
- Cofre de Chave do Azure
O uso de pontos de extremidade privados para esses recursos não é obrigatório. No entanto, se você planeja usar pontos de extremidade privados para esses recursos, precisa criar os recursos, configurar os pontos de extremidade privados e as entradas DNS antes de criar o cluster HDInsight. Todos esses recursos devem estar acessíveis dentro da sub-rede do cluster, seja por meio de um ponto de extremidade privado ou de outro modo. Se você estiver planejando usar um ponto de extremidade privado, é recomendável aproveitar a sub-rede do cluster.
Ao se conectar ao Azure Data Lake Storage Gen2 por meio do ponto de extremidade privado, verifique se a conta de armazenamento do Gen2 tem um ponto de extremidade definido como blob
e dfs
. Para obter mais informações, confira Criar um ponto de extremidade privado.
Usar o firewall (opcional)
Os clusters do HDInsight ainda podem se conectar à Internet pública para obter dependências de saída. Se você quiser restringir o acesso, poderá configurar um firewall, mas isso não é um requisito.
Criar clusters
O seguinte snippet de código JSON inclui as duas propriedades de rede que você precisa configurar em seu modelo do Azure Resource Manager para criar um cluster privado do HDInsight:
networkProperties: {
"resourceProviderConnection": "Outbound"
}
Para obter um modelo completo com muitos dos recursos de segurança empresarial do HDInsight, incluindo o Link Privado, confira Modelo de segurança empresarial do HDInsight.
Para criar um cluster usando o PowerShell, confira o exemplo.
Para criar um cluster usando a CLI do Azure, confira o exemplo.