Bastionについて調査

2023年9月3日

仮想マシンに安全に接続するためのサービスがBastionです。

Azure Bastion は仮想ネットワークごとにデプロイされます。

ということなので、VNET毎に用意する必要があります。

よく使うのですが、具体的な料金とか機能とかについて調査してみました。

実験費用見積もり

色々実験するにあたって、事前に料金の見積もりをしておこうと思います。
10時間くらい実験するとしたら、¥466.76とのことでした。多分10時間もぶっ続けて色々やらないと思うから200円くらいで実験できるかな・・。リソース作成とかをTerraformとかでやれば途中休憩の時に消せるし、そうしよう。

https://azure.com/e/656728db9c004bd59ac77b6499f32884

Bastionの料金

Bastionの料金については以下のリンクで確認します。

https://azure.microsoft.com/ja-jp/pricing/details/azure-bastion/

時間とデータ転送量で料金が決まる。BastionにはIPアドレスも必要になるから、それも別途料金として考えておかないといけない。

データ転送量はディスクのマウントとかで節約できそう。

時間課金は、1時間単位で課金される。しかもVMみたいにスリープ機能がないのでキツイ。

Azure Bastionは、送信データの使用状況に関係なく、リソースがデプロイされてからリソースが削除されるまで1時間ごとに課金されます。

あとインスタンスという概念がよくわからない。
Standardだと追加のインスタンスで料金がかかると書いている。
Basicはどうなんだろう。

例えば、3人で同じVMに接続した場合は三つのインスタンスが消費されると考えればいいのだろうか。多分そうだろう。そうなると、一度増えたインスタンスはどのタイミングで消えるのか。接続解除と同時に消えるのだろうか。

上記気になったので、調べたところ以下のドキュメントに行き着いた。

https://learn.microsoft.com/ja-jp/azure/bastion/configuration-settings#instance

3人同時に接続したからといって三つのインスタンスとなるわけではないようだ。処理の内容によって必要となるインスタンスは変わると書いてあるので、実際のところ幾つになるかはよくわからない。

思いついた節約ハック

VMのようにインスタンスを停止することができないので、基本的には作ったら月額費用として考えないといけない気がする。この時、最低どれくらいのお金がかかるかというと、以下の通りです。

ベーシックだと2万円くらい。スタンダードだと4万円くらい。

高すぎ。。。

VMのように停止ボタンがないのが辛いが、リソース削除してしまえばお金はかかってこない。

ということで、使うときだけBastionを用意すればいいのではないだろうかという考えが浮かんでくる。
例えば、VMへの接続自体がまれで、調査とかのときだけ使うケースとかで以下の方法は威力を発揮する気がする。

やり方としては単純で、TerraformとかazコマンドなりでIoc化しておき、使うときだけリソースを立てるという方法です。

このとき、ポイントとしてはリソースグループをrg-temp-bastionみたいな感じで分けておいて、作って消してをやりやすくしておくのがいいのではと思ってます。

Terraformだとリソースとの差分見て必要であればリソースをデプロイしてくれるのでこれはいけるのでは?と思いつきました。リソース削除は、毎度使い終わったらPortalからリソースグループごと削除するか、azコマンドを用意しておいてそれを実行させるか。

手動実行がリスキーだなと思うのであれば、PipelineとかGithub Actionsとか経由で回すようにしたりすればいいのではないでしょうか。

IPアドレスについて

パブリックIPアドレスが必要で、しかもSKUはStandardで静的な割り当てが必要となる。

https://learn.microsoft.com/ja-jp/azure/bastion/configuration-settings#public-ip

SKUについて

BasicとStandardがある。アップグレードはできるけど、ダウングレードはできない。
ダウングレードは一度Bastionを削除してから再構築しないといけない。

ファイルのアップロードとダウンロード

これは転送量に関係してくるので慎重にしないといけない。
冒頭でも記述しましたが、ディスクをマウントすることで転送料金が節約できるはず。
今回は実験でそこまで確かめないのでさらっと理解するくらい。

https://learn.microsoft.com/ja-jp/azure/bastion/vm-about#upload-download

Bastionでの接続について

いつも使うのはportalから接続する方法で、以下のような画面。
VMの中に接続でBastionを選択する。

接続にはいくつかの方法があります。

https://learn.microsoft.com/ja-jp/azure/bastion/bastion-connect-vm-ssh-linux#password-authentication

一番オーソドックス?で簡単なのはIDとパスワードですね。

4つほど候補があるようです。

ただ、セキュアという観点で見たときに、一番いいのはAzure Key Vault に格納されている秘密キーを使用して認証する方法だと思います。

https://learn.microsoft.com/ja-jp/azure/bastion/bastion-connect-vm-ssh-linux#ssh-private-key-authentication—azure-key-vault

ただ、ここにはその設定どうすればいいのか書いてない。
探してみたところ、これがそうか?

https://learn.microsoft.com/ja-jp/azure/virtual-machines/linux/create-ssh-keys-detailed#provide-ssh-public-key-when-deploying-a-vm

秘密キーの諸々の作り方についてはこちら

https://learn.microsoft.com/ja-jp/azure/virtual-machines/linux/mac-create-ssh-keys

あと、より詳しい内容がこちらでも解説されている。

https://learn.microsoft.com/ja-jp/azure/virtual-machines/linux/create-ssh-keys-detailed

気になったので実際に実験してみました。

今後やっていきたいこと

他にも色々な接続方法があるみたいで、今後それを試していきたい。
特にLinux ネイティブ クライアントを使用して仮想マシンに接続する方法が気になる。これはTodoとして残しておこう。これをやるためにはBastionをStandardで建てる必要がある。

https://learn.microsoft.com/ja-jp/azure/bastion/connect-vm-native-client-linux

Azure

Posted by takumioda