次の方法で共有


仮想ネットワークを使用して Azure Machine Learning トレーニング環境をセキュリティで保護する (SDKv1)

適用対象: Python SDK azureml v1

この記事では、Python SDK v1 を使用して、Azure Machine Learning の仮想ネットワークでトレーニング環境をセキュリティ保護する方法について説明します。

Azure Machine Learning のコンピューティング インスタンスとコンピューティング クラスターを使用して、仮想ネットワーク内のモデルを安全にトレーニングできます。 環境を計画する際に、パブリック IP アドレスあり、またはなしのコンピューティング インスタンス/クラスターを構成できます。 この 2 つの一般的な違いは次のとおりです。

  • パブリック IP なし: 同じネットワーク リソース要件がないため、コストが削減されます。 インターネットからの受信トラフィックの要件を削除して、セキュリティを向上します。 ただし、必要なリソース (Microsoft Entra ID、Azure Resource Manager など) への送信アクセスを有効にするために、追加の構成変更が必要です。
  • パブリック IP: 既定で動作しますが、Azure ネットワーク リソースが増えるため、コストが高くなります。 パブリック インターネットを経由する Azure Machine Learning service からの受信通信が必要です。

次の表に、これらの構成の違いを示します。

構成 パブリック IP あり パブリック IP なし
受信トラフィック AzureMachineLearning サービス タグ。 なし
送信トラフィック 既定では、制限なしでパブリック インターネットにアクセスできます。
ネットワーク セキュリティ グループまたはファイアウォールを使用して、アクセスする対象を制限できます。
既定では、インターネットにアクセスできません。 それでもインターネットへの送信トラフィックを送信できる場合は、Azure の既定の送信アクセスが原因であり、インターネットへの送信を許可する NSG があります。 既定の送信アクセスを使用することはお勧めしません
インターネットへの送信アクセスが必要であり、インターネット上の必要なリソースに送信トラフィックをルーティングする必要がある場合は、代わりに Virtual Network NAT ゲートウェイまたはファイアウォールを使用することをお勧めします。
Azure ネットワーク リソース パブリック IP アドレス、ロード バランサー、ネットワーク インターフェイス なし

また、Azure Databricks または HDInsight を使用して仮想ネットワーク内のモデルをトレーニングすることもできます。

ヒント

この記事の手順ではなく、Azure Machine Learning のマネージド仮想ネットワークを使用できます。 マネージド仮想ネットワークを使用すると、Azure Machine Learning はワークスペースとマネージド コンピューティングのネットワーク分離のジョブを処理します。 また、ワークスペースに必要なリソース (Azure Storage アカウントなど) のプライベート エンドポイントを追加することもできます。 詳細については、「ワークスペースのマネージド ネットワーク分離」を参照してください。

注意

Azure Machine Learning スタジオ と Python SDK v2 の使用については、トレーニング環境のセキュリティ保護 (v2) に関するページを参照してください。

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

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

  • Azure Machine Learning コンピューティング クラスター
  • Azure Machine Learning コンピューティング インスタンス
  • Azure Databricks
  • 仮想マシン
  • HDInsight クラスター

重要

この記事で "プレビュー" と付記されている項目は、現在、パブリック プレビュー段階です。 プレビュー バージョンはサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使用することはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

前提条件

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

  • コンピューティング リソースで使用する既存の仮想ネットワークとサブネット。 この VNet は、Azure Machine Learning ワークスペースと同じサブスクリプションにある必要があります。

    • ワークスペースとトレーニング ジョブで使用されるストレージ アカウントは、コンピューティング インスタンスおよびクラスターに使用するものと同じ Azure リージョンに配置することをお勧めします。 それらが同じ Azure リージョンにない場合、データ転送コストが発生し、ネットワーク待機時間が増える可能性があります。
    • VNet 内の *.instances.azureml.net および *.instances.azureml.ms への WebSocket 通信が許可されていることを確認します。 WebSocket は、コンピューティング インスタンスでは Jupyter によって使用されます。
  • 仮想ネットワーク内の既存のサブネット。 このサブネットは、コンピューティング インスタンスおよびクラスターの作成時に使用されます。

    • サブネットが他の Azure サービスに委任されていないことを確認します。
    • サブネットに十分な空き IP アドレスが含まれていることを確認します。 コンピューティング インスタンスごとに 1 つの IP アドレスが必要です。 コンピューティング クラスター内の "ノード" ごとに、1 つの IP アドレスが必要です。
  • 独自の DNS サーバーがある場合は、DNS 転送を使用して、コンピューティング インスタンスおよびクラスターの完全修飾ドメイン名 (FQDN) を解決することをお勧めします。 詳細については、Azure Machine Learning でのカスタム DNS の使用に関する記事を参照してください。

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

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

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

制限事項

Azure Machine Learning コンピューティング クラスター/インスタンス

  • コンピューティング クラスターは、ワークスペースとは別のリージョンおよび VNet に作成できます。 ただし、この機能は SDK v2、CLI v2、または Studio を使用する場合にのみ利用できます。 詳しくは、v2 バージョンのセキュリティで保護されたトレーニング環境をご覧ください。

  • 仮想ネットワークでのコンピューティング クラスターまたはインスタンスのデプロイは、Azure Lighthouse ではサポートされていません。

  • トレーニング中にコンピューティング インスタンスと既定のストレージ アカウント間の "プライベート" ネットワーク通信用にポート 445 を開く必要があります。 たとえば、コンピューティングが 1 つの VNet にあり、ストレージ アカウントが別の VNet にある場合は、ストレージ アカウント VNet に対してポート 445 をブロックしないでください。

Azure Databricks

  • 仮想ネットワークは Azure Machine Learning のワークスペースと同じサブスクリプションとリージョンになければなりません。
  • 仮想ネットワークでワークスペースの Azure Storage アカウントもセキュリティで保護される場合、それらは Azure Databricks クラスターと同じ仮想ネットワークに存在する必要があります。
  • Azure Databricks によって使用される __databricks-private__ および __databricks-public__ サブネットに加えて、仮想ネットワーク用に作成された __既定の__ サブネットも必要です。
  • Azure Databricks は、仮想ネットワークとの通信にプライベート エンドポイントを使用しません。

仮想ネットワークでの Azure Databricks の使用に関する詳細については、[Azure Virtual Network での Azure Databricks のデプロイ](/azure/databricks/administration-guide/cloud-configurations/azure/vnet-inject)に関するページを参照してください。

Azure HDInsight または仮想マシン

  • Azure Machine Learning では、Ubuntu を実行する仮想マシンのみがサポートされています。

パブリック IP なしのコンピューティング インスタンス/クラスター

重要

プレビューにオプトインせずにパブリック IP なしで構成されたコンピューティング インスタンスまたはコンピューティング クラスターを使用している場合は、2023 年 1 月 20 日 (この機能が一般提供される時点) より後に、それらを削除して再作成する必要があります。

パブリック IP なしのプレビューを以前に使用していた場合は、一般提供用に要件が変更されたため、どのトラフィックで受信と送信を許可するかについても変更が必要になる可能性があります。

  • 送信要件 - 2 つの追加の送信。これらは、コンピューティング インスタンスおよびクラスターの管理にのみ使用されます。 これらのサービス タグの宛先は、Microsoft によって所有されています。
    • UDP ポート 5831 の AzureMachineLearning サービス タグ。
    • TCP ポート 443 のBatchNodeManagement サービス タグ。

次の構成は、「前提条件」セクションに記載されている内容への追加であり、パブリック IP なしで構成されたコンピューティング インスタンス/クラスターの作成に固有の内容です。

  • コンピューティング リソースが VNet から Azure Machine Learning サービスと通信するには、ワークスペースのプライベート エンドポイントを使用する必要があります。 詳細については、「Azure Machine Learning ワークスペース用にプライベート エンドポイントを構成する」を参照してください。

  • VNet で、次のサービス タグまたは完全修飾ドメイン名 (FQDN) への送信トラフィックを許可します。

    サービス タグ Protocol Port Notes
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    Azure Machine Learning service との通信。
    BatchNodeManagement.<region> ANY 443 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。 コンピューティング インスタンスとコンピューティング クラスターは、Azure Batch サービスを使用して実装されます。
    Storage.<region> TCP 443 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 このサービス タグは、Azure Batch によって使用される Azure Storage アカウントとの通信に使用されます。

    重要

    Storage.<region> への送信アクセスは、ワークスペースからのデータの流出に利用されるおそれがあります。 サービス エンドポイント ポリシーを使用すると、この脆弱性を軽減できます。 詳細については、Azure Machine Learning のデータ流出防止に関する記事を参照してください。

    FQDN Protocol Port Notes
    <region>.tundra.azureml.ms UDP 5831 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。
    graph.windows.net TCP 443 Microsoft Graph API との通信。
    *.instances.azureml.ms TCP 443/8787/18881 Azure Machine Learning との通信。
    *.<region>.batch.azure.com ANY 443 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。
    *.<region>.service.batch.azure.com ANY 443 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。
    *.blob.core.windows.net TCP 443 Azure Blob Storage との通信。
    *.queue.core.windows.net TCP 443 Azure Queue Storage との通信。
    *.table.core.windows.net TCP 443 Azure Table Storage との通信。
  • 送信トラフィックを許可するように、ファイアウォールとアウトバウンド規則、または NAT ゲートウェイとネットワーク サービス グループのいずれかを作成します。 コンピューティングにパブリック IP アドレスがないため、これを構成しないとパブリック インターネット上のリソースと通信できません。 たとえば、Microsoft Entra ID や Azure Resource Manager と通信できません。 パブリック ソースから Python パッケージをインストールする場合も、この構成が必要です。

    Azure Machine Learning で使用される送信トラフィックの詳細については、次の記事を参照してください。

パブリック IP アドレスなしでコンピューティング インスタンスまたはクラスターを作成するには、次の情報を利用してください。

パブリック IP なしでコンピューティング インスタンスまたはコンピューティング クラスターを作成するには、Azure Machine Learning スタジオ UI を使用してリソースを作成します。

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

  2. 左側のナビゲーション バーにある [コンピューティング] ページを選びます。

  3. コンピューティング インスタンスまたはコンピューティング クラスターのナビゲーション バーにある [+ 新規] を選びます。

  4. 必要な VM サイズと構成を設定し、[次へ] を選びます。

  5. [詳細設定][Enable virtual network] (仮想ネットワークを有効にする)、仮想ネットワークとサブネットを選び、最後に VNet とサブネットのセクションにある [No Public IP] (パブリック IP なし) オプションを選びます。

    コンピューティング インスタンスとコンピューティング クラスターに対してパブリック IP なしを構成する方法のスクリーンショット。

ヒント

Azure Machine Learning SDK v2、または ML v2 用の Azure CLI 拡張機能も使用できます。 パブリック IP なしのコンピューティング インスタンスまたはクラスターの作成については、v2 バージョンの Azure Machine Learning トレーニング環境のセキュリティ保護に関する記事を参照してください。

パブリック IP ありのコンピューティング インスタンス/クラスター

次の構成は、「前提条件」セクションに記載されている内容への追加であり、パブリック IP ありのコンピューティング インスタンス/クラスターの作成に固有の内容です。

  • 複数のコンピューティング インスタンス/クラスターを 1 つの仮想ネットワークに配置する場合は、1 つまたは複数のリソースのクォータの増加を要求する必要がある場合があります。 Machine Learning コンピューティング インスタンスまたはクラスターにより、仮想ネットワークが含まれているリソース グループにネットワーク リソースが自動的に割り当てられます。 サービスにより、各コンピューティング インスタンスまたはクラスターについて次のリソースが割り当てられます。

    • ネットワーク セキュリティ グループ (NSG) は自動的に作成されます。 この NSG を使って、AzureMachineLearning サービス タグからのポート 44224 での受信 TCP トラフィックを許可します。

      重要

      コンピューティング インスタンスとコンピューティング クラスターは、必要なルールが設定された NSG を自動的に作成します。

      サブネット レベルに別の NSG がある場合、サブネット レベルの NSG のルールが、自動的に作成された NSG のルールと競合しないようにする必要があります。

      NSG でネットワーク トラフィックがどのようにフィルター処理されるかについては、「ネットワーク セキュリティ グループによってネットワーク トラフィックをフィルター処理する方法」を参照してください。

    • 1 つのロード バランサー

    コンピューティング クラスターでは、クラスターが 0 ノードにスケールダウンするたびにこれらのリソースが削除され、スケールアップすると作成されます。

    コンピューティング インスタンスでは、これらのリソースはインスタンスが削除されるまで保持されます。 インスタンスを停止しても、リソースは削除されません。

    重要

    これらのリソースは、サブスクリプションのリソース クォータによって制限されます。 仮想ネットワーク リソース グループがロックされている場合、コンピューティング クラスターやインスタンスの削除が失敗します。 コンピューティング クラスターやインスタンスが削除されるまで、ロード バランサーを削除することはできません。 また、ネットワーク セキュリティ グループの作成を禁止する Azure Policy の割り当てがないことも確認してください。

  • お使いの VNet で、AzureMachineLearning サービス タグからのポート 44224 での受信 TCP トラフィックを許可します。

    重要

    コンピューティング インスタンス/クラスターには、作成時に IP アドレスが動的に割り当てられます。 このアドレスは作成前には分からず、作成プロセスの一環として受信アクセスが必要であるため、ファイアウォールで静的に割り当てることはできません。 代わりに、VNet でファイアウォールを使用している場合は、この受信トラフィックを許可するようにユーザー定義ルートを作成する必要があります。

  • お使いの VNet で、次のサービス タグに対する送信トラフィックを許可します。

    サービス タグ Protocol Port Notes
    AzureMachineLearning TCP
    UDP
    443/8787/18881
    5831
    Azure Machine Learning service との通信。
    BatchNodeManagement.<region> ANY 443 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。 コンピューティング インスタンスとコンピューティング クラスターは、Azure Batch サービスを使用して実装されます。
    Storage.<region> TCP 443 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 このサービス タグは、Azure Batch によって使用される Azure Storage アカウントとの通信に使用されます。

    重要

    Storage.<region> への送信アクセスは、ワークスペースからのデータの流出に利用されるおそれがあります。 サービス エンドポイント ポリシーを使用すると、この脆弱性を軽減できます。 詳細については、Azure Machine Learning のデータ流出防止に関する記事を参照してください。

    FQDN Protocol Port Notes
    <region>.tundra.azureml.ms UDP 5831 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。
    graph.windows.net TCP 443 Microsoft Graph API との通信。
    *.instances.azureml.ms TCP 443/8787/18881 Azure Machine Learning との通信。
    *.<region>.batch.azure.com ANY 443 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。
    *.<region>.service.batch.azure.com ANY 443 <region> は、Azure Machine Learning ワークスペースが含まれている Azure リージョンに置き換えます。 Azure Batch との通信。
    *.blob.core.windows.net TCP 443 Azure Blob Storage との通信。
    *.queue.core.windows.net TCP 443 Azure Queue Storage との通信。
    *.table.core.windows.net TCP 443 Azure Table Storage との通信。

適用対象: Python SDK azureml v1

import datetime
import time

from azureml.core.compute import ComputeTarget, ComputeInstance
from azureml.core.compute_target import ComputeTargetException

# Choose a name for your instance
# Compute instance name should be unique across the azure region
compute_name = "ci{}".format(ws._workspace_id)[:10]

# Verify that instance does not exist already
try:
    instance = ComputeInstance(workspace=ws, name=compute_name)
    print('Found existing instance, use it.')
except ComputeTargetException:
    compute_config = ComputeInstance.provisioning_configuration(
        vm_size='STANDARD_D3_V2',
        ssh_public_access=False,
        vnet_resourcegroup_name='vnet_resourcegroup_name',
        vnet_name='vnet_name',
        subnet_name='subnet_name',
        # admin_user_ssh_public_key='<my-sshkey>'
    )
    instance = ComputeInstance.create(ws, compute_name, compute_config)
    instance.wait_for_completion(show_output=True)

作成プロセスが完了したら、モデルをトレーニングします。 詳細については、[トレーニング用のコンピューティング ターゲットの選択と使用](how-to-set-up-training-targets.md)に関するページをご覧ください。

Azure Databricks

  • 仮想ネットワークは Azure Machine Learning のワークスペースと同じサブスクリプションとリージョンになければなりません。
  • 仮想ネットワークでワークスペースの Azure Storage アカウントもセキュリティで保護される場合、それらは Azure Databricks クラスターと同じ仮想ネットワークに存在する必要があります。
  • Azure Databricks によって使用される __databricks-private__ および __databricks-public__ サブネットに加えて、仮想ネットワーク用に作成された __既定の__ サブネットも必要です。
  • Azure Databricks は、仮想ネットワークとの通信にプライベート エンドポイントを使用しません。

仮想ネットワークでの Azure Databricks の使用に関する具体的な情報については、「[Azure Virtual Network に Azure Databricks をデプロイする](/azure/databricks/administration-guide/cloud-configurations/azure/vnet-inject)」を参照してください。

モデルのトレーニングに必要なパブリック インターネット アクセス

重要

この記事の前のセクションでは、コンピューティング リソースの作成に必要な構成について説明していますが、このセクションの構成情報は、これらのリソースをモデルのトレーニングに使用するために必要です。

Azure Machine Learning は、パブリック インターネットへの受信アクセスと送信アクセスの両方が必要です。 次の表に、必要なアクセスの概要と、その目的を示します。 .region で終わるサービス タグでは、region を、ご利用のワークスペースを含む Azure リージョンに置き換えます。 Storage.westus の例を次に示します。

ヒント

「必須」のタブには、必要な受信および送信の構成が一覧表示されます。 「状況」のタブには、有効にする構成によっては必要になる、省略可能な受信と送信の構成が一覧表示されます。

方向 プロトコルおよび
ports
サービス タグ 目的
送信 TCP: 80、443 AzureActiveDirectory Microsoft Entra ID 使用した認証。
送信 TCP: 443、18881
UDP: 5831
AzureMachineLearning Azure Machine Learning service の使用。
ノートブックで Python Intellisense にポート 18881 が使用されます。
Azure Machine Learning コンピューティング インスタンスの作成、更新、削除には、ポート 5831 が使用されます。
送信 ANY: 443 BatchNodeManagement.region Azure Machine Learning コンピューティング インスタンス/クラスターの Azure Batch バックエンドとの通信。
送信 TCP: 443 AzureResourceManager Azure Machine Learning、Azure CLI、Azure Machine Learning SDK を使用した Azure リソースの作成。
送信 TCP: 443 Storage.region コンピューティング クラスターとコンピューティング インスタンスの Azure Storage アカウントに格納されたデータにアクセスします。 この送信でのデータ流出の防止については、「データ流出防止」を参照してください。
送信 TCP: 443 AzureFrontDoor.FrontEnd
* 21Vianet によって運営される Microsoft Azure では不要。
Azure Machine Learning スタジオ用のグローバル エントリ ポイント。 AutoML のイメージと環境を格納します。 この送信でのデータ流出の防止については、「データ流出防止」を参照してください。
送信 TCP: 443 MicrosoftContainerRegistry.region
このタグには AzureFrontDoor.FirstParty タグへの依存関係があることに注意してください
Microsoft が提供する Docker イメージにアクセスします。 Azure Kubernetes Service の Azure Machine Learning ルートのセットアップ。

ヒント

サービス タグの代わりに IP アドレスが必要な場合、次のいずれかのオプションを使用します。

IP アドレスは定期的に変わる可能性があります。

機械学習プロジェクトで必要なパッケージをインストールするために、Visual Studio Code サイトと Microsoft 以外のサイトへの送信トラフィックを許可する必要がある場合があります。 次の表に、機械学習に一般的に使用されるリポジトリを示します。

ホスト名 目的
anaconda.com
*.anaconda.com
既定のパッケージをインストールするために使用されます。
*.anaconda.org リポジトリ データを取得するために使用されます。
pypi.org 既定のインデックスからの依存関係 (存在する場合) を一覧表示するために使用されます。ユーザー設定によってこのインデックスが上書きされることはありません。 インデックスが上書きされる場合は、*.pythonhosted.org も許可する必要があります。
cloud.r-project.org R 開発用の CRAN パッケージをインストールするときに使用されます。
*.pytorch.org PyTorch に基づくいくつかのサンプルによって使用されます。
*.tensorflow.org Tensorflow に基づくいくつかのサンプルによって使用されます。
code.visualstudio.com Visual Studio Code デスクトップをダウンロードしてインストールするために必要です。 これは Visual Studio Code Web では必要ありません。
update.code.visualstudio.com
*.vo.msecnd.net
セットアップ スクリプトを通じてコンピューティング インスタンスにインストールされている Visual Studio Code サーバー ビットを取得するために使用されます。
marketplace.visualstudio.com
vscode.blob.core.windows.net
*.gallerycdn.vsassets.io
Visual Studio Code 拡張機能をダウンロードしてインストールするために必要です。 これらのホストにより、Visual Studio Code 用の Azure ML 拡張機能で提供されるコンピューティング インスタンスへのリモート接続が有効になります。 詳細については、「Visual Studio Code で Azure Machine Learning コンピューティング インスタンスに接続する」を参照してください。
raw.githubusercontent.com/microsoft/vscode-tools-for-ai/master/azureml_remote_websocket_server/* コンピューティング インスタンスにインストールされている Websocket サーバー ビットを取得するために使用されます。 Websocket サーバーは、Visual Studio Code クライアント (デスクトップ アプリケーション) から、コンピューティング インスタンスで実行されている Visual Studio Code サーバーに要求を送信するために使用されます。

注意

Azure Machine Learning VS Code 拡張機能を使用する場合、リモート コンピューティング インスタンスには、拡張機能に必要なパッケージのインストールにパブリック リポジトリへのアクセスが必要です。 コンピューティング インスタンスがこれらのパブリック リポジトリまたはインターネットにアクセスするためにプロキシを必要とする場合、コンピューティング インスタンスの ~/.bashrc ファイルで HTTP_PROXY および HTTPS_PROXY 環境変数を設定およびエクスポートする必要があります。 このプロセスは、カスタム スクリプトを使用してプロビジョニング時に自動化できます。

Azure Machine Learning で Azure Kubernetes Service (AKS) を使用する場合は、AKS VNet への次のトラフィックを許可します。

ファイアウォール ソリューションの使用に関する詳細については、Azure Machine Learning でのファイアウォールの使用に関するページを参照してください。

次の手順

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