📷

Azure Compute Galleryの「Direct Shared Image」がpreviewと聞いて

2022/10/03に公開

はじめに

2022/7頃、Azure Compute Gallary(ACG)に「Direct Shared Image」という機能がPublic Previewとなりました。
https://azure.microsoft.com/en-us/updates/public-preview-share-images-across-subscriptions-and-tenants-with-new-compute-gallery-feature/

説明を軽く日本語化すると「ACGに登録したイメージを、他のテナントやサブスクリプションに簡単に共有できる」という機能なのですが…これ私としては心待ちにしていた機能で、とても嬉しいUpdateでした。やっとこさ試せたので記録に残そうと思います。

これまでの課題

これまでもACGに登録したイメージを他のテナントやサブスクリプションに共有することは出来ました。ですが、ただ共有するだけでも結構面倒くさい手順が必要になっていて、課題もありました。

他テナントのイメージを参照するために…

事業会社に対してベンダーが開発したVMイメージを持ち込みたいというシーンを考えます。

その場合、下記のような構成を取る必要があります。

  • ①User Aは自社サブスクリプションAに対するVM作成権限を持つ(仮想マシン共同作成者など)
  • ②ベンダー側のAzure AD テナントBにUser Aをゲスト招待する
  • ③User A(ゲストユーザー)はベンダーサブスクリプションBのACGの参照権限を持つ(閲覧者など)

事業会社のUser Aを使って操作できるようにするために、VM操作とイメージ参照の両方ができる構成にするわけです。

※この辺りの公式ドキュメント参照
https://learn.microsoft.com/ja-jp/azure/virtual-machines/share-gallery?tabs=portal

しかし実は、この構成にしてもAzure PortalからはVMのデプロイは実施できません。
事業会社テナントのUser Aとしてログインしているときは、ベンダーテナント側のUser A(ゲストユーザ)で見えるVMイメージをソースに指定することができず、
CLIを使えば両方のリソースを参照しデプロイすることができるのですが、ポータルからだとNGなんです。

他テナントのイメージからデプロイするために…

さて、CLIを使ってデプロイするとしてもさらにもう一つ課題があります。
一般的に、エンタープライズでAzure(Azure AD)を使うときは、「テナント制御」という機能を使って「自社テナント以外へのログインを制限」することが一般的です。

<参考>
https://learn.microsoft.com/ja-jp/azure/active-directory/manage-apps/tenant-restrictions

この制限がかかっていると、CLIだろうと外部テナントにログインできないので、共有元のイメージを参照することができません。
もちろん、都度許可してProxyの構成を変更すればイメージを参照できるようになるのですが、今度はベンダーサブスクリプションへの持ち出し経路ができてしまうことになります。
(ベンダーサブスクリプション側のアクセス権は、事業会社ではなくベンダー側が設定できてしまうので、悪意を持った人が事業会社側のデータを持ち出してベンダー側に持ち出す、ということがコントロールできなくなります)

さて困った、使えないじゃん。というのがこれまでの課題でした。
私自身は試したことが無いのですが、Lighthouseというリソースの管理権限を委任するサービスを使うことで、サブスクBのリソースをテナントA側のユーザーに見せることができます。おそらくそれでこの課題を回避することができますが、たかだかVMのイメージ共有にそこまでする!?というめんどうくさい構成なので、ここまではなかなか実装していないのが現実かと思います。

プレビューになった機能

さて、今回プレビューになったのが「Direct Shared Image」という機能で、上のような面倒くさい共有設定をすっ飛ばして、直接イメージを共有する(直訳)という機能です。
イメージとしてはこんな感じで、あらかじめ共有先のテナントやサブスクリプションを指定して共有しておくことで、共有先ではMarketPlaceのイメージからデプロイするのと同じように使うことができます。

試してみる前編:直接共有のACGを作成する

ということで、本題です。上に描いた構成を試してみます。
※ただ今回、Proxyの構築はサボったので、そこだけ省略です。

プレビュー機能有効化

本機能はパブリックプレビューなのですが、登録制となっています。
ドキュメントにもInfomationが書かれているので、これに従ってプレビュー登録します。https://learn.microsoft.com/ja-jp/azure/virtual-machines/share-gallery-direct?tabs=portaldirect

有効化された環境だと、下記のように機能が有効化されていることが、

無効なままの環境だと、NotRegisterdというステータスになっていることが分かります。

※なぜか上はbashで下はpowershellですが、特に意味は無いです。

ACG作成

次に、「Direct Shared Image」機能が有効なACGを作成します。現時点では、ACG作成時に指定する必要があり、後から変更することはできません。(と、ドキュメントに書いてありますので、素直に従います。)

共有設定

ACGの「設定」>「共有中」というメニューから、共有先のサブスクリプションやテナントを指定することができます。
今回は、「組織外のサブスクリプション」を選択し、共有先となるサブスクリプションIDを入力しました。

VMイメージ作成

ココから先は、通常のACGへのイメージ登録と同じです。
「適当なVMを作る」を作り、下記ドキュメントに従いイメージバージョンまで作成します。
https://learn.microsoft.com/ja-jp/azure/virtual-machines/image-version?tabs=portal

以上で、「Direct Shared Image」すなわち直接共有されたVMイメージが作成できました。

試してみる後編:直接共有のイメージからVMを作成する

ログイン

共有先サブスクリプションに紐づけられたAzureADのユーザーでAzureポータルにログインし直します。共有元で入ってしまったら、イメージが参照できるのは当たり前ですから、注意です。

VM作成

VMの作成画面を進めていきます。
ポイントは、イメージ選択プルダウンの下にある「すべてのイメージを表示」を選択することです。

イメージ選択

すると下記のような画面で、「その他のアイテム」の下に「直接共有イメージ(プレビュー)」というメニューがあり、その中に先ほど共有したVMイメージが見えてきました。

このイメージを選択すると、元のVM作成画面に戻り、後は通常のVM作成と特に操作は変わりませんでした。

これだけです!なんて簡単にできるんでしょう。

注意すること

今回「直接共有」の設定を下のは、ACGのレイヤでした。つまりギャラリー単位で共有するわけですから、もし共有先ごとに共有内容が変わってくるようだったら、ギャラリーを分けて作りましょうというのが無難なところかと思います。
ただし、ACGの数、イメージの数にクォータがありますのでそこは気を付けましょう。
https://learn.microsoft.com/ja-jp/azure/azure-resource-manager/management/azure-subscription-service-limits#compute-gallery-limits

それ以外は…このレベルの試用の範囲で気付く注意点はなく、ただただ本当に待ち望んだ機能でした。

おわりに

ACGのプレビュー機能について試してみました。私のイメージするテナント間共有については、無事実現できるようでした。
(AWSではアカウント間のAMI共有は結構前から実装されていた印象ですが…)Azureでも早くプレビューが取れてくれるといいですね。楽しみです。

Discussion