特別編 スクープ!Azure Bastionを構築しちゃいます!?
2019-06-21
azblob://2022/11/11/eyecatch/2019-06-20-evening-azure-challenge-special-000-e1561087903983.jpg

こんにちは!クラウドソリューションエンジニアの花野です。EVEN(ing) Azureチャレンジ、第5回です。過去の一覧はこちらから。前回の更新ではちょっと趣向を変えてTeams関連のニュースをお届けいたしました。この企画の趣旨は「オンプレミスのことは分かるけどクラウドやAzureはあまり触ったことがない方々向けに、サンプルのシステムを少しずつ構築しながらポイントを解説して行こう」なのでシリーズから外しましたが、そちらもお読みいただけると嬉しいです。

さて、今回はネットワークセキュリティグループ回の予定でしたが、ここでまた新しいニュースが!しかもこの連載に密接に絡む機能です!その名も、Azure Bastion!!!まだプレビューでの公開で、正式リリース前ではありますが、Azure上の仮想マシンに対して、Azureポータルを経由して安全にリモートデスクトップ接続やSSH接続ができる機能です。気になる!すごく気になる!!!でも、仮想マシンの一つさえ存在していないこの環境で構築してみたところで、何にも接続できません!無念!また今度!

……なんて、やっぱりこんな楽しそうなもの、置いておけませんでした。前回のエントリのようにシリーズから別扱いにすることも考えたのですが、がっつりインフラなので話題に入れたい……と悩んだ結果、少し未来の番外編という位置付けで、Azure Bastionを構築させていただくことにします!
ちなみにAzure Bastionの構築で困ってこのページに辿り着いた方は、一番下にまとめを載せていますので、途中の読み物パートは飛ばしてさくっとそちらをご覧ください。

では早速やってみましょう。プレビューのアナウンスから早々に、ちゃんとドキュメントが公開されていて心強いです。ここからは、ドキュメントに沿って手順を試してみます。なお、現時点では手順はまだ英語での提供です。タイトルだけ微妙に日本語になっていますが「要塞ホスト」と強そうだけどなんだかよく分からない訳になっているのがまた面白いです。

まずはPowerShellを2つ投げてBastionを有効化、と。問題なく実行できました。結果はこんな感じです。

Register-AzureRmProviderFeature -FeatureName AllowBastionHost -ProviderNamespace Microsoft.Network Register-AzureRmResourceProvider -ProviderNamespace Microsoft.Network

そしてGetで結果を取得、と。

Get-AzureRmProviderFeature -ProviderNamespace Microsoft.Network

……おや、何も変わっていません。調べたところ、どうやら反映に少し時間がかかるようです。

気長に待って…(って、何度もGetしているあたりにイラチが垣間見えていますが)…………………やったあ!反映されました。私の場合は15分くらいかかりました。

準備ができたら、いよいよAzure Bastionの作成です。専用のプレビューのポータルにログインして作成するみたいです。このポータル、ヘッダがオレンジ色でした。裏面みたいでちょっとわくわくしますね。

Bastionから新規追加を選んで、各項目を入力して行きます。少し面白かったのは、仮想ネットワークを選んだ時。適当にありものの仮想ネットワークを選んだところ、「Bastion用のサブネットがないと嫌だよ。名前はAzureBastionSubnetで、/27以上ね。」などと要求して来ました。

「くそう、わがままさんめ!!!」なんて言いつつ、内心喜んでほいほい作成してあげます。我ながらチョロい。ちなみに、専用のサブネットが必要で、サブネットの名前が決まっていて、/27以上とか求めてくるあたり、Azure Firewallっぽさあります。さらにこのサブネットにはネットワークセキュリティグループやルートテーブルを設定してはだめで、このあたりもAzure Firewall用のサブネットと似ています。こういった注意事項もちゃんとドキュメントの分かりやすい場所に記載されています。ありがたい。

ちょっとひっかかったのはグローバルIPを求められたところ。Azureポータルから使うというところからBastionはグローバルIPを持たないイメージでしたが、実際にはグローバルIPが必要です。しかも静的な。AzureポータルからBastionを呼んだ時に、一回外に出てグローバルIPを持った仮想アプライアンスみたいなのを叩いているのかなあ……なんて妄想してみたのですが、よく分からず。元気があれば追ってもう少し調査してみたいと思いますが、プレビューだしまた動きが変わりそうだなあなんてことも思いつつ。

さくさくっと入力して、[作成]!後は待つばかり……………と、まさかの失敗!?

20分も待たされた上で、失敗!しかもこういう時の常として、なんで失敗したのかが分かりません。

ありものの仮想ネットワークがだめだったのかなあ……色々ゴミがあるしなあ……と、仮想ネットワークを作成しなおしてみたのですが、またもや失敗。ドキュメントをじっくり見て「パブリックIPはBastionと同じリージョンにないとだめだよ」とか、色々ちゃんと守ったのですが失敗。仲間がいるかと「Bastion failed」とかで検索したのですが、誰一人困っていません。孤独感。
もうだめだ。今日のEVEN(ing) Azureチャレンジは作者急病につき休載だ。もしくは、ここまでのだめな記録を載せるしか……。と観念しかけた時に閃きました。

リージョンが東日本なのが怪しくない?

Bastion、ドキュメント上は対象のリージョンとして東日本がきっちり記載されていますし、ここも一つの注目ポイントでした。しかし相手はなんたってプレビューです。こちらから歩み寄らないと。
ということで、米国西部のリージョンで仮想ネットワークから作成しなおしです。
結果、あっさり成功!!!5分ほどでプロビジョニングが完了しました!!!!やったあ!!!!!

ではではリモートデスクトップ接続してみましょう。先ほどの専用ポータルから、アクセスしたい仮想マシンを選択して[接続]をクリックします。普段は[RDP]と[SSH]しかないのですが、ここに[BASTION]の文字が!仮想マシンを作成する時に設定したユーザーとパスワードを入力すると……。

ブラウザの別のウィンドウでリモートデスクトップがつながりました!!!かんどうー!

この仮想マシン、グローバルIPは持たせていません。つまり、Bastion経由でないとリモートデスクトップ接続できないわけです。セキュアー!これまでは仮想マシンにリモートデスクトップ接続をするにはグローバルIPを持たせるか、それが嫌な場合は別のセグメントに踏み台のサーバを作って、そこからしかアクセスできないようにするといった方法しかありませんでした。これが、Azure Bastionによって、踏み台的な構成がとても簡単にできるわけですね。
今はBastionと仮想マシンが同じ仮想ネットワーク上にいる環境で試しましたが、VNETピアリングで繋いだ他の仮想ネットワークの仮想マシンも使えるかとか、仮想マシンに渋めのネットワークセキュリティグループを設定してみた場合とか、色々試してみたいです。

というわけでBastionを試してみるのは、途中でちょっとつまずきましたが大成功でした!

まとめ

  • 東日本リージョンだと失敗するかも。米国西部とかで試してみよう。
  • Register-AzureRmProviderFeatureの反映には15分くらいかかるよ。気長に待とう。
  • 専用のサブネットを作ってあげよう。名前はAzureBastionSubnetで、/27以上で、ネットワークセキュリティグループやルートテーブルを設定してはだめだよ。
  • 静的かつBastionと同じリージョンのグローバルIPが必要だよ。Bastion作成画面から新規作成すると間違いないよ。

次回!

拒否されたネットワーク! RDPの絆なおします!