【Azure】Bastionを利用してプライベートIPを介したセキュアなVM接続を実現する【基本無料】

こんにちは、サイオステクノロジーの佐藤 陽です。
今回はAzureのネットワーク周りの話です。

Azure Bastionを利用して、プライベートIPを介したセキュアなVM接続を実現する方法をご紹介します。

はじめに

この記事に至った背景ですが、こちらをご参照ください。

【Azure】閉域化されたリソースに対して自分のPCからアクセスする方法を紹介

こちらの記事で、「閉域化されたリソースに対して自PCからVMを経由してアクセスする方法」をご紹介しました。
しかし、経由するためのVMがPublicIPを持っているためどこからでもアクセスできてしまい、セキュリティ面での不安が残ります。

そこで今回はこの不安を解消するため、プライベートIPを経由して接続できるAzure Bastionのご紹介をしたいと思います。

Azure Bastionとは

Azure Bastionとは、Azureが提供するフルマネージドなPaaSであり、プライベートIPを介してVMに接続することを可能とするためのサービスです。
また後述しますが、このAzure Bastionに対する認証/認可としてはRBACの仕組みを利用することが可能です。

そのため結果として、RBACで設定されたユーザーのみが、Bastionを経由してVMにアクセスることが出来るようになります。

価格

Bastionを利用する際の価格に関しては、SKUや利用料に依存します。
以前はBasic以上のSKUしか存在しなく、最低金額でも月額2万円近い金額を支払う必要がありました。

ただ、前回の記事の中で取り上げた

  • KeyVaultのシークレット情報書き換えたい
  • CosmosDBの中身をデータエクスプローラーで見たい

といったライトなユースケースだけであれば、それに対して月2万払うのは少しためらってしまいます。

しかし、最近 Developer SKUという新たな価格帯が登場しました!!
基本料金はなんと無料!

上記したような、ちょっとしたユースケースであれば無料で使うことができます。
まさに今回のようなユースケースに適したSKUです。

Basic以上のプラン比べて色々機能の制限はありますが、非常にライトに使えるようになっているため使い勝手は良いです。
今回影響する制限事項に関しては、以下のような点があります。

  • リージョン
  • 接続できるVMの種別
  • Bastionへの接続方法

影響範囲に関しては、この後の記事の中でも言及していきます。

使ってみる

では実際に、Bastionを使ってプライベートIPを介したVMの接続を試み、そこから閉域化されたKeyVaultにアクセスしてみたいと思います。

リソース作成

まずはリソースの事前準備です。

KeyVault

今回も検証用にKeyVaultを使っていきます。
前回の記事と同様になるため省略しますが、Azure KeyVaultを作成し RBACの設定やサンプルのシークレットを追加しておいてもらえるとよいかと思います。

Bastion&VNet

次に、早速Bastionを作っていきます。 Azure PortalからBastionのリソースを選択し、作成していきます。

ここでDeveloper SKUの制限1つ目、リージョンです。 Developer SKUでは現在以下のリージョンのみに対応しており、日本のリージョンに対応していません。

  • 米国中部 EUAP
  • 米国東部 2 EUAP
  • 米国中西部
  • 米国中北部
  • 米国西部
  • 北ヨーロッパ

そのため今回は米国西部(WestUS)にて作成することにします。

そして、インスタンスのレベルとしては、Developerを選択します。

次に、仮想ネットワークです。
これはAzure Bastionが接続する先の仮想ネットワークであり、VMが含まれるネットワークを指します。

前回の記事で作ったものを使い回すそうかと思ったのですが
今回BastionではWestUSのリージョンにデプロイしており、仮想ネットワークも同リージョンで作成する必要があるため、このタイミングでVNetを作り直します。

これでBastionの作成はOKです。

VM

ではVMも作成していきます。 前回の記事とほぼ同じ流れですが、気を付ける点が3点あります。

  1. 上記で作成したWestUSのVNetに対してデプロイすること
  2. PublicIPをなしにすること
  3. RDPポート(3389)を開けておくこと

なお、制限事項の2つ目としてBastionの接続先のVMに対する制限があり、以下の通りとなっています。

接続方法 判定
RDPを利用したWindowsVMへの接続
SSHを利用したLinuxVMへの接続
RDPを利用したLinuxVMへの接続 ×
SSHを利用したWindowsVMへの接続 ×

今回はRDPを利用してWindowsVMへの接続を行おうとしていたので、影響はありません。
また下2つのケースは、そもそもそんなに発生しないなとも思いますが、利用するBasic以上のプランをご検討ください。

ということで、今回はこのまま作成していきます。

作成完了後、RDP接続しようとしても接続できないことが確認できます。
(PublicIPが存在していないため)

これで必要なリソースは作成完了です。 これまでの流れをやっていただくと、以下7リソースが出来上がっているかと思います。

  • Bastion
  • VNet
  • VM
  • Network Interface
  • Network Security Group
  • Disc
  • KeyVault

権限付与

では、BastionからVMにアクセスするための権限割り当てを行います。

権限として必要なものは以下2つです。

  • 仮想マシンに対する閲覧者ロール。
  • 仮想マシンのプライベート IP を使用する NIC に対する閲覧者ロール。

対象のリソースとしては以下のものです。

なお、ここで割り当てるのはBastionのManagedIDではなくて、アクセスするユーザー(EntraID)のServicePrincipalとなります。
つまり、あくまでBastionは接続するためのツールであって、アクセスするのはAzureテナントにログインしているユーザーであることが、この点から分かります。

サービスエンドポイント設定

既にやっているよ、っていう方は読み飛ばしてもらってOKです。

先程VNetなどを作り直したので、KeyVaultに対するサービスエンドポイントの設定なども忘れず行っておきましょう。

接続

ここまでできれば準備ばっちりです。
あとはBastionを使って接続していきますが、ここで制限事項の3つ目です。

Basic以上のプランだとAzure CLIからなども接続できるようなのですが、DeveloperSKUだとAzure Portal上からの接続のみとなります。
とはいいつつ、今回の要件程度であれば大きな問題ではありません。

Azure PortalからVMを選択し、Bastionのブレードを選択します。

すると、デプロイしているBastionが選択されて居ることが確認できます。
ここでVMに対する認証情報を追加し、「接続」のボタンを押します。

そうすると、ブラウザ上でいつも通りのVMへの接続が始まり、操作が可能となることが分かります。

そして、前回同様VM内のブラウザからAzurePortalを開き、KeyVaultに接続を試みます。
格納しているシークレット情報が確認できました。
(もちろん自分のPCから直接閲覧した場合は見えないかと思います。)

これで、プライベートIPを介してVMに接続し、そこからサービスエンドポイント経由で閉域化されたリソースに対してアクセスできることが確認できました!

まとめ

今回は、Azure Bastionを利用して、プライベートIPを介したVM接続を試してみました。

前回の記事ではパブリックIPを持った状態であったため、セキュリティに不安が残りましたが、今回のようなケースであればセキュリティも強固になったといえるかと思います。
また、DeveloperSKUを採用することでコストも抑えられますし、アクセス管理に関してもRBACで行えるため非常にスマートですね。

是非閉域化されたリソースに対して管理・運用する場合はBastionの採用を検討してみてください。
ではまた!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です