Azure のクラウドサービスにデプロイした Web コンテンツに対して、IP アドレスの制限を設けたい時があると思います。
そんな時は、スタートアップタスクで実行する下記の様な感じの PowerShell を用意しておけば、簡単に設定することが出来ます。
[startup.ps1]
Import-Module WebAdministration Install-WindowsFeature Web-IP-Security $SiteName = (get-item iis:\sites\*).name $Filter = "/system.webServer/security/ipsecurity" Set-WebConfigurationProperty -Filter $Filter -Name allowUnlisted -Value $false -Location $SiteName -PSPath "IIS:\" Add-WebConfiguration -Filter $Filter -PSPath "IIS:\" -Value @{ipAddress="許可するIPアドレス";allowed=$true} -Location $SiteName
あとは、上記の PowerShell をコールするcmdファイルを下記の様な感じで。
[startup.cmd]
@echo off powershell -executionpolicy remotesigned -file startup.ps1
[ServiceDefinition.csdef] に、スタートアップタスクの設定と管理者権限を追加します。
<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="WindowsAzure35" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2013-03.2.0"> <WebRole name="MvcWebRole1" vmsize="Small"> <Sites> <Site name="Web"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> </Bindings> </Site> </Sites> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> </Endpoints> <Imports> <Import moduleName="Diagnostics" /> <Import moduleName="RemoteAccess" /> <Import moduleName="RemoteForwarder" /> </Imports> <Startup> <Task executionContext="elevated" commandLine="startup.cmd"></Task> </Startup> <Runtime executionContext="elevated"></Runtime> </WebRole> </ServiceDefinition>