この記事では、PowerShell を使用して Application Gateway で相互認証を構成する方法について説明します。 相互認証とは、Application Gateway にアップロードしたクライアント証明書を使用して、要求を送信するクライアントを Application Gateway が認証することです。
Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
注
Azure Az PowerShell モジュールを使用して Azure と対話することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「Azure PowerShell を AzureRM から Azに移行する」を参照してください。
この記事では、Azure PowerShell モジュール バージョン 1.0.0 以降が必要です。 バージョンを確認するには、Get-Module -ListAvailable Az
を実行します。 アップグレードする必要がある場合は、Azure PowerShell モジュールのインストールに関するページを参照してください。 PowerShell をローカルで実行している場合、Login-AzAccount
を実行して Azure との接続を作成することも必要です。
開始する前に
Application Gateway との相互認証を構成するには、ゲートウェイにアップロードするクライアント証明書が必要です。 クライアント証明書は、クライアントが Application Gateway に提示する証明書を検証するために使用されます。 テスト目的で、自己署名証明書を使用してもかまいません。 ただし、運用ワークロードでは管理が難しく、完全にセキュリティで保護されていないため、これはお勧めできません。
特にアップロードできるクライアント証明書の種類の詳細については、「 Application Gateway との相互認証の概要」を参照してください。
リソース グループを作成する
まず、サブスクリプションに新しいリソース グループを作成します。
$resourceGroup = New-AzResourceGroup -Name $rgname -Location $location -Tags @{ testtag = "APPGw tag"}
仮想ネットワークを作成する
Application Gateway を配置するための仮想ネットワークをデプロイします。
$gwSubnet = New-AzVirtualNetworkSubnetConfig -Name $gwSubnetName -AddressPrefix 10.0.0.0/24
$vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgname -Location $location -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet
$vnet = Get-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgname
$gwSubnet = Get-AzVirtualNetworkSubnetConfig -Name $gwSubnetName -VirtualNetwork $vnet
パブリック IP を作成する
Application Gateway で使用するパブリック IP を作成します。
$publicip = New-AzPublicIpAddress -ResourceGroupName $rgname -name $publicIpName -location $location -AllocationMethod Static -sku Standard
Application Gateway の IP 構成を作成する
IP 構成とフロントエンド ポートを作成します。
$gipconfig = New-AzApplicationGatewayIPConfiguration -Name $gipconfigname -Subnet $gwSubnet
$fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name $fipconfigName -PublicIPAddress $publicip
$port = New-AzApplicationGatewayFrontendPort -Name $frontendPortName -Port 443
フロントエンド SSL の構成
Application Gateway の SSL 証明書を構成します。
$password = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force
$sslCertPath = $basedir + "/ScenarioTests/Data/ApplicationGatewaySslCert1.pfx"
$sslCert = New-AzApplicationGatewaySslCertificate -Name $sslCertName -CertificateFile $sslCertPath -Password $password
クライアント認証を構成する
Application Gateway でクライアント認証を構成します。 ここで使用する信頼されたクライアント CA 証明書チェーンを抽出する方法の詳細については、 信頼されたクライアント CA 証明書チェーンを抽出する方法を参照してください。
重要
クライアント CA 証明書チェーン全体を 1 つのファイルにアップロードし、ファイルごとにチェーンを 1 つだけアップロードしてください。
注
TLS 1.2 は今後も必須となるため、相互認証で TLS 1.2 を使用することをお勧めします。
$clientCertFilePath = $basedir + "/ScenarioTests/Data/TrustedClientCertificate.cer"
$trustedClient01 = New-AzApplicationGatewayTrustedClientCertificate -Name $trustedClientCert01Name -CertificateFile $clientCertFilePath
$sslPolicy = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName "AppGwSslPolicy20170401S"
$clientAuthConfig = New-AzApplicationGatewayClientAuthConfiguration -VerifyClientCertIssuerDN
$sslProfile01 = New-AzApplicationGatewaySslProfile -Name $sslProfile01Name -SslPolicy $sslPolicy -ClientAuthConfiguration $clientAuthConfig -TrustedClientCertificates $trustedClient01
$listener = New-AzApplicationGatewayHttpListener -Name $listenerName -Protocol Https -SslCertificate $sslCert -FrontendIPConfiguration $fipconfig -FrontendPort $port -SslProfile $sslProfile01
バックエンド プールと設定を構成する
Application Gateway のバックエンド プールと設定を設定します。 必要に応じて、エンド ツー エンド SSL 暗号化用にバックエンドの信頼されたルート証明書を設定します。
$certFilePath = $basedir + "/ScenarioTests/Data/ApplicationGatewayAuthCert.cer"
$trustedRoot = New-AzApplicationGatewayTrustedRootCertificate -Name $trustedRootCertName -CertificateFile $certFilePath
$pool = New-AzApplicationGatewayBackendAddressPool -Name $poolName -BackendIPAddresses www.microsoft.com, www.bing.com
$poolSetting = New-AzApplicationGatewayBackendHttpSettings -Name $poolSettingName -Port 443 -Protocol Https -CookieBasedAffinity Enabled -PickHostNameFromBackendAddress -TrustedRootCertificate $trustedRoot
ルールを構成する
Application Gateway でルールを設定します。
$rule = New-AzApplicationGatewayRequestRoutingRule -Name $ruleName -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
将来のリスナー用に既定の SSL ポリシーを設定する
相互認証の設定中にリスナー固有の SSL ポリシーを設定しました。 この手順では、必要に応じて、作成する将来のリスナーの既定の SSL ポリシーを設定できます。
$sslPolicyGlobal = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName "AppGwSslPolicy20170401"
アプリケーション ゲートウェイの作成
上記で作成したすべてのものを使用して、Application Gateway をデプロイします。
$sku = New-AzApplicationGatewaySku -Name Standard_v2 -Tier Standard_v2
$appgw = New-AzApplicationGateway -Name $appgwName -ResourceGroupName $rgname -Zone 1,2 -Location $location -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting -FrontendIpConfigurations $fipconfig -GatewayIpConfigurations $gipconfig -FrontendPorts $port -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -SslPolicy $sslPolicyGlobal -TrustedRootCertificate $trustedRoot -AutoscaleConfiguration $autoscaleConfig -TrustedClientCertificates $trustedClient01 -SslProfiles $sslProfile01 -SslCertificates $sslCert
リソースをクリーンアップする
必要がなくなったら、Remove-AzResourceGroup を使用して、リソース グループ、アプリケーション ゲートウェイ、およびすべての関連リソースを削除します。
Remove-AzResourceGroup -Name $rgname
期限切れのクライアント CA 証明書を更新する
クライアント CA 証明書の有効期限が切れている場合は、次の手順でゲートウェイの証明書を更新できます。
- Azure にサインインする
Connect-AzAccount Select-AzSubscription -Subscription "<sub name>"
- Application Gateway の構成を取得する
$gateway = Get-AzApplicationGateway -Name "<gateway-name>" -ResourceGroupName "<resource-group-name>"
- ゲートウェイから信頼されたクライアント証明書を削除する
Remove-AzApplicationGatewayTrustedClientCertificate -Name "<name-of-client-certificate>" -ApplicationGateway $gateway
- ゲートウェイに新しい証明書を追加する
Add-AzApplicationGatewayTrustedClientCertificate -ApplicationGateway $gateway -Name "<name-of-new-cert>" -CertificateFile "<path-to-certificate-file>"
- 新しい証明書でゲートウェイを更新する
Set-AzApplicationGateway -ApplicationGateway $gateway