異なるAzureアカウント間でVMからSQLDBへセキュアに接続する方法を試したので書き残します。
アーキテクチャ図
以下のようにSubscription AのVMから、Subscription BのSQL Databaseへのプライベート接続ができたらOKです!
Azure VM、SQL Database、vNetといった主要リソースの作成手順は割愛します。
SQL Databaseのファイアウォールは一切許可していません。
SQL Databaseへのプライベートエンドポイント設定
Azure PortalよりSQL Serverを選択し、左バーから[プライベートエンドポイント接続]を選択します。
[+プライベートエンドポイント]を選択します。
名称とリージョンを選択します。
リソースの種類に[Microsoft.Sql/servers]を、リソースにアクセス対象のSQL Serverを、対象サブリソースに[sqlServer]を選択します。
事前に準備しておいたvNetとSubnetを選択します。
プライベートDNSはOnにします。
上記設定でプライベートエンドポイントを作成します。
SQL Serverのプライベートエンドポイント設定画面で、新規に追加されていればOKです。
異なるサブスクリプション間でvNet Peeringを設定する
権限設定
[Subscription B]のActive Directoryから[Account A]をゲストアカウントとして招待してもらいます。
[vNet B]のIAM設定を開き、[追加]を選択します。
ゲストアカウントとして追加した[Account A]に「ネットワーク共同作成者」権限を付与します
vNetピアリング
VMが配置されたSubscription Aの仮想ネットワークから、SQL Databaseが配置されたSubscription Bの仮想ネットワークに向けてピアリングします。
Azure Portalより、Subscription Bの仮想ネットワークの[プロパティ]を選択します。
[リソースID]をメモしておきます。
Azure Portalより、Subscription Aの仮想ネットワークの[ピアリング]を選択します。
[+追加]を選択します。
[ピアリングの名前]を入力します。
[リソースIDを知っている]にチェックを入れ、先ほどメモしたリソースIDを貼り付けます。
Subscription Bのディレクトリを選択し、認証を押下しピアリングを作成します。
ピアリングが[開始済み]になればOKです。
逆向きも同じ手順でピアリングします。
ピアリングが[開始済み]から[接続済み]になればOKです。
仮想ネットワークリンク
このままだとVMからSQLDBへ名前解決してもグローバルIPが引かれてしまうため、プライベートIPで接続できるようにします。
Subscription BのAzure Portalから[プライベートDNSゾーン]を選択します。
DNSゾーンを選択します。
左メニューより[仮想ネットワークリンク]を選択します。
[+追加]を選択します。
任意のリンク名を入力します。
[仮想ネットワークのリソースIDを知っています]にチェックを付け、Subscription Aの仮想ネットワークのリソースIDを貼り付けます。
Subscription Bのディレクトリを選択し、認証を押下します。
[自動登録を有効にする]にチェックを付けて、仮想ネットワークリンクを作成します。
リンクの状態[完了]で追加されていればOKです。
接続確認
- これでVMからSQL Databaseにアクセスするとプライベートリンク経由でのアクセスが可能になります。
以上