パブリックアクセスを制限したAzure HDInsightの構成について

Azure HDInsightは、パブリックネットワークからのアクセス許可を前提とした構成が既定の構成とされています。

一方で、実運用では外部からインターネット経由での通信を許可せず、プライベート通信に限定するようなケースも存在するかと思います。

今回は、Azure HDInsightへのインバウンド通信をプライベートネットワークに限定する場合の、リソース構成について説明します。

Azure HDInsightの構成

Azure HDInsightは、HDInsightクラスターとリソースプロバイダー間のネットワークトラフィックの方向を、「リソースプロバイダー接続」の設定項目で、「Inbound」か「Outbound」のいずれか選択することができます。

どちらの設定を選択したかにより、仮想ネットワークアーキテクチャが変わります。*1

Inboundの場合

Inboundを選択した場合、アーキテクチャは以下の図のようになります。(依存リソースは省略)

リソースプロバイダー接続がInboundのAzure HDInsight

図中のロードバランサー1~3は、それぞれ以下の用途で構成されます。

  1. インターネット経由でAmbariやその他サービスへアクセスするためのパブリックなエンドポイント
    • HTTP:<HDInsightクラスター名>.azurehdinsight.net
  2. 仮想ネットワークからAmbariやその他サービスへアクセスするためのプライベートなエンドポイント
    • HTTP:<HDInsightクラスター名>-int.azurehdinsight.net
  3. インターネット経由でヘッドノードへ接続するためのパブリックなエンドポイント
    • SSH:<HDInsightクラスター名>-ssh.azurehdinsight.net

1、3はパブリックIPを持つ外部ロードバランサーが、2はパブリックIPを持たない内部ロードバランサーが作成されます。

この構成では、クライアントは1、3の外部ロードバランサーを使用して、パブリックネットワーク経由でHDInsightクラスターへアクセスできます。

詳細については以下のドキュメントを参照してください。
learn.microsoft.com

Outboundの場合

Outboundを選択すると、アーキテクチャが以下の図のように変わります。(依存リソースは省略)

リソースプロバイダー接続がOutboundのAzure HDInsight

図中のロードバランサー1、2は、それぞれ以下の用途で構成されます。

  1. 仮想ネットワークからAmbariやその他サービスへアクセスするためのHTTPプライベートなエンドポイント(HTTP)
  2. 仮想ネットワークからヘッドノードへ接続するためのプライベートなエンドポイント(SSH)

リソースプロバイダー接続がOutoboundのHDInsightクラスターを作成する際にはパブリックIPを持たない内部ロードバランサーのみが提供され、HDInsightクラスターが受信用のパブリックエンドポイントを持たない構成となります。

そのため、この構成においては、外部のクライアントからHDInsightクラスターへのパブリックアクセスが原則不可となります。

Outbound選択時の通信について

Outbound選択時には、HDInsightのリソースプロバイダー接続が受信から送信に変わり、HDInsightの管理通信がクラスター内部から発信されます。そのため、HDInsightの管理通信をNSGの受信規則で許可したり、Azure Firewall利用時に、管理通信へのルートをユーザー定義ルートでオーバーライドしたりする必要はありません。

また、Outbound選択時には、既定のストレージアカウントや外部メタストア用のSQL DatabaseといったHDInsightクラスター固有のリソースに対してプライベートエンドポイントを割り当てることで、クラスターからプライベートエンドポイント経由で固有リソースへアクセスできるようになります。

留意点

こちらの構成の場合、エンドポイント用に提供されるFQDNを使用してHDInsightクラスターへアクセスするためには、ユーザー側でDNSレコードを登録する必要があります。

  • 1に対応するFQDN
    • <HDInsightクラスター名>.azurehdinsight.net
  • 2に対応するFQDN
    • <HDInsightクラスター名>-ssh.azurehdinsight.net

こちらの構成の詳細は、以下ドキュメントに記載されています。
learn.microsoft.com

検証

リソースプロバイダー接続がOutboundのHDInsightクラスターを作成し、クラスターと同一ネットワーク内にあるVMから、FQDNを使用してクラスターへアクセスできるか検証します。
ここでは、以下の検証環境を一時作成します。

検証環境イメージ図

事前準備

HDInsightクラスター作成のための事前準備をします。*2

HDInsight用のNSGは既定のルールのみで作成します。

HDInsight用のストレージアカウント(Azure Data Lake Storage Gen2)を作成します。[階層型名前空間を有効にする]のチェックボックスを選択して作成します。

HDInsight用のユーザー割り当てマネージドIDを作成し、ストレージアカウントに対して[BLOBデータ所有者]ロールを割り当てます。

HDInsightクラスター作成

HDInsightクラスターを作成します。ここでは、特筆事項を抜粋して設定値を説明します。

各設定項目の詳細については以下のドキュメントを参照してください。
learn.microsoft.com

クラスターの種類は任意ですが、今回はHadoopを選択しています。

既定のストレージアカウントは、事前作成したAzure Data Lake Storage Gen2を選択します。Azure Data Lake Storage Gen2アクセス用のマネージドIDについても、事前作成したマネージドIDを選択します。

リソースプロバイダー接続は[Outbound]を設定します。

HDInsightクラスターの作成が完了しました。

プライベートDNSゾーン作成

FQDNを使用したHDInsightクラスターへの接続を可能にするため、プライベートDNSゾーンを作成してAレコードを登録します。

プライベートDNSゾーン名は「azurehdinsight.net」で作成します。

作成したゾーンを、HDInsightクラスターが所属する仮想ネットワークへリンクします。

作成したゾーンに、以下のAレコードを追加します。

  • <HDInsightクラスター名> A <HTTPエンドポイントのIPアドレス>
  • <HDInsightクラスター名>-ssh A <SSHエンドポイントのIPアドレス>


「<HDInsightクラスター名>.azurehdinsight.net」に対応するIPアドレス

HDInsightクラスター作成時に、同一リソースグループ内に作成される「gateway-internal-<HDInsightクラスターID>」のLBにて、フロントエンドIPから確認できます。

「<HDInsightクラスター名>-ssh.azurehdinsight.net」に対応するIPアドレス

HDInsightクラスター作成時に、同一リソースグループ内に作成される「headnode-internal-<HDInsightクラスターID>」のLBにて、フロントエンドIPから確認できます。

接続確認

実際に、HDInsightクラスターと同一ネットワーク内にあるVMから、FQDNを使用してHDInsightクラスターへ接続できるかどうかを確認します。

<HDInsightクラスター名>.azurehdinsight.netへの接続確認

接続確認用VMにRDP接続し、PowerShellで以下のコマンドを実行します。
(Invoke-WebRequest -Uri "https://<HDInsightクラスター名>.azurehdinsight.net" -credential "<クラスターログインユーザー名>").StatusCode

HDInsightクラスター作成時に設定した認証情報を入力して[OK]を選択します。

ステータスコードが200で返されることを確認できます。

<HDInsightクラスター名>-ssh.azurehdinsight.netへの接続確認

接続用VMにRDP接続し、PowerShellで以下のコマンドを実行します。
ssh <SSHユーザー名>@<HDInsightクラスター名>-ssh.azurehdinsight.net

クラスターへの接続が成功することを確認できます。

外部からの接続

外部からインターネット経由で接続しようとすると失敗します。

  • <HDInsightクラスター名>.azurehdinsight.netへの接続
  • <HDInsightクラスター名>-ssh.azurehdinsight.netへの接続

おわりに

本記事では、パブリックアクセス制限時のAzure HDInsightの構成と検証内容について説明しました。

ご参考になれば幸いです。

*1:厳密には、Private Linkを有効にした場合や、特定のクラスターの種類選択時のオプションによっても変わりますが、ここでは割愛します

*2:仮想ネットワークや接続確認用のVM作成は割愛します

執筆担当者プロフィール
牧 琴音

牧 琴音(日本ビジネスシステムズ株式会社)

クラウドソリューション事業本部所属。Azureを中心とした業務に携わっています。

担当記事一覧