はじめに
Azure Front DoorにはGeoフィルタリングが設定できるので試してみました。
ついでにカスタムホストを利用する方法も紹介します。
Front Doorの機能については省きます。
下記を参考してください。
https://docs.microsoft.com/en-us/azure/frontdoor/front-door-overview
一点、注意事項するべきことはVNETと連携ができません。
その為、パブリックのIPアドレスを持たないサービスをバックエンドに利用できません。
今回はWeb Appです。
Front Doorの作成
詳しい作成方法
https://docs.microsoft.com/en-us/azure/frontdoor/quickstart-create-front-door
カスタムホストを設定する
カスタムホストを設定するには Front Door designerを開き、Fronted hostsの「+」をクリックします。
次にはカスタムホストを設定します。しかし、CNAMEを設定するようにエラーがでます。
設定後に対象のホストネームでアクセスするとエラーが発生します。
ここで、ルールを設定変更をする必要があります。
通常は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を選択します。
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などを避けたい場合や、キャンペーン用のサイトなど様々な場面で利用できるかと思います。
まだプレビューなので、今後どのように機能が増えるか気になるサービスです。