Azure Cosmos DB で IP ファイアウォールを構成する
適用対象: NoSQL MongoDB Cassandra Gremlin Table
アカウントに保存されているデータを保護するために、Azure Cosmos DB では、強固なハッシュベースのメッセージ認証コード (HMAC) を利用したシークレット ベースの認可モデルをサポートしています。 さらに、Azure Cosmos DB では、受信ファイアウォールをサポートするための IP ベースのアクセス制御に対応しています。 このモデルは、従来型データベース システムのファイアウォール規則と同様であり、アカウントのセキュリティ水準がさらに高くなります。 ファイアウォールを利用して、承認されているコンピューターのグループやクラウド サービスからのみアクセスできるように、Azure Cosmos DB アカウントを構成することができます。 ただし、承認されているコンピューターのグループやサービスから Azure Cosmos DB データベースに格納されているデータにアクセスするためには、呼び出し側が有効な承認トークンを提示する必要がある点は変わりません。
IP アクセス制御
既定では、有効な承認トークンと共に要求が送信されれば、Azure Cosmos DB アカウントにインターネットからアクセスすることができます。 IP ポリシー ベースのアクセス制御を構成するためには、特定の Azure Cosmos DB アカウントにアクセスするクライアント IP の許可リストとして追加する一連の IP アドレスまたは IP アドレス範囲を CIDR (Classless Inter-Domain Routing) 形式でユーザーが指定する必要があります。 この構成を適用すると、この許可リストにないマシンを発信元とするすべての要求で、403 (禁止) 応答が受信されます。 IP ファイアウォールを使用している場合は、Azure portal からアカウントへのアクセスを許可することをお勧めします。 データ エクスプローラーの使用を許可するため、また、Azure portal に表示されるアカウントのメトリックを取得するために、アクセスが必要になります。 データ エクスプローラーを使用する場合は、Azure portal にアカウントへのアクセスを許可するだけでなく、ファイアウォール規則に現在の IP アドレスを追加するようファイアウォール設定を更新する必要もあります。 ファイアウォールの変更が反映されるまでに最大 15 分かかる可能性があり、この期間中はファイアウォールの動作が不安定になることがあります。
IP ベースのファイアウォールと、サブネットと仮想ネットワークのアクセス制御を組み合わせることができます。 これらを組み合わせることで、パブリック IP を保持する任意のソースへのアクセスや、仮想ネットワーク内の特定のサブネットからのアクセスを制限できます。 サブネットと仮想ネットワークベースのアクセス制御に関する詳細については、仮想ネットワークから Azure Cosmos DB リソースへのアクセスに関するページを参照してください。
端的に言えば、Azure Cosmos DB アカウントにアクセスするには、常に認証トークンが必要になります。 IP ファイアウォールと仮想ネットワーク アクセス制御リスト (ACL) が設定されていない場合は、認可トークンを使用して Azure Cosmos DB アカウントにアクセスできます。 IP ファイアウォールまたは仮想ネットワーク ACL、あるいはその両方が Azure Cosmos DB アカウントに設定された後は、指定したソースから送信された要求 (かつ認可トークンを使用したもの) のみに有効な応答が返されます。
ご利用の Azure Cosmos DB アカウントに格納されたデータは、IP ファイアウォールを使用することによりセキュリティで保護することができます。 Azure Cosmos DB では、受信ファイアウォールをサポートするために IP ベースのアクセス制御に対応しています。 Azure Cosmos DB アカウント上で IP ファイアウォールを設定するには、次の方法のいずれかを使用できます。
- Azure portal から
- Azure Resource Manager テンプレートを使用した宣言による
- Azure CLI または Azure PowerShell を介してプログラムで、ipRangeFilter プロパティを更新する。
Azure portal を使用して IP ファイアウォールを構成する
Azure portal で IP アクセス制御ポリシーを構成するには、Azure Cosmos DB アカウント ページに移動し、ナビゲーション メニューで [ネットワーク] を選択します。 [許可するアクセス元] の値を [選択されたネットワーク] に変更し、 [保存] を選択します。 まだ IP アドレスを追加していない場合は、チェックボックスをオンにして、すべての VNet と IP がブロックされることを確認する必要があります。 パブリック アクセス ネットワーク設定を無効にするか、すべてのネットワークに対して許可することで変更すると、以前に設定したファイアウォール IP は失われます。
IP アクセス制御を有効にすると、Azure portal で IP アドレス、IP アドレスの範囲、およびスイッチを指定する機能を使用できるようになります。 スイッチを使用して、他の Azure サービスと Azure portal にアクセスすることができます。 以下のセクションでは、これらのスイッチの詳細について説明します。
注意
ご利用の Azure Cosmos DB アカウントの IP アクセス制御ポリシーを有効にすると、IP アドレス範囲の許可リストに入っていないマシンからご利用の Azure Cosmos DB アカウントへの要求はすべてブロックされます。 アクセス制御の整合性を確保するために、ポータルから Azure Cosmos DB リソースを参照することもブロックされます。
Azure portal からの要求を許可する
IP アクセス制御ポリシーをプログラムで有効にする場合、一部のポータル機能を使用し続けるには、Azure portal サービスの IP アドレスを ipRangeFilter プロパティに追加しなければならない場合があります。
このオプションを有効にする必要のがるポータル シナリオは次のとおりです。
- 特に MongoDB 用 API または Apache Cassandra 用 API の場合、Data Explorer または <cosmos.azure.com> を使用してアカウントにアクセスします
- すべての API で、Azure portal 内で次の Azure Cosmos DB ブレードを使用します。
- コレクションを閲覧する
- Power BI
- Azure Synapse
次のスクリーン ショットに示すように、[Azure portal ミドルウェア IP] オプションを選択することで、Azure portal へのアクセス要求を有効にできます。
次のスクリーンショットに示すように、Azure portal ミドルウェア IP アドレスが別の一覧に追加されます。 [保存] をクリックして、これらのアドレスをデータベース アカウントに追加します。 ミドルウェア IP アドレスの詳細については、この記事で後述します。
Azure portal ミドルウェア IP アドレスを削除するには、[Azure portal ミドルウェア IP の削除] オプションをクリックし、[保存] を選択します。
Azure portal ミドルウェア IP アドレス
Azure portal ミドルウェア IP アドレスを以下に示します。 IP アドレスの中には、特定のデータベース アカウント API にのみ必要なものがあります。 上記のようにポータルでミドルウェア IP アドレスを追加すると、アカウントに必要な IP アドレスのみが追加されます。
次に例を示します。
NoSQL 用 API アカウントの場合、[すべて] カテゴリの IP アドレスが追加されます。
MongoDB 用 API アカウントの場合、[すべて] および [MongoDB のみ] カテゴリの IP アドレスが追加されます。
Azure Public
データベース アカウント API | IP アドレス |
---|---|
すべて | 13.91.105.215、4.210.172.107、13.88.56.148、40.91.218.243 |
MongoDB のみ | 20.245.81.54、40.118.23.126、40.80.152.199、13.95.130.121 |
Apache Cassandra のみ | 40.113.96.14、104.42.11.145、137.117.230.240、168.61.72.237 |
Azure 中国
データベース アカウント API | IP アドレス |
---|---|
すべて | 163.228.137.6、143.64.170.142 |
MongoDB のみ | 52.131.240.99、143.64.61.130 |
Apache Cassandra のみ | 40.73.99.146、143.64.62.47 |
Azure US Government
データベース アカウント API | IP アドレス |
---|---|
すべて | 52.247.163.6、52.244.134.181 |
MongoDB のみ | 52.244.176.112、52.247.148.42 |
Apache Cassandra のみ | 52.244.50.101、52.227.165.24 |
レガシ ミドルウェア IP アドレス
Cosmos DB ポータル サービスは最近、新しいミドルウェア IP アドレスを必要とする新しいインフラストラクチャに移行しました。 移行が完了したことで、古いインフラストラクチャで使用されているレガシ IP アドレスは安全に削除できます。 アカウントでファイアウォール規則にレガシ ミドルウェア IP アドレスが存在する場合は、[Azure portal レガシ ミドルウェア IP の削除] オプションが表示されます。 そのオプションを選択し、[保存] を選択して、レガシ IP アドレスを削除します。
レガシ IP アドレスはクラウド環境によって異なります。
Azure 環境 | IP アドレス |
---|---|
Azure Public | 104.42.195.92, 40.76.54.131, 52.176.6.30, 52.169.50.45, 52.187.184.26 |
Azure 中国 | 139.217.8.252、52.176.6.30、52.169.50.45、52.187.184.26 |
Azure 米国政府機関 | 52.244.48.71、52.176.6.30, 52.169.50.45、52.187.184.26 |
Note
データ エクスプローラーから Azure Cosmos DB アカウントに接続する際に問題が発生している場合は、「データ エクスプローラーのトラブルシューティング ガイド」を参照してください。
世界中の Azure データ センターまたは Azure 内の他のソースからの要求を許可する
Azure Stream Analytics や Azure Functions などの静的 IP を提供しないサービスから Azure Cosmos DB アカウントにアクセスする場合も、IP ファイアウォールを使用してアクセスを制限できます。 次のスクリーン ショットに示すように、 [Accept connections from within Azure datacenters](Azure データセンター内からの接続を受け入れる) を選択することで、Azure 内の他のソースからのアクセスを有効にできます。
このオプションを有効にすると、IP アドレス 0.0.0.0
が、許可される IP アドレスの一覧に追加されます。 0.0.0.0
の IP アドレスにより、要求が、Azure データセンターの IP 範囲からご利用の Azure Cosmos DB アカウントに制限されます。 この設定では、その他の IP 範囲からご利用の Azure Cosmos DB アカウントへのアクセスは許可されません。
Note
publicNetworkAccess を Disabled に設定すると、この [Azure データセンター内からの接続を受け入れる] オプションよりも優先されます。 「アカウントの作成中のパブリック ネットワーク アクセスのブロック」を参照してください
Note
このオプションでは、Azure にデプロイされた他のお客様のサブスクリプションからの要求を含む、Azure からのすべての要求を許可するようにファイアウォールが構成されます。 このオプションで許可される IP のリストは非常に範囲が広くなるので、ファイアウォール ポリシーの有効性が制限されます。 このオプションは、ご利用の要求が静的 IP または仮想ネットワーク内のサブネットから発生しない場合にのみ使用してください。 このオプションを選択すると Azure portal からのアクセスは自動的に許可されるようになります。これは、Azure portal が Azure にデプロイされているからです。
現在ご利用の IP からの要求
開発が簡単になるように、Azure portal ではクライアント マシンの IP を識別して許可リストに追加することができます。 マシンを実行しているアプリから Azure Cosmos DB アカウントにアクセスすることができます。
ポータルでは自動的にクライアントの IP アドレスが検出されます。 ご利用のマシンのクライアント IP アドレスである場合や、ご利用のネットワーク ゲートウェイの IP アドレスである場合があります。 運用環境にご利用のワークロードを移行する前に、この IP アドレスを必ず削除してください。
現在の IP を IP の一覧に追加するには、[現在の IP を追加する] を選択します。 その後、 [保存] を選びます。
クラウド サービスからの要求
Azure では、Azure Cosmos DB を使用して中間層のサービス ロジックをホストする手段としてクラウド サービスがよく利用されます。 クラウド サービスからご利用の Azure Cosmos DB アカウントにアクセスできるようにするには、IP アクセス制御ポリシーを構成することで、その Azure Cosmos DB アカウントに関連付けられている IP アドレスの許可リストにクラウド サービスのパブリック IP アドレスを追加する必要があります。 これにより、クラウド サービスのすべてのロール インスタンスからその Azure Cosmos DB アカウントに確実にアクセスできるようになります。
クラウド サービスの IP アドレスは Azure Portal で確認できます。次のスクリーンショットをご覧ください。
(複数の) ロール インスタンスを追加してご利用のクラウド サービスをスケールアウトした場合、それらのインスタンスは、同じクラウド サービスに属すことになるので、Azure Cosmos DB アカウントへのアクセス権が自動的に割り当てられます。
仮想マシンからの要求
Azure Cosmos DB を使用する中間層サービスのホスティングには、仮想マシンまたは仮想マシン スケール セットを使用することもできます。 仮想マシンからのアクセスを許可するようにご利用の Azure Cosmos DB アカウントを構成するには、IP アクセス制御ポリシーを構成することで、仮想マシンや仮想マシン スケール セットのパブリック IP アドレスを、ご利用の Azure Cosmos DB アカウントに許可されている IP アドレスの 1 つとして構成する必要があります。
仮想マシンの IP アドレスは Azure portal で取得できます。次のスクリーンショットを参照してください。
このグループに仮想マシン インスタンスを追加した場合、それらのインスタンスにも自動的にご利用の Azure Cosmos DB アカウントへのアクセス権が割り当てられます。
インターネットからの要求
インターネット上のコンピューターからご利用の Azure Cosmos DB アカウントにアクセスするときは、そのコンピューターのクライアント IP アドレスまたは IP アドレス範囲を、ご利用のアカウントの IP アドレスの許可リストに追加する必要があります。
ファイアウォールにアウトバウンド規則を追加する
ファイアウォール設定に追加する送信 IP 範囲の現在の一覧にアクセスするには、Azure IP 範囲とサービス タグのダウンロードに関するページを参照してください。
この一覧を自動化するには、「Service Tag Discovery API を使用する」を参照してください。
Resource Manager テンプレートを使用して IP ファイアウォールを構成する
ご利用の Azure Cosmos DB アカウントへのアクセス制御を構成するには、Resource Manager テンプレートで、許可される IP 範囲の配列を使用して ipRules プロパティを指定します。 既にデプロイされている Azure Cosmos DB アカウントに IP ファイアウォールを構成する場合には、配列 locations
が現在デプロイされているものと一致していることを確認します。 locations
配列とそれ以外のプロパティを同時に変更することはできません。 Azure Cosmos DB 用の Azure Resource Manager テンプレートの詳細とサンプルについては、「Azure Cosmos DB の Azure Resource Manager テンプレート」を参照してください
重要
ipRules プロパティは、API バージョン 2020-04-01 で導入されました。 以前のバージョンでは、コンマ区切りの IP アドレスのリストである ipRangeFilter プロパティが公開されていました。
この例は、API バージョン 2020-04-01 以降で ipRules プロパティを公開する方法を示しています。
{
"type": "Microsoft.DocumentDB/databaseAccounts",
"name": "[variables('accountName')]",
"apiVersion": "2020-04-01",
"location": "[parameters('location')]",
"kind": "GlobalDocumentDB",
"properties": {
"consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
"locations": "[variables('locations')]",
"databaseAccountOfferType": "Standard",
"enableAutomaticFailover": "[parameters('automaticFailover')]",
"ipRules": [
{
"ipAddressOrRange": "13.91.105.215"
},
{
"ipAddressOrRange": "4.210.172.107"
},
{
"ipAddressOrRange": "13.88.56.148"
},
{
"ipAddressOrRange": "40.91.218.243"
}
]
}
}
2020-04-01 より前の API バージョンでの同じ例を次に示します。
{
"type": "Microsoft.DocumentDB/databaseAccounts",
"name": "[variables('accountName')]",
"apiVersion": "2019-08-01",
"location": "[parameters('location')]",
"kind": "GlobalDocumentDB",
"properties": {
"consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
"locations": "[variables('locations')]",
"databaseAccountOfferType": "Standard",
"enableAutomaticFailover": "[parameters('automaticFailover')]",
"ipRangeFilter":"13.91.105.215,4.210.172.107,13.88.56.148,40.91.218.243"
}
}
Azure CLI を使用して IP アクセス制御ポリシーを構成する
次のコマンドでは、IP アクセス制御を使用して Azure Cosmos DB アカウントを作成する方法が示されています。
# Create an Azure Cosmos DB account with default values and IP Firewall enabled
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
ipRangeFilter='192.168.221.17,183.240.196.255,40.76.54.131'
# Make sure there are no spaces in the comma-delimited list of IP addresses or CIDR ranges.
az cosmosdb create \
-n $accountName \
-g $resourceGroupName \
--locations regionName='West US 2' failoverPriority=0 isZoneRedundant=False \
--locations regionName='East US 2' failoverPriority=1 isZoneRedundant=False \
--ip-range-filter $ipRangeFilter
PowerShell を使用して IP アクセス制御ポリシーを構成する
次のスクリプトでは、IP アクセス制御を使用して Azure Cosmos DB アカウントを作成する方法が示されています。
# Create an Azure Cosmos DB account with default values and IP Firewall enabled
$resourceGroupName = "myResourceGroup"
$accountName = "mycosmosaccount"
$ipRules = @("192.168.221.17","183.240.196.255","40.76.54.131")
$locations = @(
@{ "locationName"="West US 2"; "failoverPriority"=0; "isZoneRedundant"=False },
@{ "locationName"="East US 2"; "failoverPriority"=1, "isZoneRedundant"=False }
)
# Make sure there are no spaces in the comma-delimited list of IP addresses or CIDR ranges.
$CosmosDBProperties = @{
"databaseAccountOfferType"="Standard";
"locations"=$locations;
"ipRules"=$ipRules
}
New-AzResource -ResourceType "Microsoft.DocumentDb/databaseAccounts" `
-ApiVersion "2020-04-01" -ResourceGroupName $resourceGroupName `
-Name $accountName -PropertyObject $CosmosDBProperties
IP アクセス制御ポリシーに関する問題のトラブルシューティング
次のオプションを使用して IP アクセス制御ポリシーに関する問題のトラブルシューティングを行うことができます。
Azure portal
ご利用の Azure Cosmos DB アカウントの IP アクセス制御ポリシーを有効にすることにより、IP アドレス範囲の許可リストに入っていないマシンからご利用のアカウントへの要求はすべてブロックされます。 コンテナーの参照やドキュメントのクエリなどのポータルのデータ プレーン操作を有効にするには、ポータルの [ファイアウォール] ウィンドウを使用して Azure portal へのアクセスを明示的に許可する必要があります。
SDK
許可リストに入っていないマシンから SDK を使用して Azure Cosmos DB リソースにアクセスすると、許可されていません 403 という一般的な応答が返され、詳しい情報は示されません。 ご利用の Azure Cosmos DB アカウントに対する IP 許可リストを確認し、そのアカウントに正しいポリシー構成が確実に適用されるようにします。
ブロックされた要求内のソース IP
Azure Cosmos DB アカウントで診断ログを有効にします。 これらのログには個々の要求と応答が表示されます。 ファイアウォールに関連するメッセージは、403 リターン コードを使用してログに記録されます。 これらのメッセージをフィルター処理することにより、ブロックされた要求のソース IP を確認できます。 「Azure Cosmos DB 診断ログ」を参照してください。
Azure Cosmos DB 用のサービス エンドポイントが有効にされているサブネットからの要求
Azure Cosmos DB 用のサービス エンドポイントが有効にされている仮想ネットワーク内のサブネットからの要求では、仮想ネットワークおよびサブネットの ID が Azure Cosmos DB アカウントに送信されます。 これらの要求にはソースのパブリック IP がないため、IP フィルターでは拒否されます。 仮想ネットワーク内の特定のサブネットからのアクセスを許可するには、ご利用の Azure Cosmos DB アカウントへの仮想ネットワークおよびサブネット ベースのアクセスを構成する方法に関するページに概説されているアクセス制御リストを追加します。 ファイアウォール規則が適用されるまでに最大 15 分かかる場合があり、この期間中はファイアウォールの動作が不安定になる場合があります。
許可されたアドレスのリスト内のプライベート IP アドレス
プライベート IP アドレスを含む許可されたアドレスのリストを使用すると、Azure Cosmos DB アカウントの作成または更新は失敗します。 リストにプライベート IP アドレスが指定されていないことを確認してください。