異なる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にアクセスするとプライベートリンク経由でのアクセスが可能になります。
以上