🫘

オンプレマシン を ExpressRoute + Private Link で Azure Arc へ接続!

2023/12/11に公開

こちらは Microsoft Azure Tech Advent Calendar 2023 11日目 の記事です。

はじめに

Azure Arc を使用すると、オンプレミスのマシンや、他のパブリッククラウドにあるマシンなどを、Azure へ接続することができ、Azure Portal から管理ができるようになります。
Azure Monitor Agent を導入してAzure マシンと同じようにメトリックやログを取得したり、Azure Update Management でのパッチ管理、Azure Policy での一括のポリシー適用などなど … Azure マシンと共に運用をしていくといったことが可能になります。特に最近は ESU で注目されているかもしれません。

オンプレミスマシンには、Azure Connected Machine エージェント というエージェントをインストールする必要があります。
このエージェントが、Azure に対して基本的にはアウトバンドで通信し、Azure Arc へ接続します。

今回はこの通信を、インターネットを経由させないよう、Azure ExpressRoute 経由で Azure へ送信するべく、Azure Arc Private Link Scope を構成してみました。
しかしながら、公開ドキュメント には

Microsoft Entra ID と Azure Resource Manager へのトラフィックは、Azure Arc プライベート リンク スコープを通過せず、インターネットへの既定のネットワーク ルートを使用します。

という注意点があるため、インターネットへのアクセス不要というわけにはいきません。
とはいえ、各種メタデータの送信の大部分は、インターネット経由せずに済むので有用ではあると思います。

Azure Connected Machine エージェント

検証構成

今回は、以下のような構成を作って確かめてみました。

ざっと構成を見ておくと...

  • ExpressRoute で オンプレ が Azure VNet と接続されている(本記事範囲外)
  • Azure Arc の Private Link Scope が構成され、Private Endpoint が VNet に接続されている
  • Azure Arc 関連の プライベートDNSゾーン が作成され、VNet に関連付けられている
  • VNet にはオンプレミスの DNSサーバー からの名前解決を受け付ける DNS Proxy が作成され、オンプレミスの DNS サーバーからの条件付きフォワーダーが設定されている
  • インストール用スクリプト取得のトラフィックや、Microsoft Entra ID と Azure Resource Manager へのトラフィックは、インターネットを経由する。

という感じです。

さっそく試してみましょう

Step1. ExpressRoute で オンプレ を Azure と接続 (本記事範囲外)


ExpressRoute でオンプレミス環境 と Azure VNet を接続する手順は、本記事では割愛しますが、たとえば以前作成した ExpressRoute 導入の流れを確認してみる などが作業する際には参考になるかと思います。Step2 以降は、オンプレミス環境とリソースグループ : RG-arcdemo 内に作成したVNet : VNet-demo が接続された環境で試していきます。

Step2. VNet に DNS Proxy を作成し、オンプレミスの DNS サーバーからの条件付きフォワーダーを設定


Azure 上に DNS Proxy を作成します。マネージドな DNS Proxy である Azure DNS Private Resolver を利用しても良いですし、他には Azure Firewall を利用しても良し、VM を作成して DNS の役割をインストールしても良し、です。
なお、この DNS Proxy 自体は、168.63.129.16 をフォワーダーとして設定しておきます。

Azure 上に DNS Proxy が用意出来たら、続いて、オンプレミスの DNS サーバー に条件付きフォワーダーを設定します。
Azure Arc 関連の プライベートDNSゾーンと対応する、以下ゾーンをフォワードするよう構成します。

  • his.arc.azure.com
  • guestconfiguration.azure.com
  • dp.kubernetesconfiguration.azure.com

なお、具体的な作成手順は、以前作成した記事が参考になるかとは思います。


Azure Arc の Private Link Scope を構成していきます。
公開ドキュメントとしては、まずは Private Link Scope を作成する流れなのですが、今回はいきなり マシンを登録する画面から行ってしまいます。

Azure Portal を開き、[Azure Arc] を検索して Arc の管理画面を開きます。
左側タブから [マシン] を選択し、[+追加/作成] - [マシンの追加] を選択します。


地域 として [Japan East] を選択し、接続方法 として [プライベートエンドポイント] を選択します。
[プライベートエンドポイント] を選択すると、Private Link Scope を プルダウン で選択する画面になりますが、ここで下部のリンクをクリックして、新しくを作成する画面へ進めます。

Step1. で作成済みの VNet : VNet-demo を選択します。プライベートDNS統合も [はい] を選択しておき、プライベート DNS ゾーン を作成する リソースグループ を選択します。
OKを押して、プライベートDNSゾーン を作成します。

ちなみに、選択した仮想ネットワークに、既に Arc 関連のプライベートDNSゾーン がリンクされていた場合には、リソースグループの選択などができない状況になります。

[スクリプトのダウンロードと実行] へ進みます。
スクリプトが表示されますが、この実行については Step4. で説明します。

なお、既にこの時点で、 指定したリソースグループに、以下のような プライベートDNSゾーン が作成され、VNet と関連付けられている状況になっています。

Step4. オンプレミスマシンに Azure Connected Machine Agent をインストールし、 Azure Arc に接続する

それでは、 Step3. でダウンロードしたスクリプトを オンプレミス の マシン で実行します。
PowerShell のスクリプトなので、オンプレミスのマシンで管理者権限で PowerShell を起動し、スクリプトを実行します。

スクリプトの中身については、わかりやすい環境変数名ですし、コメントも入っている短いスクリプトなので、見れば概ね何をしているかがわかるようになっているかと思います。
スクリプトを実行すると、まずは、インターネット経由でインストールパッケージがダウンロードされ、Azure Connected Machine Agent のインストールが行われます。

続けて、インストールの完了後、エージェントを Azure Arc へ接続する azcmagent-connect コマンド が実行されます。
Azure 上に、オンプレミスのマシンに対応するメタデータが作成され、Azure Connected Machine Agent と関連付けられます。

Step5. Azure Arc に接続されたマシンを確認する

登録できました!!
Azure Portal で Azure Arc の管理画面を開き、左側タブから [マシン] を選択すると、登録したマシンが表示されています。

オンプレミスマシン側で確認したい場合には、 azcmagent check コマンド で、プライベート エンドポイント を利用しているかどうかが確認できます。

cmd.exe
azcmagent check --location japaneast --enable-pls-check --verbose

その他、Azure Arc Private Link Scope のリソース状態をみておく

今回の手順で作成した Azure Arc Private Link Scope は、パブリックネットワークアクセス : Disabled になっています。
ちなみに "Disabled" の部分は クリック可能なリンク になっており、変更したい場合にはこちらをクリックして Enabled へ変更すれば、インターネット経由での接続も可能になります。

Azure Arc Private Link Scope に対応する Private Endpoint が作成されていることも確認しておきます。

また、Azure Arc リソース欄には、登録した Azure Arc Enabled Machine が表示されています。

最後に作成された Azure Arc 関連の プライベートDNSゾーン についても確認しておきます。
各ゾーンの主な役割は こちらのドキュメント に記載されています。

  • privatelink.his.arc.azure.com ゾーン
A レコード 備考
gbl.privatelink.his.arc.azure.com. システム割り当てマネージド ID 証明書をプルするためリージョン エンドポイントを取得するためのエンドポイント
je.privatelink.his.arc.azure.com. システム割り当てマネージド ID 証明書をプルするリージョン エンドポイント
japan-ats.privatelink.his.arc.azure.com. メタデータとハイブリッド ID サービス
  • privatelink.guestconfiguration.azure.com ゾーン
A レコード 備考
agentserviceapi.privatelink.guestconfiguration.azure.com. 拡張機能管理とゲスト構成サービス
japaneast-gas.privatelink.guestconfiguration.azure.com. 拡張機能管理とゲスト構成サービス
  • privatelink.dp.kubernetesconfiguration.azure.com ゾーン
A レコード 備考
japaneast.privatelink.dp.kubernetesconfiguration.azure.com. エージェントが状態をプッシュして構成情報をフェッチするためのデータ プレーン エンドポイント。



参考

https://learn.microsoft.com/ja-jp/azure/azure-arc/servers/private-link-security

https://learn.microsoft.com/ja-jp/azure/azure-arc/network-requirements-consolidated?tabs=azure-cloud

Microsoft (有志)

Discussion