モダンな Azure Site Recovery を Private Endpoint とプロキシサーバの併用環境で動作させる

azure
Published: 2023-04-04

はじめに

Azure Site Recovery は Private Endpoint を利用して閉域網でデータを複製する構成をサポートしています。

プライベート エンドポイントを使用してオンプレミス マシンをレプリケートする

2023年4月現在、Azure Site Recovery にはモダン方式とクラシック方式が存在していますが、上記のドキュメントに注記がない点を踏まえると、どちらの方式も Private Endpoint をサポートしていると考えてよいでしょう。

ただし、モダンな Azure Site Recovery の通信は Private Endpoint だけでは完結しません。次のドキュメントに記載されている通り、プライベートエンドポイントをサポートしていない FQDN が沢山存在しています。

URL に対する送信接続

とすると、ちゃんとしたネットワーク環境下でモダンな Azure Site Recovery を利用しようとすると、Azure Site Recovery のレプリケーションアプライアンスには次の制約が課せられます。

  • Private Endpoint を利用できる FQDN は可能な限り Private Endpoint を使う
  • Private Endpoint を利用できない FQDN はプロキシを利用してインターネット経由でアクセスする

この「プロキシと Private Endpoint の併用」の設定方法が記載されている公式ドキュメントが見つけられなかったので、クラシックな Azure Site Recovery や似ている仕組みの Azure Migrate のドキュメントを参考にして試行錯誤してみました。

Note

本エントリは試行錯誤の作業メモです。動きはしたものの、正しい設定については公式ドキュメントのアップデートをお待ちいただくか、サポートにお問い合わせください

最終的な構成

最終的には次のような構成が出来上がります。今回の環境では、オンプレミスと Azure は S2S VPN で接続されています。

最終的な構成イメージ

オンプレ環境の状況

オンプレ環境の状況は次の通りです。

  • インターネットへの直接アクセスはファイアウオールで拒否される
  • プロキシサーバを経由する場合にのみインターネットにアクセスできる
  • プロキシサーバはホワイトリスト方式で通信を許可する。Azure AD の認証や Windows Update、Defender for Endpoint などの FQDN が事前に許可されている
  • ただし、プライベートエンドポイントを利用できる Azure PaaS はプライベートエンドポイント経由にしているため、*.blob.core.windows.net や *.servicebus.windows.net などの Azure PaaS 的な * つきFQDN は許可されていない。Private Endpoint 化できない FQDN を都度個別に許可する

従って、次の方針で対応する必要があります。

  • 可能な限り、Private Endpoint 経由にできるものは Private Endpoint 経由にする
  • どうしてもできないものは * ではなく個別の FQDN を許可

Recovery Service Vault の設定

Recovery Service Vault で Private Endpoint を有効化するためには、バックアップやレプリケーションが設定されていない必要があります。ですので、新規の Recovery Service Vault を作成して Private Endpoint を有効化します。

プライベート エンドポイントを使用してオンプレミス マシンをレプリケートする

作成した Recovery Service Vault に対してポータルから Private Endpoint を有効化すると、次のような DNS 名を持つ Private Endpoint が作成されます。

PS C:\Users\ymatsumoto> $pe = Get-AzPrivateEndpoint -ResourceName pe-asr -ResourceGroupName privateasr2
PS C:\Users\ymatsumoto> $nic = Get-AzNetworkInterface -ResourceId $pe.NetworkInterfaces.ID
PS C:\Users\ymatsumoto> $nic.IpConfigurations | Select-Object PrivateIpAddress, @{Label="Cores"; Expression={$_.PrivateLinkConnectionProperties.FQDNs }}

PrivateIpAddress Cores
---------------- -----
10.2.1.13        1265443793182260898-asr-pod01-id1.jpe.siterecovery.windowsazure.com
10.2.1.14        1265443793182260898-asr-pod01-rcm1.jpe.siterecovery.windowsazure.com
10.2.1.15        1265443793182260898-asr-pod01-srs1.jpe.siterecovery.windowsazure.com
10.2.1.16        1265443793182260898-asr-pod01-tel1.jpe.siterecovery.windowsazure.com
10.2.1.17        1265443793182260898-asr-pod01-prot2.jpe.siterecovery.windowsazure.com

レプリケーションアプライアンスの設定

Private Endpoint 付の Recovery Service Vault が出来たので、レプリケーションアプライアンスをオンプレミスの VMware 環境にデプロイします。

Azure Site Recovery レプリケーション アプライアンスのデプロイ - モダン化

デプロイが完了したら、レプリケーションアプライアンスのデスクトップにショートカットが用意されている ASR Replication appliance Configuration Manager を利用して設定を開始します。ただし、初期状態の設定画面では、プロキシサーバを指定はできるものの、プロキシを利用しない FQDN を指定できません。このままだと、Private Endpoint 経由にしたい PaaS 宛ての通信もプロキシを経由してしまいます。

プロキシの設定画面

「ちがう、そうじゃない」ということで、似たような設定画面の Azure Migrate におけるバイパスルールの設定方法を参考にして、プロキシ除外を設定します。

Azure Migrate アプライアンス上で ExpressRoute Microsoft ピアリングのためのプロキシ バイパス ルールを構成する (VMware エージェントレス移行の場合)

C:/ProgramData/MicrosoftAzure/Config/appliance.json の中の “EnableProxyBypassList”: “false” を “EnableProxyBypassList”: “true” に変更して、レプリケーションアプライアンスを再起動します。そうすると、Configuration Manager の画面に除外リストの入力欄が出現します。

除外付きプロキシの設定画面

ここに次の FQDN を記載します。Recovery Service Vault を東日本リージョンに作ったので、東日本リージョンっぽいコードを含んでいます。

  • vault.azure.net
  • jpe.privatelink.siterecovery.windowsazure.com
  • je.disc.privatelink.prod.migration.windowsazure.com

FQDN には * を付けません。* を付けた FQDN を書くと、Configuration Manager でエラーが発生して操作を受け付けなくなります。また、privatelink つきの FQDN で除外します。プロキシのログを見る限りでは、レプリケーションアプライアンスは privatelink つきの FQDN にアクセスしていました。

なぜ、Key Vault と Azure Migrate の FQDN を除外する必要があるかと言うと、レプリケーションアプライアンスの設定を始めると、レプリケーションアプライアンスが自分の利用する Key Vault や Azure Migrate 関連リソース、それらにアクセスするための Private Endpoint と Private DNS Zone を裏で作成するからです。Key Vault と Azure Migrate 関連リソース用の Private Endpoint と Private DNS Zone は、Site Recovery の Private Endpoint が紐づいている VNET に紐づける形で作成されます。

# Recovery Service Vault の存在するリソースグループ内の関連リソース一覧
> Get-AzResource -ResourceGroupName privateasr2 | ft ResourceName,ResourceType

ResourceName                                            ResourceType
------------                                            ------------
privateasr58afkv                                        Microsoft.KeyVault/vaults
pe-asr.nic.ba8a59a1-17b8-4c3a-b379-dabcbbc2f69b         Microsoft.Network/networkInterfaces
privatelink.siterecovery.windowsazure.com               Microsoft.Network/privateDnsZones
privatelink.siterecovery.windowsazure.com/hnr4jz43q7vb6 Microsoft.Network/privateDnsZones/virtualNetworkLinks
pe-asr                                                  Microsoft.Network/privateEndpoints
privateasr58afmastersite                                Microsoft.OffAzure/MasterSites
privateasr58afphysicalsite                              Microsoft.OffAzure/ServerSites
privateasr58afvmwaresite                                Microsoft.OffAzure/VMwareSites
privateasr2                                             Microsoft.RecoveryServices/vaults

# Recovery Service Vault 用 Private Endpoint が接続している VNet 内の関連リソース一覧
> Get-AzResource -ResourceGroupName avd2 | ft ResourceName,ResourceType     

ResourceName                                                                                      ResourceType
------------                                                                                      ------------
privateasr58afkv-aa9de-avd2-avd2--pe-pe.nic.fcee173e-c861-4564-b4e0-a6d7a60e7076                  Microsoft.Network/networkInterfaces
privateasr58afmastersite-aa9de-avd2-avd2--p.nic.ba4a99a1-f2a7-4550-a0b4-bca9bfb7580f              Microsoft.Network/networkInterfaces
privatelink.prod.migration.windowsazure.com                                                       Microsoft.Network/privateDnsZones
privatelink.prod.migration.windowsazure.com/privateasr58afmastersite-aa9de-avd2-avd2--pe-vnetlink Microsoft.Network/privateDnsZones/virtualNetworkLinks
privatelink.vaultcore.azure.net                                                                   Microsoft.Network/privateDnsZones
privatelink.vaultcore.azure.net/privateasr58afkv-aa9de-avd2-avd2--pe-vnetlink                     Microsoft.Network/privateDnsZones/virtualNetworkLinks
privateasr58afkv-aa9de-avd2-avd2--pe-pe                                                           Microsoft.Network/privateEndpoints
privateasr58afmastersite-aa9de-avd2-avd2--pe-pe                                                   Microsoft.Network/privateEndpoints

なお、上記の除外方法だと他人が利用するサービスの FQDN も含まれます。もっと細かい FQDN で除外したい場合には自己責任の上で次のように対応します

  • vault.azure.net
    • 除外せずにレプリケーションアプライアンスの設定を実施する
    • 設定中に Key Vault が作成されるが、プロキシ除外していないので Key Vault へのアクセスがプロキシで拒否されて設定が途中で失敗する
    • 失敗時のエラーメッセージ、もしくはプロキシのログ、または作成されたリソースの情報から Key Vault の FQDN が分かるので、その FQDN を除外に追加する
  • jpe.privatelink.siterecovery.windowsazure.com
    • Recovery Service Vault の Private Endpoint から確認できる FQDN に privatelink を追加したものを除外する
  • je.disc.privatelink.prod.migration.windowsazure.com
    • 除外せずにレプリケーションアプライアンスの設定を実施する
    • 設定中に Azure Migrate 関連リソースが作成されるが、プロキシ除外されていないのでアクセスがプロキシで拒否されて設定が途中で失敗する
    • 失敗時のエラーメッセージ、もしくはプロキシのログ、または同時に作成される Private DNS Zone からFQDN が分かるので、その FQDN を除外に追加する

なお、レプリケーションアプライアンスが「デプロイ中に自動的に作成される Key Vault と Azure Migrate 関連リソースの Private DNS Zone が自動的に反映される名前解決環境」に設置されていない場合、レプリケーションアプライアンスは名前解決に失敗してリソースにアクセスできず、設定が失敗します。

今回の環境ではスポーク VNet 上にキャッシュ DNS サーバが存在しないため、オンプレミスのキャッシュ DNS サーバで Private DNS Zone への条件付きフォワーダすることができません。そのため、レプリケーションアプライアンスの設定中に Azure Portal を眺めておき、作成された Private DNS Zone から FQDN と IP アドレスを確認した上でキャッシュ DNS サーバに A レコードを追加していきました。もし追加が間に合わずレプリケーションアプライアンスの設定が失敗した場合は再実行すれば OK でした。

キャッシュ DNS サーバの設定

プロキシの設定(Service Bus の許可)

レプリケーションアプライアンスの設定において、レプリケーションアプライアンスは Azure の Service Bus と通信します。この Service Bus は Key Vault や Auzre Migrate 関連リソースの様にユーザのサブスクリプション上に作られないため、Private Endpoint 経由にできません。

仕方がないのでプロキシで除外します。さすがに *.servicebus.windows.net でプロキシを開けるのはプロキシの運用ルールに反するので、プロキシのアクセスログで確認できた 個別の FQDN(jpepod01rcm1evhbdiags2j8q.servicebus.windows.net) だけを許可します。

途中経過

これだけやっても、レプリケーションアプライアンスの設定はエラーになります。

エラー画面

プロキシのログを見ると、レプリケーションアプライアンスから *.jpe.privatelink.siterecovery.windowsazure.com へのアクセスが記録されていました。レプリケーションアプライアンスの設定画面でプロキシ除外するだけでは足りないようです。

システムアカウントによるプロキシ除外

「それならば」ということで、システムアカウントにもプロキシと除外設定を追加します。エージェント型 Azure Migrate ではシステムアカウントに対してインターネットオプションのプロキシ設定をするように書かれていますし、プロセスサーバが利用している Azure Backup エージェント(cbengine.exe)でもシステムアカウントに対してインターネットオプションのプロキシ設定をするように書かれています。

というわけで、PsExec でインターネットオプションを開いて、プロキシ設定および *.jpe.privatelink.siterecovery.windowsazure.com の除外を追加します。

> .\PsExec.exe -i -s cmd
> inetcpl.cpl

すると、先程のエラーが解消されて、レプリケーションアプライアンスの設定が完了します。

レプリケーションアプライアンスの設定完了画面

そして、Azure Portal 上にレプリケーションアプライアンスが表示されます。Recovery Service Agent のエラーは30分ほどトラブルシュートしている間に自然復旧しました…

Azure Portal 上に出現したレプリケーションアプライアンス

キャッシュストレージのプロキシ除外

Azure Portal 上に正常なレプリケーションアプライアンスが登録できたので、いざ尋常にサーバのレプリケーションを設定します。しかし、初期レプリケーションは失敗します。

レプリケーション結果

これはレプリケーションアプライアンスからキャッシュストレージへのアクセスがプロキシサーバで破棄されていることが原因です。これを解消するために、システムアカウントのインターネットオプションのプロキシ除外に *.blob.core.windows.net を追加します。* ではなくキャッシュストレージの FQDN を個別に除外しても動くと思います。

しばらく待つと、レプリケーションが完了します。長かった。

レプリケーション結果

まとめ

モダンな Azure Site Recovery を Private Endpoint とプロキシサーバの併用環境で動作させてみました。結果を踏まえると、必要な設定は次の通りになりそうです。

  • インターネット経由になってしまう URL をプロキシで許可する
  • レプリケーションアプライアンスの設定時にプロキシを指定しつつ、Private Endpoint 経由にできる次の FQDN をプロキシ除外
    • vault.azure.net
    • privatelink.siterecovery.windowsazure.com
    • disc.privatelink.prod.migration.windowsazure.com
  • レプリケーションアプライアンスのシステムアカウントでインターネットオプションのプロキシ設定しつつ、Private Endpoint 経由にできる次の FQDN をプロキシ除外
    • *.privatelink.siterecovery.windowsazure.com
    • *.blob.core.windows.net

Note

  • 当サイトは個人のブログです。このブログに示されている見解や意見は個人的なものであり、所属組織の見解や意見を表明するものではありません。
  • 公開情報を踏まえて正確な情報を掲載するよう努めますが、その内容の完全性や正確性、有用性、安全性、最新性について一切保証しません。
  • 添付文章やリンク先などを含む本サイトの内容は作成時点でのものであり、予告なく変更される場合があります。