
Azure版Cloud9(Azure ML × VS Code Web)を閉域化しようとして、結局マネージドVNetに落ち着いた話Attempting to Privatize Azure Cloud9 with Azure ML and VS Code Web, Then Settling on a Managed VNet
匿名の公開いいねです。記事の保存・お気に入りではなく、Featured、Top 3、重要度、掲載順位には影響しません。仕組みとプライバシーAnonymous public likes are reactions, not saved articles or bookmarks. They do not affect Featured, Top 3, importance, or listing order.How it works and privacy
- Azure ML コンピューティング インスタンスをマネージド VNet とパブリック IP なしで運用する構成を採用しました。
- 完全閉域化では踏み台経由が必要になるため、ブラウザ IDE の手軽さを保ちたい利用者に有用です。
- Azure ML compute instances were moved to a managed VNet configuration without public IP addresses.
- Fully private access required a jump host, so this approach preserves a browser IDE workflow for users seeking simpler secure access.
本ページの本文と要約は AI による自動生成です。日本語版と英語版は言語ごとに独立して生成されるため、表現や詳しさが異なる場合があります。正確性は元記事 (qiita.com) をご確認ください。The body and summaries are AI-generated independently for each language, so wording and detail may differ. Verify accuracy at the original source (qiita.com).
要約と収集メタデータに基づく AI 解説。元記事全文の転載・翻訳ではありません。AI explainer based on the summaries and collected metadata, not a copy or translation of the full source article.
Azure MLのコンピューティング インスタンスとVS Code for the Webで構築したブラウザIDEについて、ネットワーク構成が見直された。完全な閉域構成では操作手順が大きく変わるため、最終的にマネージドVNetとパブリックIPなしの構成が採用された。
完全な閉域構成
当初は外部からの経路をなくす構成が試されたが、求めていた3つの条件を同時に満たすことはできなかった。ローカルPCのブラウザでStudioを開くとワークスペースを読み込めず、IDEを利用するには「Azureポータル→Bastion→踏み台VM→その中のブラウザでStudio」という手順が必要になった。コンソールからボタンを押して開くCloud9のような使い方とは大きく異なる。
403と外向き通信
VNetの外にあるCloud Shellから、コンピューティング インスタンスのエンドポイントへトークン付きでアクセスしても403となった。ストレージへの接続も、アカウントキーを使用した場合を含めて拒否された。一方、インスタンス側からはNAT Gatewayを経由し、pip、apt、GitHubへ接続できた。
ブラウザの接続先
StudioとVS Code(Web)の画面はAzure内ではなく、利用者の手元のブラウザで動く。ボタンを押すと、そのブラウザがAzure MLの入口へ直接接続する仕組みである。このため、「手元のブラウザでボタンを押すだけ」という操作と、「外からの経路をゼロにする」ことは両立できないと説明されている。
マネージドVNet
そこで使い方を優先し、少なくともインスタンスにはパブリックIPを付けない方針へ切り替えた。自前で用意したVNet、NAT Gateway、踏み台、Bastionはすべて削除し、Azure MLのマネージド仮想ネットワークを利用する構成に落ち着いている。
Azure ML and VS Code Web
The browser IDE combines an Azure ML compute instance with VS Code for the Web to provide an AWS Cloud9-like environment that can be opened from the console. Revisiting its network design exposed a trade-off between preserving that simple browser workflow and eliminating every external access path.
Fully Private Access
A fully private configuration was built first. However, opening Studio from a local PC browser no longer allowed the workspace to load. Accessing the instance endpoint with a token from Cloud Shell outside the VNet returned a 403 response, while storage access was rejected even when an account key was used.
The compute instance could still make outbound connections through a NAT Gateway. This allowed access to pip, apt, and GitHub from the instance, but it did not restore the original way of opening and using the IDE.
Bastion and Jump Host
Using the IDE in the fully private configuration required moving through “Azure portal → Bastion → jump host VM” and then opening Studio in a browser running on that VM. This was far removed from the intended button-driven experience and changed the Cloud9-like character of the setup.
The reason is that both Studio and VS Code for the Web run in the user’s browser rather than inside Azure. When the user presses the button, the local browser connects directly to the Azure ML entry point. As a result, the design could not simultaneously retain one-click access from the local browser and reduce external routes to zero.
Managed VNet Without Public IP
The final configuration prioritized the existing usage pattern while addressing the main concern: a public IP attached to the compute instance. The self-managed VNet, NAT Gateway, jump host, and Bastion were removed.
Instead, the Azure ML compute instance was moved to a managed virtual network configuration without a public IP address. This avoids the jump-host-based workflow required by the fully private design while preserving the simpler browser IDE experience.
ポコとTECHガイドPoko & TECH Guide
ポコと当サイトのTECHガイドが、記事の要約と収集した情報から読みどころを語るAI生成の対話です。Poko and TECH Dashboard's own TECH Guide discuss the article's highlights in an AI-generated conversation based on its summary and collected source details.
- ポコPoko完全に閉じる案じゃなくて、どうして「マネージドVNet+パブリックIPなし」にしたの?Why did they choose a managed VNet with no public IP instead of making everything fully private?
- TECHガイドTECH Guide完全閉域だと、Bastionと踏み台VMを経由する必要がありました。ブラウザIDEの手軽さを優先して、今の構成に落ち着いたんです。Fully private access required Bastion and a jump-host VM. They chose the current setup to preserve the convenience of a browser IDE.
- ポコPokoじゃあ、インスタンスの公開は避けたいけど、ブラウザからすぐIDEを使いたい人に役立つのかな?So is this useful for people who want quick browser IDE access without giving the instance a public IP?
- TECHガイドTECH Guideそういう利用者に合う構成です。Azure MLが管理するVNetを使い、インスタンスにはパブリックIPを付けずに手軽さを残しています。Yes, that’s the intended fit. Azure ML manages the VNet, while the instance has no public IP and the browser workflow stays convenient.
- ポコPoko外からの経路を全部なくすのではなく、使いやすさとパブリックIPなしを両立したんだね。Got it—they didn’t remove every outside route, but balanced convenience with keeping the instance off a public IP.
- TECHガイドTECH Guideただし、手元のブラウザはAzure MLの入口へ直接つながります。「ボタンだけ」と外部経路ゼロは同時に満たせない、という注意点があります。One caveat: the local browser still connects directly to the Azure ML entry point. One-click access and eliminating every external route couldn’t both be achieved.





