仮想ネットワーク (VNet) からの Azure Cosmos DB へのアクセスを構成する
適用対象: NoSQL MongoDB Cassandra Gremlin Table
Azure Cosmos DB アカウントは、仮想ネットワーク (VNET) の特定のサブネットからのアクセスのみを許可するように構成することができます。 Azure Cosmos DB へのアクセスを制御するには、仮想ネットワーク内のサブネットのサービス エンドポイントを有効にします。 そのサブネットからのトラフィックは、仮想ネットワークとサブネットの ID と共に Azure Cosmos DB に送信されます。 Azure Cosmos DB サービス エンドポイントが有効になると、Azure Cosmos DB アカウントにサブネットを追加することで、サブネットへのアクセスを制限できます。
既定で、有効な承認トークンと共に要求が送信される場合、任意のソースから Azure Cosmos DB アカウントにアクセスできます。 VNet 内に 1 つまたは複数のサブネットを追加した場合、それらのサブネットから送信された要求のみが有効な応答を受け取ります。 その他のソースから送信された要求は、403 (禁止) 応答を受け取ります。
Azure Cosmos DB アカウントを構成して、Azure 仮想ネットワークの特定のサブネットのみからアクセスを許可するよう構成できます。 Azure Cosmos DB アカウントへの仮想ネットワーク内のサブネットからの接続をアクセス制限するには、次を実行します。
Azure Cosmos DB のサービス エンドポイントが、Azure Cosmos DB にサブネットと仮想ネットワークの ID を送信できるようにします。
Azure Cosmos DB アカウントにアクセスできるソースとしてサブネットを指定する規則を Azure Cosmos DB アカウントに追加します。
Note
ご使用の Azure Cosmos DB アカウント用のサービス エンドポイントがサブネット上で有効になると、Azure Cosmos DB に到達するトラフィックのソースが、パブリック IP から、仮想ネットワークとサブネットに切り替わります。 このトラフィックの切り替えは、このサブネットからアクセスされるすべての Azure Cosmos DB アカウントに適用されます。 このサブネットを許可する IP ベースのファイアウォールがご使用の Azure Cosmos DB アカウントにある場合、サービスで有効なサブネットからの要求は IP ファイアウォール規則と一致しなくなり、要求は拒否されるようになります。
詳細については、この記事の「IP ファイアウォール規則から VNET ACL への移行」セクションの手順を参照してください。
以下のセクションでは、Azure Cosmos DB アカウント用の仮想ネットワーク サービス エンドポイントを構成する方法について説明します。
Azure portal を使用してサービス エンドポイントを構成する
既存の Azure 仮想ネットワークとサブネット用のサービス エンドポイントを構成する
[すべてのリソース] ウィンドウで、セキュリティで保護する Azure Cosmos DB アカウントを見つけます。
[設定] メニューから [ネットワーク] を選択します。
[選択されたネットワーク] からのアクセスを許可するように選択します。
既存の仮想ネットワークにあるサブネットへのアクセスを許可するには、 [仮想ネットワーク] で [Add existing Azure virtual network](既存の Azure 仮想ネットワークを追加) を選択します。
追加する Azure 仮想ネットワークのサブスクリプションを選択します。 Azure Cosmos DB アカウントへのアクセスを提供する Azure 仮想ネットワークとサブネットを選択します。 次に、 [有効化] を選択して、サービス エンドポイントを持つ選択したネットワークを "Microsoft.AzureCosmosDB" に対して有効にします。 完了したら、 [追加] を選択します。
Note
VNET サービスのエンドポイントを設定したときは、効果が行き渡るのに 15 分程度かかる場合があり、この間エンドポイントの挙動が不安定になることがあります。
仮想ネットワークから Azure Cosmos DB アカウントへのアクセスを有効にすると、この選択したサブネットからのトラフィックのみが許可されます。 追加した仮想ネットワークとサブネットは、次のスクリーン ショットのように表示されます。
Note
仮想ネットワーク サービス エンドポイントを有効にするには、次のサブスクリプションのアクセス許可が必要です。
- 仮想ネットワークのサブスクリプション:ネットワーク共同作成者
- Azure Cosmos DB アカウントのサブスクリプション:DocumentDB アカウント共同作成者
- 仮想ネットワークと Azure Cosmos DB アカウントが異なるサブスクリプションにある場合は、仮想ネットワークを持つサブスクリプションにも
Microsoft.DocumentDB
リソース プロバイダーが登録されていることを確認します。 リソース プロバイダーを登録するには、「Azure リソース プロバイダーと種類」を参照してください。
リソース プロバイダーにサブスクリプションを登録するための手順を次に示します。
新しい Azure 仮想ネットワークとサブネット用のサービス エンドポイントを構成する
[すべてのリソース] ウィンドウで、セキュリティで保護する Azure Cosmos DB アカウントを見つけます。
設定メニューの [ネットワーク] を選択し、[選択されたネットワーク] からアクセスを許可するように選択します。
新しい Azure 仮想ネットワークへのアクセスを許可するには、 [仮想ネットワーク] で [新しい仮想ネットワークを追加] を選択します。
新しい仮想ネットワークを作成するために必要な詳細を指定し、 [作成] を選択します。 "Microsoft.AzureCosmosDB" 用のサービス エンドポイントが有効になっているサブネットが作成されます。
ご使用の Azure Cosmos DB アカウントが Azure AI Search のような他の Azure サービスによって使用されていたり、Stream Analytics または Power BI からアクセスされたりする場合は、[グローバル Azure データセンター内からの接続を受け入れる] をオンにしてアクセスを許可します。
ポータルから Azure Cosmos DB のメトリックにアクセスできるようにするには、 [Azure Portal からのアクセスを許可する] オプションを有効にする必要があります。 これらのオプションの詳細については、IP ファイアウォールの構成に関する記事を参照してください。 アクセスを有効にしたら、 [保存] を選択して、設定を保存します。
仮想ネットワークまたはサブネットを削除する
[すべてのリソース] ペインで、サービス エンドポイントを割り当てた Azure Cosmos DB アカウントを見つけます。
[設定] メニューから [ネットワーク] を選択します。
仮想ネットワークまたはサブネットの横にある [...] を選択し、 [削除] を選択し、仮想ネットワークまたはサブネットのルールを削除します。
[保存] を選択して変更を適用します。
Azure PowerShell を使用してサービス エンドポイントを構成する
Note
Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。
Azure PowerShell を使用して、Azure Cosmos DB アカウントへのサービス エンドポイントを構成するには、次の手順を実行します。
Azure PowerShell をインストールして Azure にサインインします。
仮想ネットワークにある、既存のサブネット用のサービス エンドポイントを有効にします。
$resourceGroupName = "<Resource group name>" $vnetName = "<Virtual network name>" $subnetName = "<Subnet name>" $subnetPrefix = "<Subnet address range>" $serviceEndpoint = "Microsoft.AzureCosmosDB" Get-AzVirtualNetwork ` -ResourceGroupName $resourceGroupName ` -Name $vnetName | Set-AzVirtualNetworkSubnetConfig ` -Name $subnetName ` -AddressPrefix $subnetPrefix ` -ServiceEndpoint $serviceEndpoint | Set-AzVirtualNetwork
Note
PowerShell または Azure CLI を使用している場合、追加の必要があるもののみではなく、IP フィルターとの仮想ネットワーク ACL の完全な一覧をパラメーターに指定するようにしてください。
仮想ネットワークの情報を取得します。
$vnet = Get-AzVirtualNetwork ` -ResourceGroupName $resourceGroupName ` -Name $vnetName $subnetId = $vnet.Id + "/subnets/" + $subnetName
Azure Cosmos DB 仮想ネットワーク規則を準備する
$vnetRule = New-AzCosmosDBVirtualNetworkRule ` -Id $subnetId
仮想ネットワーク エンドポイントの新しい構成を使用して、Azure Cosmos DB アカウントのプロパティを更新します。
$accountName = "<Azure Cosmos DB account name>" Update-AzCosmosDBAccount ` -ResourceGroupName $resourceGroupName ` -Name $accountName ` -EnableVirtualNetwork $true ` -VirtualNetworkRuleObject @($vnetRule)
次のコマンドを実行して、Azure Cosmos DB アカウントが、前の手順で構成した仮想ネットワーク サービス エンドポイントで更新されていることを確認します。
$account = Get-AzCosmosDBAccount ` -ResourceGroupName $resourceGroupName ` -Name $accountName $account.IsVirtualNetworkFilterEnabled $account.VirtualNetworkRules
Azure CLI を使用してサービス エンドポイントを構成する
Azure Cosmos DB アカウントは、サブネットが既に構成されている場合に、作成または後で更新されたときにサービス エンドポイント用に構成できます。 サブネットがまだ構成されていない Azure Cosmos DB アカウントでサービス エンドポイントを有効にすることもできます。 その後、サブネットが構成された時点で、サービス エンドポイントの動作が開始されます。 Azure Cosmos DB アカウントと仮想ネットワーク リソースの両方にアクセスできない管理者は、この柔軟性により、構成を互いに独立させることができます。
新しい Azure Cosmos DB アカウントを作成し、新しい仮想ネットワークのバック エンド サブネットに接続する
この例では、仮想ネットワークとサブネットが作成され、両方のサービス エンドポイントが作成時に有効になります。
# Create an Azure Cosmos DB Account with a service endpoint connected to a backend subnet
# Resource group and Azure Cosmos DB account variables
resourceGroupName='MyResourceGroup'
location='West US 2'
accountName='mycosmosaccount'
# Variables for a new Virtual Network with two subnets
vnetName='myVnet'
frontEnd='FrontEnd'
backEnd='BackEnd'
# Create a resource group
az group create -n $resourceGroupName -l $location
# Create a virtual network with a front-end subnet
az network vnet create \
-n $vnetName \
-g $resourceGroupName \
--address-prefix 10.0.0.0/16 \
--subnet-name $frontEnd \
--subnet-prefix 10.0.1.0/24
# Create a back-end subnet with service endpoints enabled for Azure Cosmos DB
az network vnet subnet create \
-n $backEnd \
-g $resourceGroupName \
--address-prefix 10.0.2.0/24 \
--vnet-name $vnetName \
--service-endpoints Microsoft.AzureCosmosDB
svcEndpoint=$(az network vnet subnet show -g $resourceGroupName -n $backEnd --vnet-name $vnetName --query 'id' -o tsv)
# Create an Azure Cosmos DB account with default values and service endpoints
az cosmosdb create \
-n $accountName \
-g $resourceGroupName \
--enable-virtual-network true \
--virtual-network-rules $svcEndpoint
Azure Cosmos DB アカウントをバック エンドのサブネットに個別に接続して構成する
このサンプルの目的は、既存の、または新しい仮想ネットワークに Azure Cosmos DB アカウントを接続する方法を示すことです。 この例では、サービス エンドポイント用のサブネットがまだ構成されていません。 サービス エンドポイントは、--ignore-missing-vnet-service-endpoint
パラメーターを使用して構成します。 これにより、仮想ネットワークのサブネットへの構成が完了する前に、Azure Cosmos DB アカウントの構成をエラーなしで完了することができます。 サブネットの構成が完了すると、構成されたサブネットを介して Azure Cosmos DB アカウントにアクセスできるようになります。
# Create an Azure Cosmos DB Account with a service endpoint connected to a backend subnet
# that is not yet enabled for service endpoints.
# Resource group and Azure Cosmos DB account variables
resourceGroupName='MyResourceGroup'
location='West US 2'
accountName='mycosmosaccount'
# Variables for a new Virtual Network with two subnets
vnetName='myVnet'
frontEnd='FrontEnd'
backEnd='BackEnd'
# Create a resource group
az group create -n $resourceGroupName -l $location
# Create a virtual network with a front-end subnet
az network vnet create \
-n $vnetName \
-g $resourceGroupName \
--address-prefix 10.0.0.0/16 \
--subnet-name $frontEnd \
--subnet-prefix 10.0.1.0/24
# Create a back-end subnet but without configuring service endpoints (--service-endpoints Microsoft.AzureCosmosDB)
az network vnet subnet create \
-n $backEnd \
-g $resourceGroupName \
--address-prefix 10.0.2.0/24 \
--vnet-name $vnetName
svcEndpoint=$(az network vnet subnet show -g $resourceGroupName -n $backEnd --vnet-name $vnetName --query 'id' -o tsv)
# Create an Azure Cosmos DB account with default values
az cosmosdb create -n $accountName -g $resourceGroupName
# Add the virtual network rule but ignore the missing service endpoint on the subnet
az cosmosdb network-rule add \
-n $accountName \
-g $resourceGroupName \
--virtual-network $vnetName \
--subnet svcEndpoint \
--ignore-missing-vnet-service-endpoint true
read -p'Press any key to now configure the subnet for service endpoints'
az network vnet subnet update \
-n $backEnd \
-g $resourceGroupName \
--vnet-name $vnetName \
--service-endpoints Microsoft.AzureCosmosDB
直接モードを使用する場合のポートの範囲
ダイレクト モード接続を介して Azure Cosmos DB アカウントでサービス エンドポイントを使用している場合は、10000 から 20000 までの TCP ポート範囲が開いていることを確保する必要があります。
IP ファイアウォール規則から仮想ネットワーク ACL へ移行する
Azure Cosmos DB アカウントを移行するには、IP ファイアウォール規則を使用することから、仮想ネットワーク サービス エンドポイントを使用することまで、以下の手順に従います。
サブネットのサービス エンドポイントを使用するように Azure Cosmos DB アカウントが構成されると、そのサブネットからの各要求は、それまでとは異なる方法で Azure Cosmos DB に送信されます。 要求は、送信元のパブリック IP アドレスではなく、仮想ネットワークとサブネットのソース情報と共に送信されます。 これらの要求は、Azure Cosmos DB アカウントで構成された IP フィルターと一致しなくなります。それが理由で、ダウンタイムを回避するために以下の手順が必要です。
仮想ネットワークとサブネットの情報を取得します。
$resourceGroupName = "myResourceGroup" $accountName = "mycosmosaccount" $vnetName = "myVnet" $subnetName = "mySubnet" $vnet = Get-AzVirtualNetwork ` -ResourceGroupName $resourceGroupName ` -Name $vnetName $subnetId = $vnet.Id + "/subnets/" + $subnetName
Azure Cosmos DB アカウントの新しい仮想ネットワーク規則オブジェクトを準備します。
$vnetRule = New-AzCosmosDBVirtualNetworkRule ` -Id $subnetId
Azure Cosmos DB アカウントを更新して、サブネットからのサービス エンドポイント アクセスを有効にします。
Update-AzCosmosDBAccount ` -ResourceGroupName $resourceGroupName ` -Name $accountName ` -EnableVirtualNetwork $true ` -VirtualNetworkRuleObject @($vnetRule)
サブネットからアクセスされるすべての Azure Cosmos DB アカウントについて、前の手順を繰り返します。
この記事の「仮想ネットワークにある、既存のサブネット用のサービス エンドポイントを有効にします」セクションで示した手順に従って、仮想ネットワークとサブネットで Azure Cosmos DB サービス エンドポイントを有効にします。
Azure Cosmos DB アカウントのファイアウォール規則から、サブネットの IP ファイアウォール規則を削除します。
よく寄せられる質問
仮想ネットワークからのアクセスを構成する場合についてよく寄せられる質問を次に示します。
Notebook と Mongo/Cassandra シェルは、現在、Virtual Network が有効になっているアカウントと互換性がありますか。
現在、Azure Cosmos DB Data Explorer での Mongo シェルと Cassandra シェル統合は、VNET アクセスではサポートされていません。 この統合は現在開発が進められています。
Azure Cosmos DB アカウントに対して仮想ネットワーク サービス エンドポイントと IP アクセス制御ポリシーの両方を指定できますか。
Azure Cosmos DB アカウントに対して、仮想ネットワーク サービス エンドポイントと IP アクセス制御ポリシー (ファイアウォールとも呼ばれます) の両方を有効にすることができます。 この 2 つの機能は補完的であり、組み合わせることで Azure Cosmos DB アカウントの分離とセキュリティを達成できます。 IP ファイアウォールを使用すると、確実に静的 IP からアカウントにアクセスできます。
仮想ネットワーク内のサブネットへのアクセスを制限するにはどうすればよいですか。
サブネットから Azure Cosmos DB アカウントへのアクセスを制限するには、2 つの手順が必要です。 まず、サブネットからのトラフィックで、そのサブネットおよび仮想ネットワーク ID を Azure Cosmos DB に伝達できるようにします。 トラフィックの ID を変更するには、そのサブネットで Azure Cosmos DB のサービス エンドポイントを有効にします。 次に、Azure Cosmos DB アカウントにアクセスできるソースとしてサブネットを指定する規則を Azure Cosmos アカウントに追加します。
仮想ネットワーク ACL と IP ファイアウォールは要求または接続を拒否しますか。
IP ファイアウォールまたは仮想ネットワークのアクセス規則が追加されると、許可されたソースからの要求のみが有効な応答を受け取ります。 他の要求は 403 (禁止) で拒否されます。 Azure Cosmos DB アカウントのファイアウォールを接続レベルのファイアウォールと区別することが重要です。 ソースは引き続きサービスに接続でき、接続自体は拒否されません。
サブネット上の Azure Cosmos DB に対してサービス エンドポイントを有効にすると、要求がブロックされ始めました。 なぜでしょうか?
Azure Cosmos DB 用のサービス エンドポイントがサブネット上で有効になると、アカウントに到達するトラフィックのソースが、パブリック IP から、仮想ネットワークとサブネットに切り替わります。 IP ベースのファイアウォールのみが Azure Cosmos DB アカウントに設定されている場合、サービスで有効なサブネットからのトラフィックは IP ファイアウォール規則と一致しなくなるため、拒否されるようになります。 IP ベースのファイアウォールから仮想ネットワーク ベースのアクセス制御にシームレスに移行するための手順を実行してください。
Azure Cosmos DB アカウントと VNET サービス エンドポイントの組み合わせには、追加の Azure RBAC (ロールベースのアクセス制御) アクセス許可が必要ですか。
VNet サービス エンドポイントを Azure Cosmos DB アカウントに追加した後、アカウント設定を変更する場合、自分の Azure Cosmos DB アカウントで構成されているすべての VNET について、Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action
アクションの権限が必要になります。 このアクセス許可が必要になるのは、あらゆるプロパティを評価する前に、リソース (データベースや仮想ネットワーク リソースなど) へのアクセス権限が認証プロセスで検証されるためです。
この認証では、ユーザーが Azure CLI を使用して VNET ACL を指定しない場合でも、VNet リソース アクションのアクセス許可が検証されます。 現在のところ、Azure Cosmos DB アカウントのコントロール プレーンでは、Azure Cosmos DB アカウントの完全な状態を設定できます。 コントロール プレーン呼び出しのパラメーターの 1 つは virtualNetworkRules
です。 このパラメーターが指定されていない場合、Azure CLI では、virtualNetworkRules
を取得する目的でデータベースの取得呼び出しを行い、更新呼び出しでこの値を使用します。
ピアリングされた仮想ネットワークも Azure Cosmos DB アカウントにアクセスできますか。
Azure Cosmos DB アカウントに追加された仮想ネットワークとそのサブネットのみがアクセスできます。 ピアリングされた仮想ネットワーク内のサブネットをアカウントに追加するまで、ピアリングされた VNet はアカウントにアクセスできません。
1 つの Azure Cosmos DB アカウントにアクセスできるサブネットの最大数はいくつですか。
現在、Azure Cosmos DB アカウントでは最大 256 のサブネットが許可されています。
VPN と Express Route からのアクセスを有効にすることはできますか。
オンプレミスから Express Route 経由で Azure Cosmos DB アカウントにアクセスするには、Microsoft ピアリングを有効にする必要があります。 IP ファイアウォールまたは仮想ネットワーク アクセス規則を設定すると、Azure Cosmos DB アカウントの IP ファイアウォールに Microsoft ピアリングに使用するパブリック IP アドレスを追加して、オンプレミス サービスが Azure Cosmos DB アカウントにアクセスできるようにすることができます。
ネットワーク セキュリティ グループ (NSG) の規則を更新する必要はありますか。
NSG 規則は、仮想ネットワークを使用したサブネットとの接続を制限するために使用されます。 Azure Cosmos DB のサービス エンドポイントをサブネットに追加する場合、Azure Cosmos DB アカウントのために NSG で送信接続を開く必要はありません。
サービス エンドポイントはすべての VNet に使用できますか。
いいえ。サービス エンドポイントを有効にすることができるのは Azure Resource Manager 仮想ネットワークのみです。 クラシック仮想ネットワークはサービス エンドポイントをサポートしていません。
どのような場合に、Azure Cosmos DB アカウントでグローバル Azure データセンター内からの接続を受け入れる必要がありますか?
この設定を有効にする必要があるのは、Azure Cosmos DB アカウントを任意の Azure リージョン内の任意の Azure サービスにアクセス可能にしたい場合のみです。 Azure Data Factory や Azure AI Search などの他の Azure ファースト パーティ サービスでは、Azure Cosmos DB アカウントを含むデータ ソースへのセキュアなアクセス方法に関するドキュメントが提供されています。次に例を示します。
次のステップ
- Azure Cosmos DB 用のファイアウォールの構成については、ファイアウォールのサポートに関する記事を参照してください。