Azure Cloud Managed Service Security

Azure Bastion で踏み台を無くせるか?

Azure Bastion で踏み台を無くせるか? 2019-06-21Leave a comment

Azure Bastion がプレビューとして公開されたので、動かしてみました。
使ってみないとやっぱり新しいものはわからない。

Azure Bastion とは

ブラウザでAzure Portal から、仮想ネットワークのプライベートIPで仮想マシンに RDPやSSHでアクセスすることができます。仮想マシンにパブリックIPを設定する必要がありません。
ソフトウェアとしては、Apache Guacamole が近いでしょうか。

RDP and SSH directly in Azure portal: You can directly get to the RDP and SSH session directly in the Azure portal using a single click seamless experience.

Azure Bastion – RDP and SSH over SSL – now available for Preview

この記事で確認したこと

  • Bastion の概要を把握する(リージョン・料金)
  • Bastion の設定方法
  • Bastion の利用方法(windows: password /Linux: ssh-key)
  • Network Security Group による接続制限をしてみる
  • 制限事項の確認・今後、どうなっていてほしいかの整理

はじめる前に

ステータスと利用できるリージョン

  • ステータス: パブリックプレビュー
  • リージョン: 
    • West US / East US / South Central US / West Europe
    • West Europe / Australia East / Japan East

料金

評価構成

  • 同一仮想ネットワーク内に、bastion を設置するサブネット[AzureBastionSubnet] と ターゲット仮想マシンを配置するサブネットを作成する
  • 仮想マシンは、Windows Server 2019 / Ubuntu を配置( id/passのログインとkeyによるログインを試したいため)
  • ネットワークセキュリティグループで接続制限を構成

https://docs.microsoft.com/en-us/azure/bastion/bastion-nsg

実際に Bastion を構築する

プレビュー機能の導入

Bastion はプレビュー機能なので、利用できるように設定する必要がある。
以下のコマンドを実行する

az feature register --name AllowBastionHost --namespace Microsoft.Network
az provider register --namespace Microsoft.Network

Powershellの場合は、以下のリンクを参照
https://docs.microsoft.com/en-us/azure/bastion/bastion-create-host-portal#before-you-begin

Azure Portal にログイン

Bastionの専用 プレビュー ポータルにログインする必要があります。
http://aka.ms/BastionHost
ログインすると下記の通り、ヘッダーがオレンジ色になる。

AzureBation専用ポータル

ネットワークの構成

仮想ネットワークを作成するときに注意が必要です。
Bastion 用のサブネット名は固定で AzureBastionSubnet で、セグメントは/27以上である必要があります。
今回は、以下の通り構成
・仮想ネットワーク: vNet-Secure 10.0.0.0/16
・ターゲット仮想マシンの配置用サブネット: vm 10.0.1.0/24
・Bastion 配置用サブネット: AzureBastionSubnet 10.0.2.0/27

Bastion の構成

設定する項目は、リソースグループ、インスタンスの名前・リージョン、仮想ネットワーク、サブネット、パブリックIPアドレス

Bationの構成

実際に構成した後に出来上がるもの

仮想マシンスケールセットの仮想マシン2台。
実際にこちらのインスタンスに対してログインや操作は禁止されているため見えるのはここまで。

仮想マシンスケールセットの仮想マシン2台

ログイン先になるサーバの構成(Windows Server / Ubuntu )

  • 特に特別な設定は不要です
  • Windows Server 2019 と Ubuntu 18.04 LTS を、 VM 用サブネットに配置。グローバルIPは持たせない。Windows Server 2019 は管理者の ID/PASS を Ubuntu は SSH のキーを設定

Bastion 経由でサーバにログインする

共通で注意しておきたいこと

別ブラウザかタブで開くので、ブラウザのポップアップブロックに引っ掛かりました。動かないと思った時はポップアップブロックを疑ってください。

Windows Server に RDP で接続する

  • VM のリソースにアクセスする
  • メニューの、 Bastion を選択
  • Windows Server の Username と Password を入力してログイン
Windows ServerにRDPで接続する

ログインした状態。ブラウザでそのまま RDP 接続ができる。

Ubuntu へキーペアーで SSH アクセスする

  • VM のリソースにアクセスする
  • ブレードのメニューの、Bastion を選択する
  • ログインは、パスワード、 SSH Private Key を書く、 LocalFile の SSH Key ファイルを参照する(結局はブラウザ上に取り込まれます)
  • 注意:証明書のパスワードも入力できますが、シークレットになっていないため表示される。これはこんなものか。
ubuntu  Basion

ログインした状態。ブラウザで SSH 接続。

Network Security Group による接続制限

接続制限の設定方法

  • Bastion はポータル経由でログインしますが、グローバル IP を持つ
  • セキュリティを懸念される方は、Network Security Group でインバウンドで443のみに制限することができる

実際の設定

NSG と許可ルールの追加

Subnet との紐づけ

注意事項

どこでまだ何の通信が発生しているかは未確認なので、上記を実施するときはしっかり確認の上実施してください。どこまで絞れるのだろうか。
以下に情報があるがわかりにくい。
https://docs.microsoft.com/en-us/azure/bastion/bastion-nsg

現状の制限事項

  • どういう単位で構成することが必要なのか?
    • Vnet 単位での構成が必要
      • VNetPeering をした、同一リージョン、また、他リージョンの別の VNet にある VM に接続しようとしましたが、 Bastion の作成画面に遷移してできなかった
      • VNet ごとに設定する必要が現時点ではあります
      • VNet に複数の Bastion を作成することもできません
  • ログ
    • メトリックと診断設定は今はまだ設定できない
    • Bastion なので監査ログが欲しくなる
      • 誰が、いつ、どの VM へ、アクセスが成功、失敗
      • 各サーバで何をしたのかを記録する
        • 例えば、リモートデスクトップの画面の記録
        • 例えば、 SSH で接続したときのコンソールログ
  • 認証(できたらうれしいとふと思ったこと)
    • Azure Poral -> Azure AD -> Azure ADDS -> VM と考えると、 Bastion がきれいにつながったら、セキュアで接続が楽な環境を作れるんじゃないかと思いました。

まとめ

  • RDP と SSH ともに動きは快適でした
  • リージョンというか、 vNET ごとに構成する必要があるのは面倒
  • セキュリティの観点では、パブリック IP を持ちますが、 Azure Portal のログインが前提になっているため、Azure AD や Intune のセキュリティ機能がすべて利用できるし、 VPN や Express Route など通信経路を守るのとは別の解決が図られているのでちゃんと設定すれば安心して利用できる
    箱モノのセキュリティールームを無くしたいと思っているので偏っているかもしれませんが。
  • 踏み台サーバに、ツール入れてたりするよなと思いましたが、そういうことが必要だと2段組むことになるのかもしれません。
  • 踏み台は、もう少しでなくせる気がしてきた。これがあると cloudshell もなんかうまくつながってくれないかなと

参考リンク

コメントを残す

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

%d人のブロガーが「いいね」をつけました。