Udostępnij za pośrednictwem


Ograniczanie łączności publicznej w usłudze Azure HDInsight

W domyślnej architekturze sieci wirtualnej usługi Azure HDInsight dostawca zasobów usługi HDInsight komunikuje się z klastrem za pośrednictwem sieci publicznej. W tym artykule przedstawiono zaawansowane mechanizmy kontroli, których można użyć do utworzenia klastra usługi HDInsight z ograniczeniami, w którym łączność przychodząca jest ograniczona do sieci prywatnej.

Jeśli chcesz mieć łączność publiczną między klastrem usługi HDInsight i zasobami zależnymi, rozważ ograniczenie łączności klastra, postępując zgodnie z wytycznymi w temacie Kontrolowanie ruchu sieciowego w usłudze Azure HDInsight. Oprócz ograniczania łączności publicznej można skonfigurować zasoby zależności z obsługą usługi Azure Private Link do użycia z klastrami usługi HDInsight.

Na poniższym diagramie przedstawiono, jak może wyglądać potencjalna architektura sieci wirtualnej usługi HDInsight, gdy resourceProviderConnection jest ustawiona wartość wychodząca:

Diagram przedstawiający architekturę usługi HDInsight przy użyciu połączenia dostawcy zasobów wychodzących.

Uwaga

Ograniczenie łączności publicznej jest wymaganiem wstępnym dla włączenia usługi Private Link i nie powinno być uznawane za tę samą funkcję.

Inicjowanie klastra z ograniczeniami

Domyślnie dostawca zasobów usługi HDInsight używa połączenia przychodzącego z klastrem przy użyciu publicznych adresów IP. resourceProviderConnection Gdy właściwość sieci jest ustawiona na ruch wychodzący, odwraca połączenia z dostawcą zasobów usługi HDInsight, dzięki czemu połączenia są zawsze inicjowane z wewnątrz klastra i wychodzące do dostawcy zasobów.

W tej konfiguracji bez połączenia przychodzącego nie ma potrzeby konfigurowania tagów usługi dla ruchu przychodzącego w sieciowej grupie zabezpieczeń. Nie ma również potrzeby pomijania zapory ani wirtualnego urządzenia sieciowego za pośrednictwem tras zdefiniowanych przez użytkownika.

Uwaga

Implementacje w usłudze Microsoft Azure Government mogą nadal wymagać tagów usługi dla ruchu przychodzącego w sieciowej grupie zabezpieczeń i trasach zdefiniowanych przez użytkownika.

Po utworzeniu klastra skonfiguruj odpowiednie rozpoznawanie nazw DNS, dodając rekordy DNS, które są wymagane dla ograniczonego klastra usługi HDInsight. Następujący rekord DNS o nazwie kanonicznej (CNAME) jest tworzony w zarządzanej przez platformę Azure publicznej strefie DNS: azurehdinsight.net.

<clustername>    CNAME    <clustername>-int

Aby uzyskać dostęp do klastra przy użyciu w pełni kwalifikowanych nazw domen (FQDN), możesz użyć jednej z tych technik zgodnie z potrzebami:

  • Użyj prywatnych adresów IP wewnętrznego modułu równoważenia obciążenia bezpośrednio.
  • Użyj własnej prywatnej strefy DNS, aby zastąpić punkty końcowe klastra. W takim przypadku nazwa strefy musi mieć wartość azurehdinsight.net.

Na przykład dla prywatnej strefy azurehdinsight.netDNS można dodać prywatne adresy IP zgodnie z potrzebami:

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

Uwaga

Nie zalecamy umieszczania klastrów z ograniczeniami w tej samej sieci wirtualnej (z prywatną strefą DNS dla azurehdinsight.net), co inne klastry, w których włączono łączność publiczną. Może to spowodować niezamierzone zachowanie lub konflikty rozpoznawania nazw DNS.

Aby ułatwić konfigurację systemu DNS, zwracamy nazwy FQDN i odpowiadające im prywatne adresy IP w ramach odpowiedzi klastra GET . Możesz użyć tego fragmentu kodu programu PowerShell, aby rozpocząć pracę:

<#
    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
    }
}

Konfigurowanie resourceProviderConnection ruchu wychodzącego umożliwia również dostęp do zasobów specyficznych dla klastra przy użyciu prywatnych punktów końcowych. Te zasoby obejmują:

  • Magazyn: Azure Data Lake Storage Gen2 i Azure Blob Storage
  • Magazyny metadanych SQL: Apache Ranger, Ambari, Oozie i Hive
  • Azure Key Vault

Nie jest obowiązkowe używanie prywatnych punktów końcowych dla tych zasobów. Jeśli jednak planujesz używać prywatnych punktów końcowych dla tych zasobów, przed utworzeniem klastra usługi HDInsight należy utworzyć zasoby i skonfigurować prywatne punkty końcowe i wpisy DNS. Wszystkie te zasoby powinny być dostępne z poziomu podsieci klastra za pośrednictwem prywatnego punktu końcowego lub w inny sposób. Jeśli planujesz użyć prywatnego punktu końcowego, zaleca się korzystanie z podsieci klastra.

Podczas nawiązywania połączenia z usługą Azure Data Lake Storage Gen2 za pośrednictwem prywatnego punktu końcowego upewnij się, że konto magazynu Gen2 ma punkt końcowy ustawiony zarówno dla systemu , jak blob i dfs. Aby uzyskać więcej informacji, zobacz Tworzenie prywatnego punktu końcowego.

Korzystanie z zapory (opcjonalnie)

Klastry usługi HDInsight mogą nadal łączyć się z publicznym Internetem, aby uzyskać zależności wychodzące. Jeśli chcesz ograniczyć dostęp, możesz skonfigurować zaporę, ale nie jest to wymagane.

Tworzenie klastrów

Poniższy fragment kodu JSON zawiera dwie właściwości sieci, które należy skonfigurować w szablonie usługi Azure Resource Manager, aby utworzyć prywatny klaster usługi HDInsight:

networkProperties: {
    "resourceProviderConnection": "Outbound"
}

Aby uzyskać kompletny szablon z wieloma funkcjami zabezpieczeń przedsiębiorstwa usługi HDInsight, w tym usługą Private Link, zobacz Szablon zabezpieczeń przedsiębiorstwa usługi HDInsight.

Aby utworzyć klaster przy użyciu programu PowerShell, zobacz przykład.

Aby utworzyć klaster przy użyciu interfejsu wiersza polecenia platformy Azure, zobacz przykład.

Następne kroki