Azure Bastion (Preview) を試してみる

[Azure Bastion](https://azure.microsoft.com/ja-jp/blog/announcing-the-preview-of-microsoft-azure-bastion/?WT.mc_id=AZ-MVP-5003113) のプレビューが発表されたので試してみます。
ちょっと気になるサービスだったので、早々に触ってみようと思います。

# 今までの仮想マシンのリモート操作パターンを整理
今までのベストプラクティスはおそらく以下の 3 パターンになるかと思います。

- 仮想ネットワーク上にジャンプボックスとなる仮想マシンを構築する。PC からそのジャンプボックスに RDP/SSH 接続して、対象の仮想マシンのリモート操作を行う。
- PC と仮想ネットワークとをポイント対サイト VPN 接続して、対象の仮想マシンのリモート操作を行う。
- オンプレミスと仮想ネットワークとをサイト間 VPN 接続し、RD ゲートウェイを設置する。PC からその RD ゲートウェイを経由して、対象の仮想マシンのリモート操作を行う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/4b0bb6b2-c515-d17e-0557-d42ee9cd4240.png)

なお、対象の仮想マシンへの直接的な RDP/SSH 接続は推奨されていませんので、本番環境では控えましょう。

# Azure Bastion とは
マネージドな PaaS サービスで、ブラウザーで [Azure Portal](https://portal.azure.com/) から仮想ネットワーク上の仮想マシンにプライベート IP アドレスで RDP / SSH 接続できます。なお、対象の仮想マシンにはパブリック IP アドレスは不要です。
ざっくりいうと「マネージドな踏み台サーバー」というところでしょうか。

![Azure Bastion overview](https://docs.microsoft.com/ja-jp/azure/bastion/media/bastion-overview/architecture.png?WT.mc_id=AZ-MVP-5003113)

[参考：What is Azure Bastion? (Preview)](https://docs.microsoft.com/ja-jp/azure/bastion/bastion-overview?WT.mc_id=AZ-MVP-5003113)

# はじめる前に
このサービスを試せるリージョンは、以下のページの節を確認できます。
※今回は「東日本」で試してみました。

[参考：Create an Azure Bastion host (Preview) > Before you begin](https://docs.microsoft.com/ja-jp/azure/bastion/bastion-create-host-portal?WT.mc_id=AZ-MVP-5003113#before-you-begin)

まず、利用するためにプレビュー利用登録を行います。
PowerShall で Azure サブスクリプションにサインインして以下のコマンドを実行します。

```
Register-AzProviderFeature -FeatureName AllowBastionHost -ProviderNamespace Microsoft.Network
Register-AzResourceProvider -ProviderNamespace Microsoft.Network
```

次のコマンドで、AllowBastionHost 機能がサブスクリプションに登録されていることを確認します。筆者が実際にやってみた時は 15 分くらいで Registered が返ってきました 。

```
Get-AzProviderFeature -ProviderNamespace Microsoft.Network
```

以下の実行結果が返ってくるまで、上記のコマンドを何度も実行します。

```
FeatureName      ProviderName      RegistrationState
-----------      ------------      -----------------
AllowBastionHost Microsoft.Network Registered
```

# 確認するための環境を用意する
[Azure Preview Portal](http://aka.ms/BastionHost) にサインインします。
あらかじめ、仮想ネットワークとリモート操作の対象となる仮想マシンをデプロイしておきましょう。
なお、仮想マシンにはパブリック IP アドレスを関連付ける必要はありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/eb4907d6-89b4-566c-1da8-f58d5a90ccd1.png)

仮想ネットワーク上に Bastion のデプロイ先となるサブネットを作成します。
サブネットの名前は「AzureBastionSubnet」とし「/27」以上のアドレス範囲を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/9800c118-0390-950e-88b3-6efe1ec354ec.png)

# Bastion をデプロイ
Marketplace で「Bastion」を検索し、検索結果から「Bastion (プレビュー)」をクリック、その後遷移したページで [作成] をクリックすると、「Create a bastion」ページが開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/37cf02e5-8c9b-e34b-577b-652211c6c045.png)

[基本] タブで必要な情報を入力します。

- 「リソースグループ」は先ほどの仮想ネットワークが属すものを指定。
- 「名前」は適当にどうぞ。
- 「地域」は先ほどの仮想ネットワークと同じリージョンを指定。
- 「仮想ネットワーク」は先ほどの仮想ネットワークを指定。自動的にサブネット「AzureBastionSubnet」も指定されるはず。
- Bastion にはパブリック IP アドレスは必須。SKU は「Standard」固定のようです。

入力後、[確認および作成] をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/fd8c98a4-bbb8-9c9a-2a57-25ffd625f9f7.png)

そして、最後に [確認および作成] タブで [作成] をクリックで Bastion を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/38a3199e-ed62-bd7b-b2bc-e11eb381c779.png)

およそ 5 分くらいで出来上がりました。
出来上がった Bastion リソースページを見たかんじでは、プロパティを設定するような操作はなさそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/f53b7c5e-28ab-120c-8faa-0253f3819a00.png)

仮想ネットワークの接続デバイスを確認すると、Bastion 用の仮想マシンスケールセット (VMSS) が 2 インスタンスがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/89008d86-f99f-4c8c-5922-04e76467859e.png)

この VMSS インスタンスをクリックしたら「アクセス権なし」ということで、こちらもとくにプロパティを設定するような操作はなさそうです。

# 対象の仮想マシンに接続してみる

いつものように、仮想マシンの [Connect] をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/ca56d2dc-7686-95d4-dc66-140f5d55298a.png)


そうすると、右から [仮想マシンに接続] パネルが出てきます。
いつもの (RDP/SSH) タブの他に [Bastion] タブが追加されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/6ebdc253-6352-edc9-59fb-9e807405bf1a.png)

[Username] と [Password] に対象の仮想マシンの管理者ユーザー名とパスワードを入力して [Connect] をクリックします。
※対象の仮想マシンが属するサブネットに NSG (デフォルトでも OK) をセットしておくことを忘れずに。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230264/7427964d-2416-1291-502b-2b7a7a79c7a0.png)

ブラウザーの新しいタブが開き、対象の仮想マシンのデスクトップ画面が表示されました。すごい！

# まとめ
手軽に仮想マシンのリモート操作環境が構築できるのはとてもラクちんで素晴らしいです。
VMSS の技術も使ったサービスだったとは知らなかったので、その発見だけでもやってみて良かったかなと思います。

# 参考文献
[参考：What is Azure Bastion? (Preview)](https://docs.microsoft.com/ja-jp/azure/bastion/bastion-overview?WT.mc_id=AZ-MVP-5003113)
[参考：Create an Azure Bastion host (Preview)](https://docs.microsoft.com/ja-jp/azure/bastion/bastion-create-host-portal?WT.mc_id=AZ-MVP-5003113)
[参考：Working with NSG access and Azure Bastion (Preview)](https://docs.microsoft.com/ja-jp/azure/bastion/bastion-nsg?WT.mc_id=AZ-MVP-5003113)