【Azure】プライベートリンクを利用してストレージアカウントにプライベートからアクセスする

# はじめに

はい、皆さまこんにちは。
突然ですが私はプライベートな空間が必須派で、一人でいる時間がないと苦しくなるタイプです。
TwitterなどのSNSもまったく利用しない時間があったり。
四六時中コミュニケーション取っているタイプとは仲良くなれそうにありません。

さて、Azure上では多くのPaaSリソースが存在しているわけですが、当然ながらこれらは複数のユーザーからアクセスできるようになっています。
つまり、パブリックネットワーク上にあるわけです。
PaaSリソースもパブリックなアクセスだけだと疲れてしまう(？)ので、プライベートから接続できるようにしたいものですね。

はい、というわけで今回はプライベートリンクのお話です(雑な導入)

# Azureプライベートリンクとは
__仮想ネットワーク内のプライベートエンドポイント経由でAzure PaaSに接続できるサービス。__
通常PaaSリソースはパブリックインターネットに公開されています。
パブリックインターネットに公開されているということは、__セキュリティを気にしなくてはなりません。__
インターネットに公開されていないのがやっぱり安心です。

また、仮想ネットワークからプライベートで接続できるということは、__ExpressRouteを利用したオンプレミス側ネットワークからもプライベートで接続できるということです。__
プライベートリンクを利用すれば、PaaSリソースをオンプレミスで利用しているのと同じように利用できます。うーん便利。

プライベートリンクは可用性ゾーンにまたがっているため、障害にも強いです。


# プライベートエンドポイントでストレージアカウントに接続する

ではサンプルとして、ストレージアカウントをプライベートエンドポイントで接続するようにしてみましょう。
構成については、以下の通り。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/70b7f7a7-9d9c-da39-a19d-c947ce9a712a.png)|
|:--|

※ストレージアカウントは、プライベートエンドポイント以外にも、パブリックエンドポイントで接続できるVnetを制限することができます。
(下記図②の方法)
しかしやっぱりパブリックエンドポイントなので、セキュリティに不安が残るのはしかたなし。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/53dbf1e1-661b-9dbc-ace9-06011f1e1a47.png)|
|:--|

プライベートエンドポイントの設定は、作成したときでも、作ったあとでも設定することができます。
ここではストレージアカウント作成後の設定を行います。

# 構築

では具体的に構築をやってきましょう！

## Vnet

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/d3ccab97-8e5c-4464-10a6-bd04ded13382.png)|
|:--|

先に適当なVnetとサブネットは作成しておきましょう。

## プライベートリンク

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/347ee829-612c-6633-50e6-4bf72d0ec387.png)|
|:--|

ストレージアカウントの左側メニューから、「ネットワーク」、上部のメニューから「プライベートエンドポイント接続」を選択します。
「プライベートエンドポイント」を選択すると、画面が切り替わります。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/0d90f874-0479-1611-2936-1869870aedde.png)|
|:--|
適当に名前をつけ…

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/f772fad3-6f4c-33fc-9abd-102bd9e480fb.png)|
|:--|

今回はblobストレージ上の静的webサイトを対象にしたいので、webを対象とします。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/2133fb1f-fe00-657b-42de-574c74be73bb.png)|
|--:|

一番最初に作成した仮想ネットワークとサブネットを選択します。
また、プライベートDNSゾーンと統合します。Azure内ではプライベートDNSゾーンを利用するのが簡単です。
書いてある通り、独自のDNSサーバを利用したり、仮想マシン上でhostsファイルを利用してDNSレコードを設定したりすることもできます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/5a8d9592-521b-aeed-c758-ac7ae7d52404.png)|
|:--|

あとは作成しればOKです。

## VM

適当にパブリックIPを付与しないVMを作成しておきます。動作確認が目で分かりやすいようにWindowsServerを立てておきます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/35f9fe79-9612-f43b-447c-e71d342ad4c6.png)|
|:--|

## Azure Bastion

これも適当にAzure Bastionを作成しておきます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/d52da3ad-3afa-f3e0-3301-09809be4d15d.png)|
|:--|

## 動作確認

はい、ここまでで準備ができました。動作確認をします。
わかりやすいように、ストレージアカウントの$webコンテナには、以下をアップロードしておきました。

``` index.html
test private endpoint
```

まずインターネットから普通に静的サイトへアクセスしてみます…

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/aa317c90-51ac-e5ea-5e45-5c6c1fa288c1.png)|
|:--|

404になりますね。正しくブロックされています。

ではBastion経由でVMに接続し、VMから静的サイトに接続してみます…

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626338/de7c5940-b7c3-94db-967b-664721a0b45f.png)|
|:--|

はい、意図した通りのメッセージが表示されますね。
プライベートエンドポイント経由で接続できていることが確認できました。


# 終わりに

今回はプライベートリンクを利用したストレージアカウントの接続方法について書いてみました。
何かのお役に立てれば幸いです。

## 参考
Azure Storage のプライベート エンドポイントを使用する
https://docs.microsoft.com/ja-jp/azure/storage/common/storage-private-endpoints