Azure Bastion 共有可能リンク

Azure Bastion の Standard SKU にて共有可能リンクが~~パブリックプレビュー~~ GA (2023/5/11) となりました。

https://learn.microsoft.com/en-us/azure/bastion/shareable-link

実際に動作を検証し、利用できそうなシナリオ、利用方法や利用にあたる推奨事項などをまとめております。

## 利用シナリオ

以下のようなシナリオでは利用する機会があると思います。
- Azure ポータルをユーザーに触らせたくない
    - デモ用途などでユーザーには VM にのみログインさせたい
    - RBAC の管理を細かくしておらずポータル経由で様々な環境を触れてしまう 等
- Azure AD ユーザーがない
- OS のユーザー/パスワードのみで認証を行いたい

## 制限事項

- ネイティブクライアントでは動作しません。
- Web ベースでの接続となるためファイルのアップロード、ダウンロード機能もありません。
- Azure ポータル非経由 (Azure AD の認証) はないため、RBAC でのアクセス権の設定もありません。共有リンクと OS のユーザー/パスワードを知る人が Azure VM へアクセスできる仕組みです。
- これまでの Bastion 同様 Web ベースでのアクセスのため、Azure AD 認証での VM へのログインはサポートされてません。
- KeyVault 連携をしてパスワード、SSH キーを使用することはできません。
- テナントをまたいだ VNet ピアリングはサポートされていません。
- リージョンをまたいだ VNet ピアリングはサポートされていません。

## 構成図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/765933ed-0194-9743-63e1-c0b8a8836134.png)


## 前提

- Azure VM をデプロイ済みで利用可能な状態であること。
- Bastion をデプロイ済みで、Standard SKU となっていること。

## 設定方法

1. Bastion の "構成" にて Standard SKU となっていることを確認します。
Basic である場合、Standard SKU にアップグレードします。(※ダウングレードは再作成が必要です。)
2. "共有可能なリンク" にチェックを入れて、"適用" を押します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/c5b079f4-1bf2-bd4e-c2c6-fecf125597cb.png)
3. "共有可能リンク" > "追加" を押し、対象の VM を選んで、"適用" を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/6acded4c-731f-3713-3224-fa62f04dae66.png)
4. 共有可能リンクが作成されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/e6e38a84-b853-c302-dc22-f523da132f8c.png)

## 動作確認 
1. 共有可能リンクをブラウザで開き、Azure Bastion の画面が表示されることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/6bd5ded9-deb2-ff46-560a-51bd54f20b0a.png)
2. OS ログイン用のユーザー、パスワードを入力して、通常の Bastion 同様ブラウザベースでアクセスできることができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/30a25e4a-ab8a-5c7b-34fc-6efafe114df1.png)

Azure Portal を利用していないので当然ではありますが、KeyVault の連携機能も提供されておりませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/dd68d11b-2aee-a044-a81b-81af737df2a7.png)


### 診断ログ

共有リンクでのアクセスも診断ログに記録されておりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/9fc3f16f-bbd8-5414-9a0a-d28af2a5ce5d.png)

## 共有可能リンク削除時の挙動

共有可能リンクを削除した場合でも、削除対象の共有可能リンクを使ってログイン済みのユーザーはそのまま利用可能でした。
もし、利用中のユーザーを強制的に切断したい場合は以下の様に "セッション" > "削除" を実施すると強制的に切断することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/1d5705f1-704b-c046-546a-6af8c0a2489e.png)

セッション削除後の画面。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/3fe18f8f-baf0-350a-d4be-ee27c4856bb0.png)


## セキュアな使い方

共有リンクは一文字でも文字列が違えば以下の様に無効なアクセスとして扱われます。
ただし、URL を知っている人は誰でもログイン画面に到達可能ですので、セキュリティリスクを考えると長期間同じ URL を利用するのは望ましくはありません。現状、利用時間を制限する機能もないため、定期的に再作成する等の運用が望ましいです。再作成すると URL 内の文字列が変更されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/2b14ff97-0f77-4886-f99a-e02a7eddc071.png)

また、Bastion ホストへのアクセスは NSG にてアクセス元の IP アドレスを制限をかけることができますので、制限できる環境では NSG にてアクセス制御を行うことが望ましいです。(設定例は[こちら](https://jpaztech.github.io/blog/network/bastion-nsg/) )

NSG で送信元が制限されている場合、許可された IP アドレス以外から Bastion にアクセスすると以下の様にエラーになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2266293/bb65ec0a-8c29-73f4-66cf-1fabcc094513.png)