異なるAzureアカウント間でVMからSQLDBへセキュアに接続する

異なるAzureアカウント間でVMからSQLDBへセキュアに接続する方法を試したので書き残します。

# アーキテクチャ図
* 以下のようにSubscription AのVMから、Subscription BのSQL Databaseへのプライベート接続ができたらOKです！  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/0cca1d8d-2b6f-ef22-93f0-25b68fbb4a13.png)

* Azure VM、SQL Database、vNetといった主要リソースの作成手順は割愛します。
* SQL Databaseのファイアウォールは一切許可していません。

# SQL Databaseへのプライベートエンドポイント設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/92114bb6-df1e-5dd4-2bad-394786b6160e.png)

* Azure PortalよりSQL Serverを選択し、左バーから[プライベートエンドポイント接続]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/2d45fb8c-aecb-0a98-3c80-e880b204b9c3.png)

* [+プライベートエンドポイント]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/6a60fb66-cbf5-d858-3d35-515c78c1d8c2.png)

* 名称とリージョンを選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/6de86707-f3f7-913d-386c-98189980e556.png)

* リソースの種類に[Microsoft.Sql/servers]を、リソースにアクセス対象のSQL Serverを、対象サブリソースに[sqlServer]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/76338894-520c-2913-36f6-2a9d554c5fd4.png)

* 事前に準備しておいたvNetとSubnetを選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/a2cd42cd-a3b7-7b66-6730-20fe62b62cd8.png)

* プライベートDNSはOnにします。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/93c46bcb-b4a6-129e-385e-a3e1a094af2d.png)

* 上記設定でプライベートエンドポイントを作成します。

* SQL Serverのプライベートエンドポイント設定画面で、新規に追加されていればOKです。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/faf91ee8-2dfa-ee91-10c9-4731f245fa6b.png)

# 異なるサブスクリプション間でvNet Peeringを設定する

## 権限設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/b8074990-8e27-9565-5ca7-e625916bcc0b.png)

* [Subscription B]のActive Directoryから[Account A]をゲストアカウントとして招待してもらいます。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/b26b594b-206f-14e1-7dc6-58232706452c.png)

* [vNet B]のIAM設定を開き、[追加]を選択します。  
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/df9cec3e-4de4-ce03-0188-ff19971a056f.png)

* ゲストアカウントとして追加した[Account A]に「ネットワーク共同作成者」権限を付与します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/180335/34ca6a85-f326-9f23-7ccd-e3694203d234.png)

## vNetピアリング

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/d3511fac-ae7e-1a9f-be39-a955c79951e1.png)

* VMが配置されたSubscription Aの仮想ネットワークから、SQL Databaseが配置されたSubscription Bの仮想ネットワークに向けてピアリングします。

* Azure Portalより、Subscription Bの仮想ネットワークの[プロパティ]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/79b4227e-d731-fe88-6928-64b77cad98bb.png)

* [リソースID]をメモしておきます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/06fb1b72-8ed8-07f9-50b6-b6285da6b656.png)

* Azure Portalより、Subscription Aの仮想ネットワークの[ピアリング]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/0e872c94-efec-fb95-8d6e-77df7c3fe9a1.png)

* [+追加]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/8c25c975-3843-39b2-aad4-2925b897b60b.png)

* [ピアリングの名前]を入力します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/12146c31-fdaa-0499-e970-f7ceb78db98f.png)

* [リソースIDを知っている]にチェックを入れ、先ほどメモしたリソースIDを貼り付けます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/02122d89-1f27-bcc1-e930-9f37cd108f7d.png)

* Subscription Bのディレクトリを選択し、認証を押下しピアリングを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/ee3a3a69-aadd-fbaf-3003-b175cdfaca73.png)

* ピアリングが[開始済み]になればOKです。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/ff1d7dbf-3e75-e9a9-4c9c-487909673ec5.png)

* 逆向きも同じ手順でピアリングします。

* ピアリングが[開始済み]から[接続済み]になればOKです。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/e1acbe37-b985-84b1-3fd6-ed3a36731e92.png)

# 仮想ネットワークリンク

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/cf6ceef0-3bb1-8424-b439-84ccd6bc2f3f.png)

* このままだとVMからSQLDBへ名前解決してもグローバルIPが引かれてしまうため、プライベートIPで接続できるようにします。

* Subscription BのAzure Portalから[プライベートDNSゾーン]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/f4378508-6268-38ba-b8fc-c3ad0f9fb8e5.png)

* DNSゾーンを選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/a12ac46b-cc79-7484-0231-d5b4cc425192.png)

* 左メニューより[仮想ネットワークリンク]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/e1d391cc-7265-777c-6f9d-410aaed692ef.png)

* [+追加]を選択します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/828bc399-ffbe-8b87-f271-0071f9f5f6be.png)

* 任意のリンク名を入力します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/be542f4f-e953-1299-6659-838a6018ebd5.png)

* [仮想ネットワークのリソースIDを知っています]にチェックを付け、Subscription Aの仮想ネットワークのリソースIDを貼り付けます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/a8f6db28-5cd0-cb9a-f25e-566f04b7b3be.png)

* Subscription Bのディレクトリを選択し、認証を押下します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/bf274fdc-e25f-0e0b-686f-50087b927d73.png)

* [自動登録を有効にする]にチェックを付けて、仮想ネットワークリンクを作成します。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/4c26cc58-99c3-f6d2-7aea-a05d78b70eff.png)

* リンクの状態[完了]で追加されていればOKです。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/180335/032a7372-f62d-c2de-494d-06ead4a05ffb.png)

# 接続確認
* これでVMからSQL Databaseにアクセスするとプライベートリンク経由でのアクセスが可能になります。  


以上