Azure VM Image Builder の Isolated Image Builds

Isolated Image Builds は、Azure VM Image Builder (AIB) の機能です。 VM イメージのカスタマイズ/検証のコア プロセスを共有プラットフォーム インフラストラクチャからサブスクリプション内の専用 Azure Container Instances (ACI) リソースに移行し、コンピューティングとネットワークを分離します。

Isolated Image Builds の利点

Isolated Image Builds では、ビルド VM のネットワーク アクセスをサブスクリプションのみに制限することで、多層防御を実現できます。 Isolated Image Builds では、AIB によって実行された処理を検査して VM イメージをカスタマイズ/検証できるため、より透明性が高くなります。 さらに、Isolated Image Build を使用すると、ライブ ビルド ログの表示が容易になります。 具体的には、次のように使用します。

  1. コンピューティングの分離: Isolated Image Builds は、AIB の共有プラットフォーム リソースではなく、サブスクリプション内の ACI リソースでイメージ構築処理の主要な部分を実行します。 ACI は、ハイパーバイザーのコンテナー グループごとの分離を提供して、コンテナーがカーネルを共有することなく分離状態で実行されるようにします。

  2. ネットワークの分離: 分離イメージ ビルドは、ビルド VM と AIB サービスのバックエンド コンポーネント間のすべての直接ネットワーク WinRM/ssh 通信を削除します。

    • ビルド VM 用に独自のサブネットを使用せずに AIB テンプレートをプロビジョニングする場合、イメージのビルド時に、パブリック IP アドレス リソースはステージング リソース グループにプロビジョニングされなくなります。
    • ビルド VM 用の既存のサブネットを使用して AIB テンプレートをプロビジョニングする場合、Azure Private Link ベースの通信チャネルは、ビルド VM と AIB のバックエンド プラットフォーム リソースの間でセットアップされなくなります。 代わりに、両方ともサブスクリプションのステージング リソース グループに存在する ACI とビルド VM リソースの間に通信チャネルが設定されます。
    • API バージョン 2024-02-01 以降では、ビルド VM のサブネットに加えて、ACI をデプロイするための 2 つ目のサブネットを指定できます。 指定した場合、AIB はこのサブネットに ACI をデプロイし、ACI とビルド VM の間に Azure Private Link ベースの通信チャネルを設定する必要はありません。 2 番目のサブネットの詳細については、こちらのセクションを参照してください。
  3. 透明性: AIB は HashiCorp Packer 上に構築されています。 Isolated Image Builds は、サブスクリプションの ACI で Packer を実行します。これにより、ACI リソースとそのコンテナーを検査できます。 同様に、サブスクリプション内のネットワーク通信パイプライン全体を使用すると、すべてのネットワーク リソース、その設定、および許容量を調べることができます。

  4. ライブ ログの表示の向上: AIB は、サブスクリプションのステージング リソース グループ内のストレージ アカウントにカスタマイズ ログを書き込みます。 Isolated Image Builds には、Azure portal で同じログに直接従う別の方法が用意されています。これは、ACI リソース内の AIB のコンテナーに移動することで実行できます。

ネットワーク トポロジ

分離イメージ ビルドでは、サブスクリプションのステージング リソース グループに ACI とビルド VM の両方がデプロイされます。 AIB でイメージをカスタマイズまたは検証するには、ACI で実行されているコンテナー インスタンスにビルド VM へのネットワーク パスが必要です。 カスタム ネットワークのニーズとポリシーに基づいて、この目的に異なるネットワーク トポロジを使用するように AIB を構成できます。

独自のビルド VM サブネットを導入しない

  • このトポロジを選択するには、イメージ テンプレートで vnetConfig フィールドを指定しないか、このフィールドを subnetId サブフィールドと containerInstanceSubnetId サブフィールドなしで指定します。
  • この場合、AIB は、2 つのサブネットとネットワーク セキュリティ グループ (NSG) と共に、ステージング リソース グループに仮想ネットワークをデプロイします。 サブネットの 1 つが ACI のデプロイに使用され、もう 1 つのサブネットはビルド VM のデプロイに使用されます。 NSG は、2 つのサブネット間の通信を許可するように設定されます。
  • この場合、AIB はパブリック IP リソースまたはプライベート リンク ベースの通信パイプラインをデプロイしません。

独自のビルド VM サブネットを導入するが、独自の ACI サブネットは導入しない

  • このトポロジを選択するには、イメージ テンプレートで vnetConfig フィールドを subnetId サブフィールドと共に指定し、containerInstanceSubnetId サブフィールドは指定しません。
  • この場合、AIB は、2 つのサブネットとネットワーク セキュリティ グループ (NSG) と共に、ステージング リソース グループに一時的な仮想ネットワークをデプロイします。 サブネットの 1 つが ACI のデプロイに使用され、もう 1 つのサブネットはプライベート エンドポイント リソースのデプロイに使用されます。 ビルド VM は、指定したサブネットにデプロイされます。 プライベート エンドポイント、プライベート リンク サービス、Azure Load Balancer、プロキシ仮想マシンで構成されるプライベート リンク ベースの通信パイプラインもステージング リソース グループにデプロイされ、ACI サブネットとビルド VM サブネット間の通信を容易にします。

独自のビルド VM サブネットを導入し、独自の ACI サブネットを導入する

  • このトポロジを選択するには、イメージ テンプレートの vnetConfig フィールドを subnetId サブフィールドと containerInstanceSubnetId サブフィールドと共に指定します。 このオプション (およびサブフィールド containerInstanceSubnetId) は、API バージョン 2024-02-01 以降で使用できます。 このトポロジを使用するように既存のテンプレートを更新することもできます。
  • この場合、AIB は、指定したビルド VM サブネットにビルド VM をデプロイし、ACI を指定した ACI サブネットにデプロイします。
  • AIB では、パブリック IP、仮想ネットワーク、サブネット、ネットワーク セキュリティ グループ、プライベート エンドポイント、プライベート リンク サービス、Azure Load Balancer、プロキシ仮想マシンなど、ステージング リソース グループにネットワーク リソースはデプロイされません。 このトポロジは、これらのリソースのデプロイを禁止するクォータ制限またはポリシーがある場合に使用できます。
  • ACI サブネットは、分離イメージ ビルドでの使用を許可するために、特定の条件を満たす必要があります。

これらのフィールドの詳細については、テンプレート リファレンスを参照してください。 ネットワーク オプションについては、ここで詳しく説明します。

下位互換性

分離イメージ ビルドはプラットフォーム レベルの変更であり、AIB のインターフェイスには影響しません。 そのため、既存のイメージ テンプレートとトリガー リソースは引き続き機能し、これらの種類の新しいリソースをデプロイする方法に変更はありません。 独自の ACI サブネットを導入するネットワーク トポロジを使用する場合は、新しいテンプレートを作成するか、既存のテンプレートを更新する必要があります。

イメージ ビルドは自動的に Isolated Image Builds に移行されるため、オプトインの操作を行う必要はありません。 また、カスタマイズ ログは引き続きストレージ アカウントで使用できます。

イメージ テンプレートで指定されたネットワーク トポロジによっては、ステージング リソース グループ (ACI、仮想ネットワーク、ネットワーク セキュリティ グループ、プライベート エンドポイントなど) に新しいリソースが一時的に表示され、表示されなくなるリソース (パブリック IP アドレスなど) もある場合があります。 前述のように、これらの一時的なリソースはビルド中にのみ存在し、その後 AIB によって削除されます。

重要

サブスクリプションが Microsoft.ContainerInstance provider に登録されていることを確認してください。

  • Azure CLI: az provider register -n Microsoft.ContainerInstance
  • PowerShell: Register-AzResourceProvider -ProviderNamespace Microsoft.ContainerInstance

サブスクリプションが正常に登録されたら、ACI リソースのデプロイを拒否する Azure ポリシーがサブスクリプションにないことを確認します。 ACI を含まない制限されたリソースの種類のセットのみを許可するポリシーでは、分離イメージ ビルドは失敗します。

サブスクリプションに、ACI リソースのデプロイに必要なリソースのクォータが十分にあることを確認します。

重要

イメージ テンプレートで指定されたネットワーク トポロジによっては、AIB がサブスクリプションのステージング リソース グループに一時的なネットワーク関連リソースをデプロイする必要がある場合があります。 リソース グループへのそのようなリソース (サブネットを含む仮想ネットワーク、ネットワーク セキュリティ グループ、プライベート エンドポイント) のデプロイを拒否する Azure ポリシーがないことを確認します。

新しく作成された仮想ネットワークに DDoS 保護プランを適用する Azure ポリシーがある場合は、リソース グループに関してポリシーを緩和するか、プランに参加するためのアクセス許可がテンプレート マネージド ID にあることを確認します。 または、AIB による新しい仮想ネットワークのデプロイを必要としないネットワーク トポロジを使用することもできます。

重要

AIB を使用するときは、必ずすべてのベスト プラクティスに従ってください。

Note

AIB は、この変更をすべての場所とお客様にロールアウト中です。 サービスのテレメトリとフィードバックに基づいてプロセスが微調整されるため、これらの詳細の一部 (特に、新しいネットワーク関連リソースのデプロイに関するもの) は変更される可能性があります。 エラーについては、トラブルシューティング ガイドを参照してください。

次のステップ