🔖

Azure ブート診断・シリアルコンソール用ストレージアカウントのネットワーク制限

2022/09/20に公開

はじめに

AzureのVirtual Machineを利用する上で、トラブルシューティング時に欠かせない機能「ブート診断」と「シリアルコンソール」があります。

  • ブート診断
    VMの起動時の画面(スクリーンショット)を保存・表示して、「正常に起動しているか否か」を判断するのに役立つ機能。クラウドサービスだと、VMのコンソール画面を直接見ることが出来ないので、「VMに接続接続できない」というトラブルは「VMが立ち上がらない」のか「ネットワーク的に接続できない」なのかを切り分けするのが大事で、ブート診断ログはその第一歩目の手助けになります。

  • シリアルコンソール
    ネットワークと関係なしにVMにシリアルポート接続し、コマンドラインで操作ができる機能です。「VMは立ち上がっている」「オンプレやAzureのネットワーク設定は正しい」にも関わらず接続できないときに、ゲストOSにログインしてファイアウォールの設定を確認したり、必要なサービスがちゃんと起動しているのか?をチェックしたりすることができます。

さて、これらの機能を使うには、Azure VMの「ブート診断」用ストレージアカウントを設定するのですが(+場合によってはゲストOS側のシリアルコンソール設定を有効化する)、このストレージアカウント。ずばり設定に癖がありました。2022/8頃に、それを一部解消できるUpdateがあったようですので、今日はそれを確認します。

ブート診断用ストレージアカウントの癖

クラウドのリソースには『セキュリティ的に「こういう設定はイマイチだから、特別用途が無ければ避けようね」』という設定値がしばしばありますが、これまでのブート診断・シリアルコンソール用のストレージアカウントはこの禁忌を2つも犯していました。

①接続元IPアドレス制限

これまでは、シリアルコンソールを使用するためには「パブリックネットワークアクセス」を「すべてのネットワークから有効」にしないといけない、とドキュメントに書かれていました。
通常、リソースに対する接続元IPアドレスは必要最小限にしておきたいものです。
もちろん、アクセス権の設定などもありますので、ネットワーク的に許可されている=データにアクセスできる、ではないのでこの設定だけで危険というわけではないですが、多重に守れるものをわざわざ空けておく必要はありません。
今回、2022/8頃のドキュメントアップデートで「接続元IPアドレスはこのIPアドレスを許可しておけば十分だよ」という情報が公開されました。
https://learn.microsoft.com/ja-jp/troubleshoot/azure/virtual-machines/serial-console-windows

②アクセスキーでのアクセス

ブート診断のログ(=スクリーンショット)を見るために、当該ストレージアカウントにアクセスキーでアクセスできるようにしておく必要があります。
ストレージアカウントの公式ドキュメントでも、Microsoft推奨は「アクセスキーでのアクセスではなく、AzureAD認証とRBACで制御すべし」となっていますので、アクセスキーでのアクセスというのはちょっと前時代的というか、あまりオススメできるものではありません…。
なお、こちらは現時点でも「癖」のまま残っており、残念ながら避けることは出来ないようです。

試してみた

これまでの設定

VM側の設定(ストレージアカウントの指定)

VMの「ブート診断」メニュー>「設定」から、ログの保存先ストレージアカウントを指定します。
マネージドなストレージアカウントを使うこともできますが、ここではカスタム(事前に自分で作成したモノ)を指定します。

ストレージアカウント側の設定

これまで通り、ネットワーク的にはユルユルの状態にします。

アクセスキーも許可状態です。

ブート診断画面

下記の通り、Windowsの起動画面(ログイン前)が見えており、これだけで無事構成できていることが分かります。

シリアルコンソール画面

こちらも、コマンドプロンプトでコマンドを実行できていることが分かります。

実験(パブリックネットワークアクセスの遮断)

まず、ネットワーク制限を縛りすぎるとどうなるのか見てみましょう。

ストレージアカウント側の設定縛り

下記の通り、「パブリックネットワークアクセス」を「無効」にしてみます。

ブート診断画面(NG)

このように、データが取得できないというエラーになりブート画面が参照できません。

シリアルコンソール画面(NG)

タイムアウトするような挙動となり、下記のエラーになります。

余談ですが「設定ミスってるとこういうエラーになりますよ」という情報はなかなか出回ってないですが、実は大事ですよね。世の中では、正しい設定をしたときの正しい挙動が解説されがちですが…。

正しいネットワーク制限

それでは、アップデートされたドキュメントに従い正しいネットワーク制限を行います。

ストレージアカウント側の設定縛り(正)

特定のIPアドレスだけを許可するようにファイアウォール設定を行います。
なおこの時追加しているIPアドレスは、東日本リージョンで必要となるものです。詳細は「はじめに」に記載したドキュメントをご参照ください。

ブート診断稼働確認

…なんと!先ほどと同じNG画面になってしまいました。実は一つ設定を忘れています。

ブート診断のログ(スクリーンショット)を見るのは、あくまでクライアント(Azureポータルに接続しているブラウザ)となります。よって、今自分が使っているグローバルIPアドレスを許可する必要があるわけです。
この設定を行うことで、無事にブート画面が見えるようになります。(証跡は省略)

シリアルコンソール稼働確認

こちらも、無事に利用できます。(証跡は省略)
ちなみにシリアルコンソール接続は、クライアントから直接接続にはならないようで、上の「ブート診断」向けに追加許可した設定は不要でした。

おわりに

ブート診断用・シリアルコンソール用のストレージアカウントの、ネットワーク制限について試してみました。
これだけでセキュアだと言えるわけではありませんが、クラウドの設定は多段で守るように設定していくモノですので、一つ一つ安全になるように設定することが大事です。
せっかくのアップデートですので、みなさんも取り入れてみて下さい。

Discussion