このページでは、Azure Virtual Network (VNet) を使用してAzure Stackをプライベートネットワークにデプロイする方法について詳しく説明します。このガイドで説明されている手順に従うことで、すべてのAzure Stackリソースをプライベートネットワーク環境に安全にデプロイできます。
azure-vnet-architecture=73db1c05-7604-45c8-8987-23b6ab93b7ad.png

概要 親トピック

リソースの最高レベルのセキュリティを確保するために、システムのさまざまなコンポーネントに合わせたいくつかの対策を実装しました。
  • [Function App]: すべての受信トラフィックをクローズし、アウトバウンドトラフィックのVNet統合を有効にしました。つまり、Function Appは仮想ネットワークの一部であるリソースとのみ通信できるため、外部ソースからの不正アクセスを防止できます。
  • [Service Bus and Storage Account]: セキュリティをさらに強化するために、ほとんどのパブリックエンドポイントを閉鎖し、Service BusおよびStorage Account用のプライベートエンドポイントを作成します。プライベートエンドポイントは、プライベートネットワークからのアクセスのみを許可し、リソースへの外部アクセスを防ぎます。
  • [Application Insights and Log Analytics workspace]: デプロイには、Application Insights and Log Analytics workspaceへのパブリックネットワークアクセスを制御できるパラメータが含まれています。パブリックネットワークアクセスを無効にする場合は、それらのリソースをAzure Monitor Private Link Scope (AMPLS) に追加することを強くお勧めします。これにより、許可されたソースからのみログが取り込まれ、クエリが実行されるようになり、不正アクセスからデータが保護されます。
azure-vnet-traffic-flow=d8a5c7c7-d5c6-491e-9d7f-c71ac6347e84.png
注意
注意
次の2つのリソースがパブリックネットワークに残ります。
  • Key Vaultは、FSSライセンスと検索設定を保存するために必要であり、トレンドマイクロのバックエンドからアクセスできる必要があります。これには、パブリックネットワークからのアクセスが必要です。
  • Storage StackのService Busは、保護されたストレージアカウントからイベントBlobCreatedおよびBlobRenamedをフェッチするためにEvent Gridによって使用されます。 Event GridではVNetへのメッセージ送信がサポートされていないため、Service Busはパブリックネットワークに接続したままにする必要があります。
VNetを使用するStackをVNetを使用しないStackにアップデートすることはできません。また、その逆も同様です。つまり、VNetを使用してStackをデプロイした場合、以降のアップデートでVNetの構成を削除することはできません。同様に、VNetなしでStackをデプロイした場合、以降のアップデートでVNetの構成を追加することはできません。StackでVNetを使用するかどうかを変更するには、Stackを削除して再度デプロイする必要があります。

前提条件 親トピック

Azure Virtual Network (VNet) を使用してプライベートネットワークにAzure Stacksシステムをデプロイする前に、前提条件となるいくつかの手順を完了する必要があります。これらの手順は、Azure Stacksリソースをプライベートネットワーク環境に安全にデプロイするために不可欠です。

サポートされているAzureリージョン 親トピック

私たちのサービスは現在、いくつかのAzureリージョンでサポートされており、VNet、Private Link、Private DNS Zoneなどのリソースがサポートされているリージョンも含まれています。詳細はAzureのリージョン別製品ドキュメントをご参照ください。

VNet & サブネット 親トピック

Azure Stackをデプロイする前に、次の4つのサブネットを含むVNetを作成する必要があります。

手順

  1. Scanner機能アプリサブネット
  2. BLOBリスナー機能 アプリサブネット
  3. 検索後処理 タグ機能 アプリサブネット
  4. プライベートエンドポイントサブネット

次に進む前に

最初の3つのサブネットは、Azure Function Appの機能であるVNet統合を使用します。これにより、Azure Stacksの機能をVNetと統合できます。予想されるスケールアウトワーカーの数に対応するには、各サブネットに十分な数の使用可能なIPアドレスが必要です。たとえば、各Function Appワーカーには2つのIPアドレスが必要なため、使用可能なIP数は最大スケールアウト数の2倍に設定する必要があります。さらに、Integrating your app with an Azure virtual networkによると、少なくとも16個の使用可能なIPアドレスを提供する/28サブネットを予約することをお勧めします。
プライベートエンドポイントサブネットには、基本的なAll-in-one Stackで使用可能なIPアドレスを9つ以上用意することをお勧めします。複数のStorage Stackがある場合は、Storage Stackごとに5つの追加のIPアドレスが必要です。したがって、使用可能なIPの数は、9よりも大きく、追加のStorage Stackに必要な追加のIPアドレスの数を足した数である必要があります。
さらに、Azureでは、すべてのサブネットの最初と最後の4つのIPアドレスが自動的に予約され、合計5つのIPアドレスが予約されます。したがって、サブネットごとに追加で5つのIPアドレスを割り当てる必要があります。詳細については、Azure Virtual Networkに関するよくある質問 (FAQ)を参照してください。
次の表に従って、サブネットを設定してください。
サブネット
Scanner Stackで使用可能なIP
Storage Stackで使用可能なIP
予約済みIP番号
IPアドレスの総数
最小推奨値
Scanner機能アプリサブネット
2 x Scannerのスケールアウト数 (初期設定=1)
該当なし
5
2 x 1 + 5 = [7]
/28
BLOBリスナー機能 アプリサブネット
該当なし
2 x BLOBリスナーのスケールアウト数 (初期設定=1)
5
2 x 1 + 5 = [7]
/28
検索後処理 タグ機能 アプリサブネット
該当なし
2 x 検索後処理タグのスケールアウト数 (初期設定=1)
5
2 x 1 + 5 = [7]
/28
プライベートエンドポイントサブネット
ストレージアカウント用に3つ、Service Bus用に1つ
ストレージアカウント用に4つ、Service Bus用に1つ
5
(3+1) + (4+1) + 5 = [14]
/27
注意
注意
Azure Stack内のリソースは、[protected storage account]と相互に通信する必要があるため、作成するサブネットが相互にアクセスできることを確認してください。
注意
注意
Azureでは、Function Appの統合を同じリージョンにデプロイされたVNetにのみ制限します。したがって、Azure StackがVNetと同じリージョン内にデプロイされていることを確認してください。
Azure CLIを使用して関数アプリのサブネットを作成するには、次のコマンドを使用します。
az network vnet subnet create \
  --name <function-app-subnet-name> \
  --resource-group <application-resource-group-name> \
  --vnet-name <vnet-name> \
  --address-prefixes <address-prefixes> \
  --delegations Microsoft.Web/serverFarms
Azure CLIを使用してプライベートエンドポイントのサブネットを作成するには、次のコマンドを使用します。
az network vnet subnet create \
  --name <private-endpoint-subnet-name> \
  --resource-group <application-resource-group-name> \
  --vnet-name <vnet-name> \
  --address-prefixes <address-prefixes>

保護されたストレージアカウント 親トピック

プライベートネットワークアクセスのみを許可するストレージアカウントにAzure Stackがアクセスできるようにするには、プライベートエンドポイントまたはサービスエンドポイントを介したStackのネットワークからのアクセスを許可する必要があります。
プライベートエンドポイント は、ネットワークインタフェースを使用して仮想ネットワークをプライベートリンクサービスに接続する、より安全なオプションです。これにより、仮想ネットワーク内のIPアドレスを介してストレージアカウントにアクセスできるようになります。一方、サービスエンドポイント では、特定のサブネットからのトラフィックが公共のインターネットを経由せずにストレージアカウントにアクセスできます。
セキュリティを強化するために、プライベートエンドポイントを使用することをお勧めします。特に、ストレージアカウントがプライベート接続のみを受け入れる場合や、パブリックIPをブロックするファイアウォールがある場合は、この機能を使用することをお勧めします。Stackは、前のセクションで説明した Scanner Function App SubnetBlob Listener Function App SubnetおよびPost Scan Action Tag Function App Subnet から保護されたストレージアカウントにアクセスします。これらのサブネットが保護されたストレージアカウントにアクセスできることを確認してください。アクセスできない場合、検索は失敗します。
Event GridシステムトピックはVNetをサポートしていません。 BLOBイベントをサブスクライブするには、次のAzure CLIコマンドを使用して、信頼できるAzureサービスのトラフィックをバイパスする必要があります。
az storage account update \
  --resource-group <resource_group_name> \
  --name <protected_storage_account_name> \
  --bypass AzureServices

プライベートDNSゾーン 親トピック

プライベートエンドポイントが正しいリソースに接続できるようにするには、プライベートDNSゾーンのDNS設定を正しく構成する必要があります。
プライベートDNSゾーンを準備するには、特定の名前でゾーンを作成し、対象のVNetにリンクする必要があります。リソースエンドポイントを対応するプライベートエンドポイントのプライベートIPアドレスにマップするレコードは、Azure Stackのデプロイプロセス中に自動的に作成されます。プライベートDNSゾーンの設定方法の詳細については、AzureプライベートエンドポイントのDNS設定を参照してください。
azure-vnet-private-dns-zone=be695834-1d10-4371-b299-f62a3fd06d93.png
保護対象リソースには、次のプライベートDNSゾーンが必要です。
  • ストレージアカウントBLOB: privatelink.blob.core.windows.net
  • ストレージアカウントファイル: privatelink.file.core.windows.net
  • ストレージアカウントテーブル: privatelink.table.core.windows.net
  • サービスバス: privatelink.servicebus.windows.net
Azure CLIを使用してプライベートDNSゾーンを作成するには、次のコマンドを使用します。
az network private-dns zone create \
  --resource-group <platform-resource-group-name> \
  --name privatelink.blob.core.windows.net

az network private-dns zone create \
  --resource-group <platform-resource-group-name> \
  --name privatelink.file.core.windows.net

az network private-dns zone create \
  --resource-group <platform-resource-group-name> \
  --name privatelink.table.core.windows.net

az network private-dns zone create \
  --resource-group <platform-resource-group-name> \
  --name privatelink.servicebus.windows.net
Azure CLIを介してプライベートDNSゾーンをVNetにリンクするには、次のコマンドを使用します。
az network private-dns link vnet create \
  --registration-enabled false \
  --name <link-name> \
  --resource-group <platform-resource-group-name> \
  --virtual-network <target-vnet-resource-id> \
  --zone-name privatelink.blob.core.windows.net

az network private-dns link vnet create \
  --registration-enabled false \
  --name <link-name> \
  --resource-group <platform-resource-group-name> \
  --virtual-network <target-vnet-resource-id> \
  --zone-name privatelink.file.core.windows.net

az network private-dns link vnet create \
  --registration-enabled false \
  --name <link-name> \
  --resource-group <platform-resource-group-name> \
  --virtual-network <target-vnet-resource-id> \
  --zone-name privatelink.table.core.windows.net

az network private-dns link vnet create \
  --registration-enabled false \
  --name <link-name> \
  --resource-group <platform-resource-group-name> \
  --virtual-network <target-vnet-resource-id> \
  --zone-name privatelink.servicebus.windows.net

Azure Monitor Private Linkのスコープ (オプション) 親トピック

Azure Monitor Private Link Scopes (AMPLS) は、プライベートエンドポイントを使用してプライベートネットワーク内からAzure Monitorのログとメトリックに安全にアクセスできるようにするサービスです。つまり、データは保護され、公共のインターネットを経由することはありません。
プライベートネットワークからAzure StacksのApplication Insightsログデータにアクセスするには、 Azure Monitor Private Linkのスコープと、対象のVNetに接続するための対応するプライベートエンドポイントを作成する必要があります。 AMPLSの設定手順の詳細については、プライベートリンクの設定を参照してください。 Azure Stackのデプロイが完了したら、Application InsightsリソースをAMPLSに追加できます。これにより、ログデータにはプライベートネットワーク内からのみアクセスできるようになります。
azure-vnet-ampls=b159cba3-88c3-4ac1-a101-d7973f54ce67.png
警告
警告
VNetがAzure Monitor Private Linkのスコープにリンクされている場合は、ログが失われないように、対応するApplication Insightsリソースをスコープに追加することが重要です。必要なリソースをスコープに追加しないと、Azureのネットワーク状況によってログが失われる可能性があります。

Azure Stackをデプロイする 親トピック

Azure StackをVNetにデプロイするには、前のセクションで作成したリソースを使用してテンプレートパラメータを満たす必要があります。必要な9つのパラメータは次のとおりです。
azure-vnet-deployment-parameters=fab11408-f417-4edb-96c5-292f81c8d6ee.png
パラメータ
type
説明
リソースID
string
Azure StackがデプロイされるVNetのリソースID。
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{vnetName}
Scannerのサブネット名
string
Scanner Function Appをデプロイするサブネットの名前。
c1fss-scanner
BLOBリスナーのサブネット名
string
BlobListener Function Appがデプロイされるサブネットの名前。
c1fss-blob-listener
検索後処理タグ サブネット名
string
PostScanActionTag Function Appを配置するサブネットの名前。
c1fss-post-scan-action-tag
プライベートエンドポイントのサブネット名
string
プライベートエンドポイントがデプロイされるサブネットの名前。
c1fss-private-endpoints
ファイルプライベートDNSZoneリソースID
string
ストレージアカウントファイルサービスを解決するプライベートDNSゾーンのリソースID。
/subscriptions/{subscriptionId}/resourceGroups/platform-rg/providers/Microsoft.Network/privateDnsZones/privatelink.file.core.windows.net
BLOBプライベートDNSZoneリソースID
string
ストレージアカウントBLOBサービスを解決するプライベートDNSゾーンのリソースID。
/subscriptions/{subscriptionId}/resourceGroups/platform-rg/providers/Microsoft.Network/privateDnsZones/privatelink.blob.core.windows.net
テーブルプライベートDNSZoneリソースID
string
ストレージアカウントテーブルサービスを解決するプライベートDNSゾーンのリソースID。
/subscriptions/{subscriptionId}/resourceGroups/platform-rg/providers/Microsoft.Network/privateDnsZones/privatelink.table.core.windows.net
Service BusのプライベートDNSZoneリソースID
string
Service Busを解決するプライベートDNSゾーンのリソースID。
/subscriptions/{subscriptionId}/resourceGroups/platform-rg/providers/Microsoft.Network/privateDnsZones/privatelink.servicebus.windows.net
Application Insightの制限付きアクセス
boolean
Application Insightsへのパブリックアクセスを無効にするかどうかを指定します。 trueに設定した場合、アプリケーションインサイトログには、 Azure Monitor Private Linkのスコープを介してのみアクセスできます。
true
デプロイを続行する前に、各パラメータの値を確認してください。

Azure Stackの設定 親トピック

Azure Stackをデプロイしたら、データの保護を開始する前に構成する必要があります。必要な2つの主要なタスクがあります。

Azure StacksのApplication InsightをAzure Monitor Private Linkのスコープに追加する 親トピック

注意
注意
ログにパブリックネットワークが含まれていて、デプロイパラメータ Restricted Access For Application Insightfalse であることを示している場合は、このセクションを無視してください。
Application Insightsへのアクセスをセキュリティで保護するために、Application InsightsをAzure Monitor Private Linkのスコープに追加できます。これにより、Application Insightsログへのアクセスが、Private Link Scopeにアクセスできるユーザのみに制限されます。プライベートリンクのスコープにApplication Insightsを追加するには、次の手順を実行します。

手順

  1. Azure portalで、[Azure Monitor Private Link Scopes] に移動します。
  2. [Configure] セクションで、[Azure Monitor Resources] をクリックします。
  3. 「追加」をクリックしてください。
  4. [Stacks Application Insights] を選択します。
  5. 「適用」をクリック。

次に進む前に

または、次のコマンドを使用することもできます。
az monitor private-link-scope scoped-resource create \
  --linked-resource <TARGET_APPLICATION_INSIGHT_RESOURCE_ID> \
  --name <SCOPED_RESOURCE_NAME> \
  --resource-group <AMPLS_RESOURCE_GROUP> \
  --scope-name <AMPLS_NAME>
Stackのログにプライベートネットワークからアクセスできるようにするには、少なくとも3つのApplication InsightsリソースをAzure Monitor Private Linkの範囲に追加する必要があります。Scanner Stackの場合、Application InsightsのリソースIDはデプロイ出力にScannerApplicationInsightResourceIDとして表示されます。Storage Stackの場合、Application InsightsのリソースIDは、デプロイ出力からBlobListenerApplicationInsightsResourceIDおよびActionTagApplicationInsightsResourceIDとして確認できます。接続方法の詳細については、Azure Monitorリソースの接続を参照してください。
azure-vnet-ampls-setup=7b4917a5-731d-41f7-8672-70c8f52967f4.png
注意
注意
Azure Stackを削除する前に、まずAzure Monitor Private Link Scope (AMPLS) とApplication Insightsの間の関連付けを削除する必要があります。そうしないと、削除プロセスでエラーが発生する可能性があります。関連付けを削除するには、Azure portalまたはAzure CLIを使用して、スコープからApplication Insightsリソースを削除します。

ファイアウォール(オプション) 親トピック

通常、VNetトラフィックはAzure FirewallまたはNetwork SecurityGroup (NSG) によって保護されます。 NSGではFQDNフィルタがサポートされていないため、 Azure Firewallを使用してトラフィックを制御することをお勧めします。 Azure Stackがスムーズに実行されるように、適切なファイアウォール設定を行うことが重要です。
完全修飾ドメイン名 (FQDN) によるトラフィックの制御は、ネットワークルールとアプリケーションルールの2種類のファイアウォールルールでサポートされています。ネットワークルールを使用してこれを実現する場合は、最初にDNSプロキシを有効にする必要があります。ただし、AzureではHTTP/Sトラフィックにアプリケーションルールを使用することをお勧めします。HTTP/Sトラフィックにはアプリケーションルールの方が適しているためです。FQDNフィルタのアプリケーションルールとネットワークルールの違いの詳細については、AzureのWebサイトでネットワークルールでFQDNフィルタリングを参照してください。

サードパーティのサービスとの通信 親トピック

サードパーティのサービスとの通信を許可するには、次のアプリケーションルールをファイアウォールの許可リストに追加する必要があります。
名前
ソースの種類
アップデート元
プロトコル:ポート
対象の完全修飾ドメイン名
説明
C1FSSトレンド
IPアドレス
<Scanner-subnet>
https:443
filestorage.us-1.cloudone.trendmicro.com
FQDNはC1リージョンによって異なります
Trend C1FSS ICRC
IPアドレス
<Scanner-subnet>
https:443
c1fss1.icrc.trendmicro.com
Trend Micro C1FSS IAU
IPアドレス
<Scanner-subnet>
https:443
ipv6-iaus.trendmicro.com
Trend C1fss IAU Active
IPアドレス
<Scanner-subnet>
https:443
ipv6-iaus.activeupdate.trendmicro.com
AWS S3
IPアドレス
<scanner-subnet><blob-listener-subnet><post-scan-action-tag-subnet>
https:443
file-storage-security.s3.amazonaws.com
Scanner Azure Management
IPアドレス
<Scanner-subnet>
https:443
management.azure.com

Scanner StackのKeyVaultの設定 親トピック

Scanner Stackには、パブリックネットワークに残っている2つのKeyVaultがあります。 Scanner Function AppがこれらのScannerにアクセスできない場合、検索は失敗します。したがって、KeyVaultをホワイトリストに追加する必要があります。
アプリケーションルールからホワイトリストの対象FQDNを設定できます。このルールは、Scannerのデプロイ出力ScannerLicenseKeyVaultURI および ScannerConfigKeyVaultURIに表示されます。
名前
ソースの種類
アップデート元
プロトコル:ポート
対象の完全修飾ドメイン名
ScannerのKey Vault
IPアドレス
<Scanner-subnet>
https:443
<scanner-license-keyvault>.vault.azure.net、<scanner-config-keyvault>.vault.azure.net
または、ネットワークルールからのサービスタグのホワイトリストを設定できます。これは、より簡単な方法ですが、対象のすべてのKeyVaultへのトラフィックを許可します。
名前
プロトコル
ソースの種類
アップデート元
サービスタグ
送信先ポート
Key Vaults
TCP
IPアドレス
<Scanner-subnet>
AzureKeyVault または AzureKeyVault.<region>
443

Application Insightの設定 親トピック

Azure Monitor Private Link Services (AMPLS) を使用していない場合は、Application Insightsに次のファイアウォールルールを追加する必要があります。送信先のFQDNの値については、AzureプライベートエンドポイントのDNS設定に関するドキュメントおよびAzure Monitorで使用するIPアドレスを参照してください。
名前
ソースの種類
アップデート元
プロトコル:ポート
対象の完全修飾ドメイン名
Application Insights
IPアドレス
<scanner-subnet><blob-listener-subnet><post-scan-action-tag-subnet>
https:443
<region>.in.applicationinsights.azure.com, <region>.livediagnostics.monitor.azure.com
注意
注意
ネットワークの問題が発生した場合のトラブルシューティングに役立てるため、ファイアウォールログを有効にすることを強くお勧めします。ファイアウォールの設定については、Azure Firewallのログとメトリックを監視するのドキュメントを参照してください。
注意
注意
Azure Stackのすべてのサブネットが相互に通信できることを確認することが重要です。

まとめ 親トピック

リソースの保護を強化するために、いくつかのセキュリティ対策を実施しています。サービスアカウントとService Busのパブリックエンドポイントを閉鎖し、プライベートネットワークからのアクセスのみを許可するプライベートエンドポイントを作成しました。 Function Appについては、すべての受信トラフィックが閉じられ、送信トラフィックに対するアウトバウンド統合が有効になりました。さらに、Application Insightsについては、 Azure Monitor Private Link Scopes (AMPLS) と統合して、許可されたソースからのみログを取り込み、クエリを実行できるようにしました。