Membatasi konektivitas publik di Azure HDInsight

Dalam arsitektur jaringan virtual default Azure HDInsight, penyedia sumber daya HDInsight berkomunikasi dengan kluster melalui jaringan publik. Dalam artikel ini, Anda mempelajari kontrol lanjutan yang dapat digunakan untuk membuat kluster HDInsight terbatas dan konektivitas masuk dibatasi ke jaringan privat.

Jika Anda menginginkan konektivitas publik antara kluster HDInsight dan sumber daya dependen, pertimbangkan untuk membatasi konektivitas kluster Anda dengan mengikuti panduan di Mengontrol lalu lintas jaringan di Azure HDInsight. Selain membatasi konektivitas publik, Anda dapat mengonfigurasi sumber daya dependensi Azure Private Link-yang diaktifkan untuk digunakan dengan kluster HDInsight.

Diagram berikut menunjukkan seperti apa potensi arsitektur jaringan virtual HDInsight ketika resourceProviderConnection diatur ke keluar:

Diagram arsitektur HDInsight yang menggunakan koneksi penyedia sumber daya keluar.

Catatan

Membatasi konektivitas publik merupakan prasyarat untuk mengaktifkan Azure Private Link dan tidak boleh dianggap sebagai kemampuan yang sama.

Inisialisasi kluster terbatas

Secara default, penyedia sumber daya HDInsight menggunakan koneksi masuk ke kluster dengan menggunakan alamat IP publik. Saat resourceProviderConnection properti jaringan diatur ke keluar, koneksi akan dibalikkan ke penyedia sumber HDInsight sehingga koneksi selalu diinisialisasi dari dalam kluster lalu keluar menuju penyedia sumber daya.

Dalam konfigurasi ini, tanpa koneksi masuk, konfigurasi tag layanan masuk di kelompok keamanan jaringan tidak lagi diperlukan. Lintasan appliance firewall atau virtual jaringan melalui rute yang ditentukan pengguna tidak lagi diperlukan.

Catatan

Implementasi di Microsoft Azure Government mungkin masih memerlukan tag layanan masuk dalam grup keamanan jaringan dan rute yang ditentukan pengguna.

Setelah Anda membuat kluster, siapkan resolusi DNS yang tepat dengan menambahkan rekaman DNS yang diperlukan untuk kluster HDInsight terbatas Anda. Catatan DNS nama kanonis (CNAME) berikut dibuat di zona DNS publik terkelola Azure: azurehdinsight.net.

<clustername>    CNAME    <clustername>-int

Untuk mengakses kluster dengan menggunakan nama domain yang sepenuhnya memenuhi syarat (FQDN), Anda dapat menggunakan salah satu dari teknik ini yang sesuai dengan kebutuhan Anda:

  • Gunakan alamat IP privat pada load balancer internal secara langsung.
  • Gunakan zona DNS privat Anda untuk mengambil alih titik akhir kluster. Dalam hal ini, nama zona harus azurehdinsight.net.

Misalnya, untuk zona DNS privat azurehdinsight.net, Anda dapat menambahkan alamat IP privat sesuai kebutuhan:

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

Catatan

Kami tidak menyarankan untuk menempatkan kluster terbatas di jaringan virtual yang sama (dengan zona DNS privat untuk azurehdinsight.net) seperti kluster lain yang mengaktifkan konektivitas publik. Ini dapat menyebabkan perilaku atau konflik resolusi DNS yang tidak diinginkan.

Untuk memudahkan penyiapan DNS Anda, kami mengembalikan FQDN dan alamat IP privat yang sesuai sebagai bagian dari respons GET klaster. Anda dapat menggunakan cuplikan PowerShell ini untuk memulai:

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

Dengan mengonfigurasi resourceProviderConnection ke keluar, Anda dapat mengakses sumber daya khusus kluster dengan menggunakan titik akhir privat. Sumber daya ini meliputi:

  • Penyimpanan: Azure Data Lake Storage Gen2 dan Azure Blob Storage
  • Metastore SQL: Apache Ranger, Ambari, Oozie, dan Hive
  • Azure Key Vault

Titik akhir privat tidak wajib digunakan untuk sumber daya ini. Tetapi jika Anda berencana untuk menggunakan titik akhir privat untuk sumber daya ini, Anda harus membuat sumber daya dan mengonfigurasi titik akhir privat dan entri DNS sebelum Anda membuat kluster HDInsight. Semua sumber daya ini sebaiknya dapat diakses dari dalam subnet kluster, baik melalui titik akhir privat atau dengan cara lain. Jika Anda berencana menggunakan titik akhir privat, disarankan untuk memanfaatkan subnet kluster.

Saat Anda membuat sambungan ke Azure Data Lake Storage Gen2 melalui titik akhir privat, pastikan akun penyimpanan Gen2 memiliki titik akhir yang ditetapkan untuk blob dan dfs. Untuk informasi selengkapnya, lihat Membuat titik akhir privat.

Gunakan firewall (opsional)

Kluster HDInsight masih dapat tersambung ke internet publik untuk mendapatkan dependensi keluar. Jika Anda ingin membatasi akses, Anda dapat mengonfigurasi firewall, tetapi itu bukan persyaratan.

Membuat klaster

Cuplikan kode JSON berikut menyertakan dua properti jaringan yang harus Anda konfigurasikan di templat Azure Resource Manager Anda untuk membuat kluster Microsoft Azure HDInsight privat:

networkProperties: {
    "resourceProviderConnection": "Outbound"
}

Untuk templat lengkap dengan banyak fitur keamanan perusahaan HDInsight, termasuk Private Link, lihat templat keamanan perusahaan HDInsight.

Untuk membuat kluster menggunakan PowerShell, lihat contoh.

Untuk membuat kluster menggunakan Azure CLI, lihat contoh.

Langkah berikutnya