4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure Cloud Shell プライベート環境、エフェメラルセッション

Last updated at Posted at 2024-07-08

Azure Cloud shell はブラウザ経由で Bash または Powershell を実行する環境を提供するもので、Cloud Shell を利用することで手元のクライアント端末に Azure Powershell や Azure CLI のモジュールをインストールせずにコマンドを実行することができます。

また、ブラウザにログインしたユーザーで自動的に認証されるため、Azure の操作目的であれば PC からの利用より便利に使えることが多いです。Azure 以外の操作ではモジュールの追加が必要等で使えないことがあります。

以前はプライベート化されたリソースへのアクセスはサポートされていませんでしたが、仮想ネットワーク上のリソースへのアクセスもサポートされるようになりましたので、手順や留意点をまとめております。

構成図

以下のような構成で Cloud Shell から SSH で Azure Linux VM にログインできるかを試します。

image.png

留意点

  • ストレージと Azure Relay の料金がかかる (Cloud Shell 自体は無料)
  • VNet ピアリングや Private Endpoint を使用して接続する場合はデータ転送の料金がかかる
  • コンテナーサブネット、ストレージサブネットは予想される同時セッション数を考慮してサイジングする必要がある
  • セカンダリリージョンはサポートされていないため、プライマリリージョンを使う必要がある (日本の VNet にアクセスしたい場合は Vnet peering を使えばアクセス可能です)
    Central India
    East US
    North Europe
    South Central US
    Southeast Asia
    West Europe
    West US

Secondary storage regions are currently not supported in Cloud Shell VNET scenarios.

構築手順

以下を参照して構築してきます。テンプレートの中で RBAC の割り当てもあるため、所有者権限での実施が必要となります。仮想ネットワークの各サブネットは事前に作るとエラーとなるため、適当なサブネットを一つ作り、あとはテンプレートでデプロイしていきます

Cloud Shell 上のデータの永続化が不要である場合は以下の手順の実施は不要です。

4.ARM テンプレートを使用して仮想ネットワーク ストレージを作成する

ストレージなしでのアクセス (エフェメラルセッション)

Cloud Shell ではストレージアカウントを利用しない使い方 (エフェメラルセッション) ができるようになっています。Cloud Shell 上のデータの永続化はありません。

Azure Portal にログインし、Cloud Shell を起動します。
image.png

Bash (Azure CLI), PowerShell (Azure Powershell) を選びます。(このブログでは Bash を利用)
image.png

"ストレージアカウントは不要です" を選びます。
"サブスクリプション" は接続するリソースがあるサブスクリプションを選びます。
"既存のプライベート仮想ネットワークを使用する" を選びます。(チェックをしなければ通常の Cloudshell と同様、パブリックのエンドポイントを利用します)
image.png

"サブスクリプション"、"リソースグループ"、"仮想ネットワーク"、"ネットワークプロファイル"、"リレー名前空間" に先ほど作成した各リソースを選択します。
image.png

接続確認

初回アクセスはすこし時間がかかりますが、次回からは即時にアクセスできます。
Cloudshell の IP アドレスを見てみるとコンテナー用に用意したサブネットが利用されています。

image.png

SSH で Linux VM にログインすることができました。
image.png

ためしにブラウザを閉じてすぐに再接続してみましたが、作成したデータは残ってまいた。
image.png

再起動 (Restart) したところデータは消えていました。
image.png

ストレージありでアクセス

"ストレージアカウントをマウントする" を選択し、その他は先ほどと同様で "適用" を押します。

image.png

テンプレートで作成した各リソースを選択します。

image.png

初回アクセスはすこし数分程度がかかりますが、次回からは即時にアクセスできます。
(確証はないのですが、Cloud Shell をアクティブウィンドウにしておかないと接続できないケースがありました)

image.png

試しにセッションを再起動してみましたが、データは保存されたままでした。

image.png

権限管理

仮想ネットワークへアクセスできるようになるため、VM へのアクセス制御を考える必要もあります。
Cloudshell 用のリソースグループまたは各リソース (仮想ネットワーク等) の読み取り権限がなければ利用できないため、必要なユーザーにリソースグループの閲覧者権限を割り当てる のがよさそうです。
また、ストレージを利用する場合は Cloud Shell 利用ユーザーのストレージレベルで共同作成者以上の権限も必要になります。

セキュリティのために、各ユーザーが自分のストレージ アカウントを作成する必要があります。 Azure ロールベースのアクセス制御 (RBAC) では、ユーザーはストレージ アカウント レベルで共同作成者以上のアクセス権を持つ必要があります。

Hub&Spoke 構成での利用

以下のような構成で UDR をコンテナーサブネット (cloudshellsubnet) に適用し、BLOB にアクセスしてみましたが問題なくアクセスできました。

image.png

Private Endpoint 化

テンプレートで作成された Cloud Shell 用のストレージはサービスエンドポイント経由となっています。

image.png

通常のストレージの手順でサブリソースで file を選んで、プライベートエンドと Private DNS Zone を Cloud Shell 用の仮想ネットワークに作成すれば利用できました。

image.png

NSG や Azure Firewall の利用

試しにコンテナーサブネット (cloudshellsubnet) の NSG の送信規則で VM への通信を拒否してみましたが、期待通り、拒否されました。
UDR も利用できるため、NSG, Azure Firewall での通信制御は可能なようです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?