Azure

Azure Front Door でカスタムホストを設定しSSLの設定をしつつGeoフィルタリングで他国からのアクセスを制限する。

はじめに

Azure Front DoorにはGeoフィルタリングが設定できるので試してみました。
ついでにカスタムホストを利用する方法も紹介します。

Front Doorの機能については省きます。
下記を参考してください。
https://docs.microsoft.com/en-us/azure/frontdoor/front-door-overview

一点、注意事項するべきことはVNETと連携ができません。
その為、パブリックのIPアドレスを持たないサービスをバックエンドに利用できません。
今回はWeb Appです。

Front Doorの作成

Front Door作成と確認

詳しい作成方法
https://docs.microsoft.com/en-us/azure/frontdoor/quickstart-create-front-door

問題なくアクセスできることを確認します。

カスタムホストを設定する

カスタムホストを設定するには Front Door designerを開き、Fronted hostsの「+」をクリックします。

次にはカスタムホストを設定します。しかし、CNAMEを設定するようにエラーがでます。

事前に対象のDNSの設定をする必要があります。

DNS設定後に、再度カスタムホストを設定します。

設定後に対象のホストネームでアクセスするとエラーが発生します。

ここで、ルールを設定変更をする必要があります。
通常はAzureの指定されたドメインが割り当てられ、それ以外はアクセスできません。
Front Door designerを開きRouting rulesの変更を行います。

割り当てたカスタムホストに変更します。
両方を選択することも可能です。(この後にSSLの設定もおこなうので有効にしておきます)

カスタムホストでアクセスして確認を行います。

カスタムホストのSSL設定を行う

SSLのキーはKey vaultで管理するため、作成します。

PowershellでADにService Principalを登録します。下記は固定値です。

New-AzureRmADServicePrincipal -ApplicationId "ad0e1c7e-6d38-4ba4-9efd-0bc77ba9f037"

access policyを開き、Principal を追加します。
「ad0e1c7e-6d38-4ba4-9efd-0bc77ba9f037」を検索します。
Microsoft.Azure.Frontdoorが見つかります。これを登録します。

Sercret permissionsをGetに設定します。

追加されたことを確認します。

証明書を登録します。ドキュメントではパスワード無しのみサポートとありますが現在はあっても問題ありません。

Front Door designerを開き追加したカスタムホストを開きます。
そして、Custom Domain HTTPSをEnableに変更します。
Use my own certificateを選択し、Key vault、Secret、Secret Nameを選択します。

以上で設定が完了ですが20分程度反映まで時間がかかります。

表示されることを確認します。

Geoフィルタリング

下記を参考に進めますが、カスタムホストを利用しているため一部異なります。
https://docs.microsoft.com/en-us/azure/frontdoor/front-door-tutorial-geo-filtering

設定はPowershellで設定します。
最初に、モジュールを追加します。

Install-Module -Name AzureRM
Install-Module PowerShellGet -Force -AllowClobber
Install-Module -Name AzureRM.FrontDoor

次にJPのみアクセスできるように以下天順で設定します。
GetMatchCoonditionを作成→ルールを作成→FireWallポリシーを作成→各ホストに対して設定する

$nonJPGeoMatchCondition = New-AzureRmFrontDoorMatchConditionObject -MatchVariable RemoteAddr -OperatorProperty GeoMatch -NegateCondition $true -MatchValue "JP"
$nonJPBlockRule = New-AzureRmFrontDoorCustomRuleObject -Name "geoFilterRule" -RuleType MatchRule -MatchCondition $nonJPGeoMatchCondition -Action Block -Priority 1
$geoPolicy = New-AzureRmFrontDoorFireWallPolicy -Name "geoPolicyAllowJPOnly" -resourceGroupName envdemo -Customrule $nonJPBlockRule  -Mode Prevention -EnabledState Enabled
$geoFrontDoorObjectExample = Get-AzureRmFrontDoor -ResourceGroupName envdemo

FrontendEndpoints[0]を設定することでルールを既存のホストへ割り当てることができます。

$geoFrontDoorObjectExample[0].FrontendEndpoints[0].WebApplicationFirewallPolicyLink = $geoPolicy.Id
Set-AzureRmFrontDoor -InputObject $geoFrontDoorObjectExample[0]


FriendlyName          : envdemo
RoutingRules          : {rule1}
BackendPools          : {backend}
HealthProbeSettings   : {healthProbeSettings-1546674295002}
LoadBalancingSettings : {loadBalancingSettings-1546674295003}
FrontendEndpoints     : {envdemo-azurefd-net, frontdoor-shinagawa-cloud}
EnabledState          : Enabled
ResourceState         : Enabled
ProvisioningState     : Succeeded
Cname                 :
Tags                  : {}
Id                    : /subscriptions/xxxxxxxx-0222-40a0-99c1-xxxxxxxxxxxx/resourcegroups/envdemo/providers/Microsoft.Network/frontdoors/envdemo
Name                  : envdemo
Type                  : Microsoft.Network/frontdoors

FrontendEndpoints[1]を設定することでルールをカスタムホストへ割り当てることができます。

$geoFrontDoorObjectExample[0].FrontendEndpoints[1].WebApplicationFirewallPolicyLink = $geoPolicy.Id
Set-AzureRmFrontDoor -InputObject $geoFrontDoorObjectExample[0]


FriendlyName          : envdemo
RoutingRules          : {rule1}
BackendPools          : {backend}
HealthProbeSettings   : {healthProbeSettings-1546674295002}
LoadBalancingSettings : {loadBalancingSettings-1546674295003}
FrontendEndpoints     : {envdemo-azurefd-net, frontdoor-shinagawa-cloud}
EnabledState          : Enabled
ResourceState         : Enabled
ProvisioningState     : Succeeded
Cname                 :
Tags                  : {}
Id                    : /subscriptions/xxxxxxxx-0222-40a0-99c1-xxxxxxxxxxxx/resourcegroups/envdemo/providers/Microsoft.Network/frontdoors/envdemo
Name                  : envdemo
Type                  : Microsoft.Network/frontdoors

設定後反映されるまで5分程度時間がかかります。
VPNなどを利用して日本以外から確認します。

以上で設定は完了です。
ただWeb Appを利用する場合などは、もともとのURL(Web Appで割り当てられたURL)からもアクセスできるため
Front Doorのドメインにリダイレクトするなどの処理を入れる必要があると思います。

まとめ

GeoフィルタリングはGDPRなどを避けたい場合や、キャンペーン用のサイトなど様々な場面で利用できるかと思います。
まだプレビューなので、今後どのように機能が増えるか気になるサービスです。

-Azure
-,