次の方法で共有


仮想ネットワークを使用して Azure Machine Learning 推論環境をセキュリティで保護する (v1)

適用対象:Python SDK azureml v1

適用対象:Azure CLI ml 拡張機能 v1

この記事では、Azure Machine Learning で仮想ネットワークを使用して、推論環境をセキュリティで保護する方法について説明します。 この記事は、モデルを Web サービスとしてデプロイする SDK/CLI v1 デプロイ ワークフローに固有のものです。

ヒント

この記事は、Azure Machine Learning ワークフローのセキュリティ保護に関するシリーズの一部です。 このシリーズの他の記事は次のとおりです。

セキュリティで保護されたワークスペースの作成に関するチュートリアルについては、「チュートリアル: セキュリティで 保護されたワークスペースを作成する」または「チュートリアル: テンプレートを使用してセキュリティで保護されたワークスペースを作成する」を参照してください。

この記事では、仮想ネットワークで次の推論リソースをセキュリティで保護する方法について説明します。

  • 既定の Azure Kubernetes Service (AKS) クラスター
  • プライベート AKS クラスター
  • プライベート リンクを使用する AKS クラスター

前提条件

  • 一般的な仮想ネットワークのシナリオと全体的な仮想ネットワーク アーキテクチャについては、ネットワーク セキュリティの概要に関するページを参照してください。

  • コンピューティング リソースで使用する既存の仮想ネットワークとサブネット。

  • リソースを仮想ネットワークまたはサブネットにデプロイするには、ご利用のユーザー アカウントが、Azure ロールベースのアクセス制御 (Azure RBAC) で次のアクションへのアクセス許可を保持している必要があります。

    • 仮想ネットワーク リソースの "Microsoft.Network/*/read"。 このアクセス許可は、Azure Resource Manager (ARM) テンプレートのデプロイには必要ありません。
    • 仮想ネットワーク リソース上の "Microsoft.Network/virtualNetworks/join/action"。
    • サブネット リソース上の "Microsoft.Network/virtualNetworks/subnets/join/action"。

    ネットワークでの Azure RBAC の詳細については、ネットワークの組み込みロールに関するページを参照してください

重要

この記事の Azure CLI コマンドの一部では、Azure Machine Learning 用に azure-cli-ml、つまり v1 の拡張機能を使用しています。 v1 拡張機能のサポートは、2025 年 9 月 30 日に終了します。 その日付まで、v1 拡張機能をインストールして使用できます。

2025 年 9 月 30 日より前に、ml (v2) 拡張機能に移行することをお勧めします。 v2 拡張機能の詳細については、Azure ML CLI 拡張機能と Python SDK v2 に関するページを参照してください。

制限事項

Azure Container Instances

Azure Machine Learning ワークスペースがプライベート エンドポイントで構成されている場合、VNet でのAzure Container Instances へのデプロイはサポートされていません。 代わりに、ネットワークの分離とマネージド オンライン エンドポイントを使用することを検討してください。

Azure Kubernetes Service

  • AKS クラスターが VNET の背後にある場合、ワークスペースとその関連リソース (ストレージ、キー コンテナー、Azure Container Registry) には、AKS クラスターの VNET と同じ VNET 内にプライベート エンドポイントまたはサービス エンドポイントが必要です。 これらのプライベート エンドポイントまたはサービス エンドポイントを VNET に追加するには、セキュリティで保護されたワークスペースを作成するチュートリアルをご覧ください。
  • ワークスペースにプライベート エンドポイントがある場合、Azure Kubernetes Service クラスターは、ワークスペースと同じ Azure リージョンに存在する必要があります。
  • パブリックの完全修飾ドメイン名 (FQDN) とプライベート AKS クラスターを使用することは Azure Machine Learning ではサポートされていません

Azure Kubernetes Service

重要

仮想ネットワークで AKS クラスターを使用するには、最初に「Azure Kubernetes サービス (AKS) における高度なネットワークの構成」の前提条件に従います。

仮想ネットワーク内の AKS をワークスペースに追加するには、次の手順を使用します。

  1. Azure Machine Learning Studio にサインインし、お使いのサブスクリプションとワークスペースを選択します。

  2. 左側の [Compute](コンピューティング) を選択し、中央の [Inference clusters](推論クラスター) を選択して、 [+ 新規] を選択します。 最後に、AksCompute を選択します。

    Screenshot of create inference cluster dialog.

  3. [AksCompute の作成] ダイアログで、[新規作成][場所]、クラスターに使用する VM サイズを選択します。 最後に、 [次へ] を選択します。

    Screenshot of VM settings.

  4. [Configure Settings](構成の設定) セクションで [Compute name](コンピューティング名) を入力し、 [Cluster Purpose](クラスターの目的)[ノード数][Advanced](詳細) の順に選択してネットワークの設定を表示します。 [仮想ネットワークの構成] 領域で、次の値を設定します。

    • 使用する仮想ネットワークを設定します。

      ヒント

      ワークスペースがプライベート エンドポイントを使用して仮想ネットワークに接続する場合、 [仮想ネットワーク] 選択フィールドが灰色表示されます。

    • クラスターの作成先となる [サブネット] を設定します。

    • [Kubernetes サービスのアドレス範囲] フィールドに、Kubernetes サービスのアドレス範囲を入力します。 このアドレス範囲は、Classless Inter-Domain Routing (CIDR) 表記の IP 範囲を使用して、クラスターで使用できる IP アドレスを定義します。 どのサブネットの IP 範囲とも重複していてはなりません (例: 10.0.0.0/16)。

    • [Kubernetes DNS サービスの IP アドレス] フィールドに、Kubernetes DNS サービスの IP アドレスを入力します。 この IP アドレスは Kubernetes DNS サービスに割り当てられます。 Kubernetes サービスのアドレス範囲内に含まれるアドレスを指定する必要があります (例: 10.0.0.10)。

    • [Docker ブリッジ アドレス] フィールドに、Docker ブリッジ アドレスを入力します。 この IP アドレスは Docker ブリッジに割り当てられます。 サブネットの IP 範囲または Kubernetes サービスのアドレス範囲内にすることはできません (例: 172.18.0.1/16)。

    Screenshot of configure network settings.

  5. Web サービスとしてのモデルを AKS にデプロイすると、推論要求を処理するスコアリング エンドポイントが作成されます。 仮想ネットワークを制御するネットワーク セキュリティ グループ (NSG) に、スコアリング エンドポイントの IP アドレスに対して有効になっているインバウンド セキュリティ規則があることを確認します (仮想ネットワークの外部から呼び出す場合)。

    スコアリング エンドポイントの IP アドレスを確認するには、デプロイされたサービスのスコアリング URI を確認します。 スコアリング URI の表示の詳細については、Web サービスとしてデプロイされたモデルを使用することに関する記事をご覧ください。

    重要

    NSG に対しては既定のアウトバウンド規則のままにします。 詳細については、「セキュリティ グループ」の既定のセキュリティ規則をご覧ください。

    Screenshot that shows an inbound security rule.

    重要

    スコアリング エンドポイントのイメージに表示される IP アドレスは、デプロイによって異なります。 1 つの AKS クラスターに対して同じ IP がすべてのデプロイで共有されますが、各 AKS クラスターには異なる IP アドレスが割り当てられます。

また、Azure Machine Learning SDK を使用して仮想ネットワークに Azure Kubernetes Service を追加することもできます。 仮想ネットワークに既に AKS クラスターがある場合は、AKS にデプロイする方法に関するページで説明されているように、ワークスペースにアタッチすることができます。 次のコードでは、mynetwork という名前の仮想ネットワークの default サブネットに新しい AKS インスタンスが作成されます。

適用対象:Python SDK azureml v1

from azureml.core.compute import ComputeTarget, AksCompute

# Create the compute configuration and set virtual network information
config = AksCompute.provisioning_configuration(location="eastus2")
config.vnet_resourcegroup_name = "mygroup"
config.vnet_name = "mynetwork"
config.subnet_name = "default"
config.service_cidr = "10.0.0.0/16"
config.dns_service_ip = "10.0.0.10"
config.docker_bridge_cidr = "172.17.0.1/16"

# Create the compute target
aks_target = ComputeTarget.create(workspace=ws,
                                  name="myaks",
                                  provisioning_configuration=config)

作成プロセスが完了すると、仮想ネットワークの背後にある AKS クラスターで推論 (モデルのスコアリング) を実行できるようになります。 詳細については、AKS へのデプロイ方法に関するページをご覧ください。

Kubernetes でロールベースのアクセス制御を使用する方法の詳細については、「Kubernetes 認可に Azure RBAC を使用する」を参照してください。

ネットワーク共同作成者ロール

重要

前に作成した仮想ネットワークを提供して AKS クラスターを作成またはアタッチする場合は、AKS クラスターのサービス プリンシパル (SP) またはマネージド ID に、仮想ネットワークを含むリソース グループに対するネットワーク共同作成者ロールを付与する必要があります。

ネットワーク共同作成者として ID を追加するには、次の手順に従います。

  1. AKS のサービス プリンシパルまたはマネージド ID を検索するには、次の Azure CLI コマンドを使用します。 <aks-cluster-name> をクラスターの名前に置き換えます。 <resource-group-name> を、<resource-group-name>リソース グループの名前に置き換えます。

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query servicePrincipalProfile.clientId
    

    このコマンドによって msi の値が返された場合は、次のコマンドを使用して、マネージド ID のプリンシパル ID を識別します。

    az aks show -n <aks-cluster-name> --resource-group <resource-group-name> --query identity.principalId
    
  2. 仮想ネットワークが含まれているリソース グループの ID を検索するには、次のコマンドを使用します。 <resource-group-name> を、<resource-group-name>リソース グループの名前に置き換えます。

    az group show -n <resource-group-name> --query id
    
  3. ネットワーク共同作成者としてサービス プリンシパルまたはマネージド ID を追加するには、次のコマンドを使用します。 <SP-or-managed-identity> を、サービス プリンシパルまたはマネージド ID 用に返された ID に置き換えます。 <resource-group-id> を、仮想ネットワークが含まれているリソース グループ用に返された ID に置き換えます。

    az role assignment create --assignee <SP-or-managed-identity> --role 'Network Contributor' --scope <resource-group-id>
    

AKS での内部ロードバランサーの使用の詳細については、「Azure Kubernetes Service (AKS) で内部ロード バランサーを使用する」を参照してください。

VNet トラフィックをセキュリティ保護する

AKS クラスターと仮想ネットワークの間のトラフィックを分離するには、次の 2 つの方法があります。

  • プライベート AKS クラスター: この方法では、Azure Private Link を使用して、デプロイまたは管理操作用のクラスターとの通信をセキュリティで保護します。
  • 内部 AKS ロード バランサー: この方法では、AKS へのデプロイのエンドポイントが、仮想ネットワーク内でプライベート IP を使用するように構成します。

プライベート AKS クラスター

既定では AKS クラスターには、パブリック IP アドレスを持つコントロール プレーンまたは API サーバーがあります。 プライベート AKS クラスターを作成することによって、プライベート コントロール プレーンを使用するように AKS を構成できます。 詳細については、「プライベート Azure Kubernetes Service クラスターを作成する」を参照してください。

プライベート AKS クラスターを作成したら、Azure Machine Learning で使用する仮想ネットワークにクラスターをアタッチします

内部 AKS ロード バランサー

既定では、AKS のデプロイではパブリック ロード バランサーが使用されます。 このセクションでは、内部ロード バランサーを使用するように AKS を構成する方法について説明します。 内部 (プライベート) ロード バランサーは、プライベート IP のみがフロントエンドとして許可される場合に使用されます。 内部ロード バランサーは、仮想ネットワーク内でトラフィックを負荷分散させるために使用されます

プライベート ロード バランサーを有効にするには、"内部ロード バランサー" を使用するように AKS を構成します。

プライベート ロード バランサーを有効にする

重要

Azure Machine Learning スタジオで Azure Kubernetes Service クラスターを作成しているときに、プライベート IP を有効にすることはできません。 Python SDK を使用する場合、または機械学習用の Azure CLI 拡張機能を使用する場合は、内部ロード バランサーを使用して作成できます。

次の例では、SDK と CLI を使用して、プライベート IP または内部ロード バランサーで新しい AKS クラスターを作成する方法を示します。

適用対象:Python SDK azureml v1

import azureml.core
from azureml.core.compute import AksCompute, ComputeTarget

# Verify that cluster does not exist already
try:
    aks_target = AksCompute(workspace=ws, name=aks_cluster_name)
    print("Found existing aks cluster")

except:
    print("Creating new aks cluster")

    # Subnet to use for AKS
    subnet_name = "default"
    # Create AKS configuration
    prov_config=AksCompute.provisioning_configuration(load_balancer_type="InternalLoadBalancer")
    # Set info for existing virtual network to create the cluster in
    prov_config.vnet_resourcegroup_name = "myvnetresourcegroup"
    prov_config.vnet_name = "myvnetname"
    prov_config.service_cidr = "10.0.0.0/16"
    prov_config.dns_service_ip = "10.0.0.10"
    prov_config.subnet_name = subnet_name
    prov_config.load_balancer_subnet = subnet_name
    prov_config.docker_bridge_cidr = "172.17.0.1/16"

    # Create compute target
    aks_target = ComputeTarget.create(workspace = ws, name = "myaks", provisioning_configuration = prov_config)
    # Wait for the operation to complete
    aks_target.wait_for_completion(show_output = True)

ワークスペースに既存のクラスターをアタッチするとき、AksCompute.attach_configuration()load_balancer_type パラメーターと load_balancer_subnet パラメーターを使用し、ロード バランサーを構成します。

クラスターのアタッチの詳細については、「既存の AKS クラスターをアタッチする」を参照してください。

仮想ネットワークからのアウトバウンド接続を制限する

既定のアウトバウンド規則を使用せずに仮想ネットワークのアウトバウンド アクセスを制限する場合は、Azure Container Registry へのアクセスを許可する必要があります。 たとえば、ネットワーク セキュリティ グループ (NSG) に AzureContainerRegistry.RegionName サービス タグへのアクセスを許可する規則が含まれていることを確認してください。ここで、`{RegionName} は Azure リージョンの名前です。

次のステップ

この記事は、Azure Machine Learning ワークフローのセキュリティ保護に関するシリーズの一部です。 このシリーズの他の記事は次のとおりです。