normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Azure Bastion の shareable links 機能を使って Azure Portal にアクセス権のない人間でも VM 上での作業を可能にする

本記事のタイトルで伝えたいことが完了している気がしないこともないですが、つい先日にまたしても社畜心を捉えて離さないナイス機能が発表されました。そう、Azure Bastion の shareable links 機能です。
azure.microsoft.com
そもそも Azure Bastion をご存じない方の為にざっと解説すると、Azure Bastion は自身の仮想マシンへのアクセスを閉域的に行うことができるサービスであり、エンドポイントをインターネットに公開したり、踏み台の設定等を行うことが不要となります。
これ自体は非常に有用な機能なのですが、Azure Bastion の利用を踏まえたうえでも良く頂いた質問があります。それは「特定の仮想マシンの操作以外は何もさせたくないし、できれば Azure ポータルにもアクセスさせたくないけど、どういった権限を与えたらいい?」です。
石橋を叩いて壊す社畜黒帯な方々と相対したことのある皆様なら「にゃんこ大戦争のねこラーメン道」位の勢いで首を縦に振ってくれることでしょう(にゃんこ大戦争知らない人すいません)。上記の要望を実現する場合、RBAC を活用しても Built-in Role では制限が難しいケースもあり、要望達成がやや難しいという難がありました。

ここで今回紹介する Azure Bastion の shareable links 機能を使うことさえできれば上記の要望が実現可能です。Azure Bastion が生成するリンクだけを共有し、リンクから当該 VM にアクセスが可能となります。この際、リンクを利用するユーザは仮想マシンの捜査権限どころか Azure Portal にログインする権限すら必要ありません。そんな素敵な Azure Bastion の shareable links 機能ですが、現時点での注意点としては以下だと思っています。

  • Azure Bastion の shareable links は現時点でプレビュー - 2022年11月時点
  • Standard SKU でないと利用できない
  • 同じサブスクリプション&同じリージョンの場合は VNET Peering が可能
  • 別リージョン、別サブスクリプションの VNET Peering だとダメ

プレビュー機能なこと自体は元記事を見ればご理解頂けると思いますが、VNET Peering 越しがダメなのはちょっと苦しい条件です。なぜなら一般的な社畜エンプラアーキテクチャでは Hub-Spoke 構成にすることが多く、Hub VNET 側に Azure Bastion を配置し、Hub/Spoke の仮想マシンにアクセスすることが多いからです。この点については Azure Bastion の追加配置を含む検討が必要になるところでしょう。
同じサブスクリプション&同じリージョンの場合のみ VNET Peering は OK のようです。誤読しておりました(汗

どうやって利用するの?

これ自体は非常に簡単です。Azure Bastion を Standard SKU で作成するか、Azure Bastion 既存の Basic SKU を Standard SKU に変更して以下の様に Shareable Link メニューにチェックして設定を保存してください。設定反映には10分程度の時間がかかりますが、以下のスクリーンショットで表示されている左のメニューの Shareable Links は設定有効前は表示されませんが、設定完了後も自動では追加反映されなかったので、10分程度たったら F5 等でブラウザを更新して設定完了を確認下さい。

Shareable Links は SKU を Standard に変更しないと有効化することができません。また、一度 Standard SKU に変更した Azure Bastion は Basic SKU に戻せない点もご注意ください。

Shareable Links を有効化後、左メニューから Shareable Links を選択して以下の様にリンクを作成したい仮想マシンを選択してください。この際、最初に注記で示した通り「当該 Azure Bastion の同一サブスクリプション&同一仮想ネットワーク」の仮想マシンしか選択できない点に注意ください。

仮想マシンの選択後は以下の様にクリップボードにコピー可能な URL が生成されます。

具体例があった方がわかりやすいと思うので、私が作成した Shareable Link を記載すると https://bst-"何かのUUID".bastion.azure.com/api/shareable-url/"何かのUUID" な感じです。使いまわしが可能な点に加え、特定のユーザや権限を示唆するものが何もないという点に注意が必要です。

Windows マシンに接続してみる

まずは Windows 側の Shareable Link をブラウザに入力してみましょう。以下の様が画面がブラウザ上に表示されます。

こちらに対し、ユーザ名とパスワードを入力すれば通常通りログイン可能です。ブラウザ経由となりますが、GUI 操作も可能で元気な Windows 操作が可能です。

Linux マシンに接続してみる

次は Linux マシンへの接続を試してみましょう。「SSH Private Key とかどうするのかなー?」とちょっと心配だったのですが、ブラウザから認証方式を選ぶことが可能なので、こちらから選択&Private Key のアップロードが可能です。

Windows 側と同様に必要な情報を入力すればログイン可能です。


以上で Azure Bastion の shareable links の簡単な解説は終了です。我らエンプラ業を営む生き物が関わる生き物は国境を跨いでも開発者側に制限を加えるのが大好きです(特に公共・金融系が顕著なのも各国変わらず)。銀河英雄伝説でヤン提督が「何にしても、わが同盟政府には、両手をしばっておいて戦いを強いる癖がおありだから、困ったものですよ」と言っていたのが脳裏をよぎりますが、準拠する必要のあるコンプライアンス等を加味しつつ、こうした技を使って是非快適な社畜ライフをエンジョイ下さい。