こんにちは、サイオステクノロジーの佐藤 陽です。
今回はAzureのネットワーク周りの話です。
Azure Bastionを利用して、プライベートIPを介したセキュアなVM接続を実現する方法をご紹介します。
はじめに
この記事に至った背景ですが、こちらをご参照ください。
こちらの記事で、「閉域化されたリソースに対して自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点あります。
- 上記で作成したWestUSのVNetに対してデプロイすること
- PublicIPを
なし
にすること - 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の採用を検討してみてください。
ではまた!