ほりひログ

所属組織の製品 (Azure とか) に関連する内容が多めだけど、個人の見解であって、所属組織を代表する公式情報ではないです。

App Service on Linux で、エセ Bastion を構築する

はじめに

ちょっと前回の投稿から期間が開いたので、「試してみた」でお茶を濁します。

# あくまで「試したらできた」という内容なので、今後、突然動かなくなることもあると思うので、お気を付けください。

本題

Bastion (踏み台サーバー) を使った SSH ログインでは、パブリック IP と VNET に接続するプライベート IP の両方を持った VM を一時的に起動し、一度その踏み台サーバーに SSH ログインした後、その踏み台サーバー内のセッションから再度、ターゲットの VMSSH しますよね。

この踏み台サーバーと同じことを App Service on Linux でやってみました。

イメージ図。 f:id:horihiro:20200412145030p:plain

今回、踏み台サーバーの要件は、

  • 外部から SSH アクセスができる
  • VNET 内のターゲット VMSSH ログインできる

が出来ればよし、とします。

外部からの SSH アクセスは、App Service on Linux には Web SSH 機能があります。普通にできます。
VNET 内の VM へのアクセスについても、VNET 統合を使えば可能です。

Web SSH

Web SSH は、App Service on Linux で動かすコンテナー内の sshd へ、Web インターフェースからアクセスできる機能です。

docs.microsoft.com

App Service on Linux であればどの言語ランタイムでも、Web App for Containers でもコンテナー イメージ内の sshd を入れておけば、 ↓ の URL からアクセスができます。

https://<リソース名>.scm.azurewebsites.net/webssh/host

f:id:horihiro:20200412155434p:plain

画像は Node LTS のイメージの場合です。

App Service の VNET 統合

VNET 統合は、App Service を選択した VNET に接続する機能です。

docs.microsoft.com

注意が必要なのは、VNET 統合を使用して VNET 経由の通信が使えるのは、App Service からの通信のみです。

また、比較的新しめな リージョン VNET 統合は、下記のような要件があるので注意が必要です。

  1. 同じリージョンに VNET と App Service がある
  2. App Service 専用のサブネットが必要
  3. App Service プランが Standard 以上
  4. App Service プランが Premium V2 (PxV2 プラン) へスケール アップ可能

特に 3. と 4. はわかりづらいですが、App Service プランが Premium V2 へのスケール アップは可能である必要がありますが、Premium V2 である必要はありません。

下のスクリーンショットように、PxV2 が選択可能であれば問題ありません。 f:id:horihiro:20200412161122p:plain

たまに、下のスクリーンショットように、PxV2 がグレーアウトしている App Service プランがあります。

f:id:horihiro:20200412161204p:plain

古い App Service プランによくありますが、この場合、リージョン VNET 統合には対応していません。
別のリソース グループを新規に作成してデプロイしなおす必要があります。

ちなみに、App Service on Linux のリージョン VNET 統合は、絶賛パブリック プレビュー中です。

組み合わせてみる

VNET 統合した App Service on Linux の Web SSH を開いた後、ssh コマンドで、VNET 内にある VM (Ubuntu) のプライベート IP に対してログインできます。

f:id:horihiro:20200412165743p:plain

なお、Java をランタイムとして選択した場合、Web SSH はできますが、その中に ssh コマンドが入っていないので、今回の使い方はできません。

使い終わったら、Free にスケール ダウン & サイトを停止しておくとよいでしょう。

最後に

Azure で提供されているサービスの中には、「Azure Bastion」というフル マネージドの踏み台サービスがあります。

azure.microsoft.com

コチラを使えば、SSH だけでなく Windows VM に対するリモート デスクトップ接続もできます。

サポート等を考えても、本来はこちらを使うべきでしょうね。