Azure App Service のアクセス制限を設定する
アクセス制限の設定により、優先順序付けした許可リストまたは拒否のリストを定義できます。このリストは、アプリへのネットワーク アクセスを制御します。 リストには、IP アドレスまたは Azure Virtual Network のサブネットを含めることができます。 1 つ以上のエントリがある場合、リストの最後にあるものは暗黙的に "すべて拒否" になります。 アクセス制限の詳細については、アクセス制限の概要に関するページを参照してください。
アクセス制限機能は、Azure App Service でホストされるすべてのワークロードに対して機能します。 ワークロードには、Web アプリ、API アプリ、Linux アプリ、Linux カスタム コンテナー、および Functions が含まれる場合があります。
アプリへの要求が行われると、送信元のアドレスがアクセス制限リスト内の規則を参照して評価されます。 送信元アドレスが存在しているサブネットが、Microsoft.Web に対するサービス エンドポイントで構成されている場合、ソース サブネットは、アクセス制限リスト内の仮想ネットワーク規則と比較されます。 アドレスがリスト内の規則に基づいてアクセスを許可されない場合、サービスから状態コード HTTP 403 の応答があります。
アクセス制限機能は、コードが実行される worker ホストの上流にある App Service フロントエンド ロールに実装されています。 そのため、アクセス制限は、事実上のネットワーク アクセス制御リスト (ACL) です。
Azure 仮想ネットワークから Web アプリへのアクセスを制限する機能は、サービス エンドポイントによって有効になります。 サービス エンドポイントを使用すると、選択したサブネットからマルチテナント サービスへのアクセスを制限できます。 App Service Environment でホストされているアプリへのトラフィックを制限することはできません。 App Service Environment 内の場合は、IP アドレス規則を適用することでアプリへのアクセスを制御できます。
注意
サービス エンドポイントは、ネットワーク側と、それらを有効化する Azure サービスの両方で有効になっている必要があります。 サービス エンドポイントをサポートしている Azure サービスの一覧については、「仮想ネットワーク サービス エンドポイント」を参照してください。
ポータルでアクセス制限規則を管理する
アプリにアクセス制限規則を追加するには、次のようにします。
Azure portal にサインインします。
アクセス制限を追加したいアプリを選択します。
左側のウィンドウで、 [ネットワーク] を選択します。
[ネットワーク] ウィンドウの [アクセス制限] で、 [アクセス制限を構成する] を選択します。
[アクセス制限] ページで、アプリに対して定義されているアクセス制限規則の一覧を確認します。
一覧には、アプリに適用されている現在の制限がすべて表示されます。 アプリに仮想ネットワーク制限がある場合は、Microsoft.Web に対するサービス エンドポイントが有効かどうかが表に示されます。 アプリに対する制限が定義されていない場合は、どこからでもアプリにアクセスできます。
アクセス許可
Azure portal や CLI を介してサブネット上または上位レベルでアクセス制限を構成するか、サイトの構成プロパティを直接設定するには、少なくとも次のロールベースのアクセス制御許可を必要とします。
アクション | 説明 |
---|---|
Microsoft.Web/sites/config/read | Web アプリの構成設定を取得する |
Microsoft.Web/sites/config/write | Web アプリの構成設定を更新する |
Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action* | ストレージ アカウントや SQL Database などのリソースをサブネットに結合する |
Microsoft.Web/sites/write** | Web アプリの設定を更新する |
*仮想ネットワーク (サービス エンドポイント) 規則を追加する場合にのみ必要です。
**Azure portal を使用してアクセス制限を更新する場合にのみ必要です。
サービス エンドポイントベースの規則を追加していて、仮想ネットワークがアプリとは異なるサブスクリプションにある場合は、仮想ネットワークを持つサブスクリプションが Microsoft.Web リソース プロバイダーに登録されている必要があります。 プロバイダーはこのドキュメントに従って明示的に登録できますが、サブスクリプションで最初の Web アプリを作成するときにも自動的に登録されます。
アクセス制限規則を追加する
アプリにアクセス制限規則を追加するには、 [アクセス制限] ペインで、 [規則の追加] を選択します。 規則は、追加するとすぐに有効になります。
規則に適用される優先順位は、 [優先度] 列の最も小さい数字から始まる順です。 規則が 1 つでも追加されると、暗黙の "すべて拒否" が有効になります。
[アクセス制限の追加] ペインで、規則を作成するときは、次のようにします。
[アクション] で、 [許可] または [拒否] を選択します。
必要に応じて、規則の名前と説明を入力します。
[優先度] ボックスに、優先順位の値を入力します。
[種類] ドロップダウン リストで、規則の種類を選択します。 次のセクションで、さまざまな種類の規則について説明します。
ルール固有の入力を行ったら、[保存] を選択して変更を保存します。
注意
- アクセス制限規則は、最大 512 に制限されています。 512 を超えるアクセス制限規則が必要な場合は、Azure Front Door、Azure App Gateway、または代替の WAF などのスタンドアロン セキュリティ製品のインストールを検討することをお勧めします。
IP アドレスベースの規則を設定する
前のセクションで説明した手順に従いますが、次のような追加事項があります。
- 手順 4 の [種類] ドロップダウン リストで、 [IPv4] または [IPv6] を選択します。
IPv4 と IPv6 の両方のアドレスについて、クラスレス ドメイン間ルーティング (CIDR) 表記で IP アドレス ブロックを指定します。 アドレスを指定するには、1.2.3.4/32 のようなものを使用できます。この場合、最初の 4 オクテットが IP アドレスを表し、 /32 がマスクです。 すべてのアドレスを表す IPv4 CIDR 表記は 0.0.0.0/0 です。 CIDR 表記の詳細については、「クラスレス ドメイン間ルーティング」を参照してください。
Note
IP ベースのアクセス制限規則では、アプリが App Service Environment にある場合のみ、仮想ネットワーク アドレスの範囲が処理されます。 アプリでマルチテナント サービスを使用している場合は、サービス エンドポイントを使用してトラフィックを制限することで、仮想ネットワーク内のサブネットを選択する必要があります。
サービス エンドポイントベースの規則を設定する
手順 4 の [種類] ドロップダウン リストで、 [仮想ネットワーク] を選択します。
[サブスクリプション] 、 [仮想ネットワーク] 、および [サブネット] のドロップダウン リストで、アクセスを制限する対象を指定します。
サービス エンドポイントを使用することで、選択した Azure 仮想ネットワーク サブネットへのアクセスを制限できます。 選択したサブネットのサービス エンドポイントが Microsoft.Web でまだ有効になっていない場合も、自動的に有効になります。ただし、 [見つからない Microsoft.Web サービス エンドポイントを無視する] チェック ボックスがオフになっている場合に限ります。 サービス エンドポイントをアプリで有効にしてサブネットでは有効にしないというシナリオは、主にサブネット上でそれらを有効にするアクセス許可があるかどうかによって決まります。
サブネット上でサービス エンドポイントを有効にするために他のユーザーが必要な場合は、 [見つからない Microsoft.Web サービス エンドポイントを無視する] チェック ボックスをオンにします。 サービス エンドポイントが後からサブネット上で有効にされることを想定して、アプリを構成します。
App Service Environment で実行されているアプリへのアクセスを制限するために、サービス エンドポイントを使うことはできません。 アプリが App Service Environment 内にあるときは、IP アクセス規則を適用することでアプリへのアクセスを制御できます。
サービス エンドポイントにより、Application Gateway やその他の Web アプリケーション ファイアウォール (WAF) デバイスを使用してアプリを構成することができます。 また、セキュリティで保護されたバックエンドを使用して多層アプリケーションを構成することもできます。 詳細については、ネットワーク機能と App Service に関する記事と、「サービス エンドポイントと Application Gateway の統合」を参照してください。
注意
- 現在、サービス エンドポイントは、IP ベースの TLS/SSL バインディングと仮想 IP (VIP) を使用する Web アプリにはサポートされていません。
サービス タグベースの規則を設定する
手順 4 の [種類] ドロップダウン リストで、 [サービス タグ] を選択します。
すべての使用可能なサービス タグがアクセス制限規則でサポートされています。 各サービス タグは、Azure サービスの IP 範囲の一覧を表します。 これらのサービスの一覧と特定の範囲へのリンクについては、サービス タグに関するドキュメントに記載されています。 リージョン スコープ ルールなどの高度な規則を構成するには、Azure Resource Manager テンプレートまたはスクリプトを使用します。
規則を編集する
既存のアクセス制限規則の編集を開始するには、 [アクセス制限] ページで、編集する規則を選択します。
[アクセス制限の編集] ペインで変更を行い、 [ルールの更新] を選択します。
[保存] を選択して変更を保存します。
注意
規則を編集するときに、規則の種類を切り替えることはできません。
規則を削除する
規則を削除するには、[アクセス制限] ページで、削除する規則をオンにして、[削除] を選択します。
[保存] を選択して変更を保存します。
アクセス制限の高度なシナリオ
次のセクションでは、アクセス制限を使用したいくつかの高度なシナリオについて説明します。
http ヘッダーによってフィルターを適用する
規則の一部として、追加の http ヘッダー フィルターを追加できます。 次の http ヘッダー名がサポートされています。
- X-Forwarded-For
- X-Forwarded-Host
- X-Azure-FDID
- X-FD-HealthProbe
ヘッダー名ごとに、最大 8 つの値をコンマで区切って追加できます。 http ヘッダーフィルターは、規則自体の後で評価され、規則を適用するには両方の条件が true である必要があります。
複数ソース規則
複数ソース規則を使用すると、1 つの規則に最大 8 個の IP 範囲または 8 個のサービス タグを組み合わせることができます。 IP 範囲数が 512 を超える場合、または複数の IP 範囲を 1 つの http ヘッダー フィルターと組み合わせる論理規則を作成する場合は、この方法を使用できます。
複数ソース規則は、単一ソース規則と同じ方法で定義されますが、各範囲をコンマで区切ります。
PowerShell の例:
Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
-Name "Multi-source rule" -IpAddress "192.168.1.0/24,192.168.10.0/24,192.168.100.0/24" `
-Priority 100 -Action Allow
単一の IP アドレスをブロックする
単一の IP アドレスまたは IP アドレス ブロックを明示的にブロックし、他のすべてにアクセスを許可するシナリオでは、特定の IP アドレスの拒否規則を追加し、[一致しないルールのアクション] を [許可する] に構成します。
SCM サイトへのアクセスを制限する
アプリへのアクセスを制御できるだけでなく、アプリによって使用される SCM (高度なツール) サイトへのアクセスも制限できます。 SCM サイトは Web デプロイ エンドポイントと Kudu コンソールの両方です。 SCM サイトとアプリに異なるアクセス制限を割り当てることも、アプリと SCM サイトの両方に同じ制限のセットを使うこともできます。 [メイン サイト ルールを使用する] チェック ボックスをオンにすると、規則の一覧が非表示になり、メイン サイトの規則が使用されます。 このチェック ボックスをオフにすると、SCM サイトの設定がもう一度表示されます。
特定の Azure Front Door インスタンスへのアクセスを制限する
Azure Front Door からアプリケーションへのトラフィックは、AzureFrontDoor.Backend サービス タグに定義されている既知の IP 範囲セットが発信元です。 サービス タグ制限規則を使用すると、トラフィックを Azure Front Door からの発信のみに制限できます。 トラフィックの発信元が特定のインスタンスのみになるようにするには、Azure Front Door によって送信される一意の HTTP ヘッダーに基づいて受信要求をさらにフィルター処理する必要があります。
PowerShell の例:
$afd = Get-AzFrontDoor -Name "MyFrontDoorInstanceName"
Add-AzWebAppAccessRestrictionRule -ResourceGroupName "ResourceGroup" -WebAppName "AppName" `
-Name "Front Door example rule" -Priority 100 -Action Allow -ServiceTag AzureFrontDoor.Backend `
-HttpHeader @{'x-azure-fdid' = $afd.FrontDoorId}
プログラムによってアクセス制限を管理する
プログラムによってアクセス制限を管理することができます。以下に、アクセス制限に規則を追加する方法の例と、"メイン サイト" および "高度なツール サイト" の両方に対して、"一致しないルールのアクション" を変更する方法の例を示します。
メイン サイトのアクセス制限規則を追加する
次のいずれかのオプションを選択して、プログラムによって "メイン サイト" のアクセス制限規則を追加できます。
Cloud Shell で次のコマンドを実行できます。 az webapp config access-restriction
コマンドの詳細については、こちらのページを参照してください。
az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
--rule-name 'IP example rule' --action Allow --ip-address 122.133.144.0/24 --priority 100
az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
--rule-name "Azure Front Door example" --action Allow --priority 200 --service-tag AzureFrontDoor.Backend \
--http-header x-azure-fdid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
高度なツール サイトのアクセス制限規則を追加する
次のいずれかのオプションを選択して、プログラムによって "高度なツール サイト" のアクセス制限規則を追加できます。
Cloud Shell で次のコマンドを実行できます。 az webapp config access-restriction
コマンドの詳細については、こちらのページを参照してください。
az webapp config access-restriction add --resource-group ResourceGroup --name AppName \
--rule-name 'IP example rule' --action Allow --ip-address 122.133.144.0/24 --priority 100 --scm-site true
メイン サイトの一致しないルールのアクションを変更する
次のいずれかのオプションを選択して、プログラムによって "メイン サイト" の "一致しないルールのアクション" を変更できます。
Cloud Shell で次のコマンドを実行できます。 az resource
コマンドの詳細については、こちらのページを参照してください。 ipSecurityRestrictionsDefaultAction
に指定できる値は、Allow
または Deny
です。
az resource update --resource-group ResourceGroup --name AppName --resource-type "Microsoft.Web/sites" \
--set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Allow
高度なツール サイトの一致しないルールのアクションを変更する
次のいずれかのオプションを選択して、プログラムによって "高度なツール サイト" の "一致しないルールのアクション" を変更できます。
Cloud Shell で次のコマンドを実行できます。 az resource
コマンドの詳細については、こちらのページを参照してください。 scmIpSecurityRestrictionsDefaultAction
に指定できる値は、Allow
または Deny
です。
az resource update --resource-group ResourceGroup --name AppName --resource-type "Microsoft.Web/sites" \
--set properties.siteConfig.scmIpSecurityRestrictionsDefaultAction=Allow
Azure Functions のアクセス制限を設定する
アクセス制限は、関数アプリでも App Service プランと同じ機能を利用できます。 アクセス制限を有効にすると、許可されていない IP に対する Azure portal コード エディターが無効にもなります。
次のステップ
Azure Functions のアクセス制限
サービス エンドポイントと Application Gateway の統合
Azure App Service における高度なアクセス制限シナリオ - ブログ記事