次の方法で共有


PowerShell で Application Gateway を使用してエンド ツー エンド TLS を構成する

概要

Azure Application Gateway では、トラフィックのエンドツーエンドの暗号化がサポートされています。 Application Gateway は、アプリケーション ゲートウェイで TLS/SSL 接続を終了します。 次に、ゲートウェイはトラフィックにルーティング規則を適用し、パケットを再暗号化し、定義されたルーティング規則に基づいて適切なバックエンド サーバーにパケットを転送します。 Web サーバーからの応答は、同じ手順でエンドユーザーに移動します。

Application Gateway では、カスタム TLS オプションの定義がサポートされています。 また、TLSv1.0、TLSv1.1および TLSv1.2 のプロトコル バージョンの無効化と、使用する暗号スイートと優先順序の定義もサポートしています。 構成できる TLS オプションの詳細については、TLS ポリシーの概要に関するページを参照してください。

SSL 2.0 と SSL 3.0 は既定で無効になっており、有効にすることはできません。 これらは安全でないと見なされ、Application Gateway では使用できません。

シナリオ イメージ

シナリオ

このシナリオでは、PowerShell でエンド ツー エンド TLS を使用してアプリケーション ゲートウェイを作成する方法について説明します。

このシナリオで、以下の作業を行います。

  • appgw-rg という名前のリソース グループを作成します。
  • アドレス空間が 10.0.0.0/16appgwvnet という名前の仮想ネットワークを作成します。
  • appgwsubnet と appsubnet という名前の 2 つのサブネットを作成します
  • TLS プロトコルのバージョンと暗号スイートを制限するエンドツーエンドの TLS 暗号化をサポートする小規模なアプリケーション ゲートウェイを作成します。

開始する前に

Azure Az PowerShell モジュールを使用して Azure と対話することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「Azure PowerShell を AzureRM から Azに移行する」を参照してください。

アプリケーション ゲートウェイでエンド ツー エンド TLS を構成するには、ゲートウェイに証明書が必要であり、バックエンド サーバーには証明書が必要です。 ゲートウェイ証明書は、TLS プロトコル仕様に従って対称キーを派生させるために使用されます。 その後、対称キーは、ゲートウェイに送信されたトラフィックの暗号化と暗号化解除に使用されます。 ゲートウェイ証明書は、Personal Information Exchange (PFX) 形式である必要があります。 このファイル形式を使用すると、アプリケーション ゲートウェイがトラフィックの暗号化と暗号化解除を実行するために必要な秘密キーをエクスポートできます。

エンド ツー エンド TLS 暗号化の場合、バックエンドはアプリケーション ゲートウェイによって明示的に許可されている必要があります。 バックエンド サーバーのパブリック証明書をアプリケーション ゲートウェイにアップロードします。 証明書を追加することにより、Application Gateway は、既知のバックエンド インスタンスのみと通信するため、 エンド ツー エンド通信のセキュリティが強化されます。

構成プロセスについては、次のセクションで説明します。

リソース グループを作成する

このセクションでは、アプリケーション ゲートウェイを含むリソース グループを作成する手順について説明します。

  1. Azure アカウントへサインインします。

    Connect-AzAccount
    
  2. このシナリオに使用するサブスクリプションを選択します。

    Select-Azsubscription -SubscriptionName "<Subscription name>"
    
  3. リソース グループを作成する。 (既存のリソース グループを使用している場合は、この手順をスキップしてください)。

    New-AzResourceGroup -Name appgw-rg -Location "West US"
    

アプリケーション ゲートウェイの仮想ネットワークとサブネットを作成します。

次の例では、仮想ネットワークと 2 つのサブネットを作成します。 1 つのサブネットを使用して、アプリケーション ゲートウェイを保持します。 もう 1 つのサブネットは、Web アプリケーションをホストするバックエンドに使用されます。

  1. アプリケーション ゲートウェイに使用するサブネットのアドレス範囲を割り当てます。

    $gwSubnet = New-AzVirtualNetworkSubnetConfig -Name 'appgwsubnet' -AddressPrefix 10.0.0.0/24
    

    アプリケーション ゲートウェイ用に構成されたサブネットのサイズを適切に設定する必要があります。 アプリケーション ゲートウェイは、最大 10 個のインスタンスに対して構成できます。 各インスタンスは、サブネットから 1 つの IP アドレスを受け取ります。 サブネットが小さすぎると、アプリケーション ゲートウェイのスケールアウトに悪影響を及ぼす可能性があります。

  2. バックエンド アドレス プールに使用するアドレス範囲を割り当てます。

    $nicSubnet = New-AzVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
    
  3. 前の手順で定義したサブネットを使用して仮想ネットワークを作成します。

    $vnet = New-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet
    
  4. 次の手順で使用する仮想ネットワーク リソースとサブネット リソースを取得します。

    $vnet = Get-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg
    $gwSubnet = Get-AzVirtualNetworkSubnetConfig -Name 'appgwsubnet' -VirtualNetwork $vnet
    $nicSubnet = Get-AzVirtualNetworkSubnetConfig -Name 'appsubnet' -VirtualNetwork $vnet
    

フロントエンド構成のパブリック IP アドレスを作成する

アプリケーション ゲートウェイに使用するパブリック IP リソースを作成します。 このパブリック IP アドレスは、次のいずれかの手順で使用されます。

$publicip = New-AzPublicIpAddress -ResourceGroupName appgw-rg -Name 'publicIP01' -Location "West US" -AllocationMethod Dynamic

重要

Application Gateway では、定義されたドメイン ラベルで作成されたパブリック IP アドレスの使用はサポートされていません。 動的に作成されたドメイン ラベルを持つパブリック IP アドレスのみがサポートされます。 アプリケーション ゲートウェイのフレンドリ DNS 名が必要な場合は、エイリアスとして CNAME レコードを使用することをお勧めします。

アプリケーション ゲートウェイの構成オブジェクトの作成

すべての構成項目は、アプリケーション ゲートウェイを作成する前に設定されます。 次の手順では、アプリケーション ゲートウェイ リソースに必要な構成項目を作成します。

  1. アプリケーション ゲートウェイの IP 構成を作成します。 この設定では、アプリケーション ゲートウェイが使用するサブネットを構成します。 アプリケーション ゲートウェイが起動すると、構成されたサブネットから IP アドレスが取得され、バックエンド IP プール内の IP アドレスにネットワーク トラフィックがルーティングされます。 各インスタンスが IP アドレスを 1 つ取得することに注意してください。

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet
    
  2. フロントエンド IP 構成を作成します。 この設定は、プライベートまたはパブリック IP アドレスをアプリケーション ゲートウェイのフロントエンドにマップします。 次の手順では、前の手順のパブリック IP アドレスをフロントエンド IP 構成に関連付けます。

    $fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
    
  3. バックエンド Web サーバーの IP アドレスを使用してバックエンド IP アドレス プールを構成します。 これらの IP アドレスは、フロントエンド IP エンドポイントから送信されるネットワーク トラフィックを受信する IP アドレスです。 サンプルの IP アドレスを、独自のアプリケーション IP アドレス エンドポイントに置き換えます。

    $pool = New-AzApplicationGatewayBackendAddressPool -Name 'pool01' -BackendIPAddresses 203.0.113.1, 203.0.113.2, 203.0.113.3
    

    完全修飾ドメイン名 (FQDN) は、バックエンド サーバーの IP アドレスの代わりに使用する有効な値でもあります。 これを有効にするには、 -BackendFqdns スイッチを 使用します。

  4. パブリック IP エンドポイントのフロントエンド IP ポートを構成します。 このポートは、エンド ユーザーが接続するポートです。

    $fp = New-AzApplicationGatewayFrontendPort -Name 'port01'  -Port 443
    
  5. アプリケーション ゲートウェイの証明書を構成します。 この証明書は、アプリケーション ゲートウェイ上のトラフィックの暗号化を解除して再暗号化するために使用されます。

    $passwd = ConvertTo-SecureString  <certificate file password> -AsPlainText -Force 
    $cert = New-AzApplicationGatewaySSLCertificate -Name cert01 -CertificateFile <full path to .pfx file> -Password $passwd 
    

    このサンプルでは、TLS 接続に使用される証明書を構成します。 証明書は .pfx 形式である必要があります。

  6. アプリケーション ゲートウェイの HTTP リスナーを作成します。 使用するフロントエンド IP 構成、ポート、TLS/SSL 証明書を割り当てます。

    $listener = New-AzApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
    
  7. TLS が有効なバックエンド プール リソースで使用する証明書をアップロードします。

    既定のプローブは、バックエンドの IP アドレスの 既定 の TLS バインドから公開キーを取得し、受信した公開キーの値をここで指定した公開キーの値と比較します。

    バックエンドでホスト ヘッダーとサーバー名表示 (SNI) を使用している場合、取得した公開キーがトラフィックフローの対象サイトではない可能性があります。 不明な場合は、バックエンド サーバーの https://127.0.0.1/ にアクセスして、 既定 の TLS バインドに使用される証明書を確認します。 このセクションでは、その要求の公開キーを使用します。 HTTPS バインドでホスト ヘッダーと SNI を使用していて、バックエンド サーバーで https://127.0.0.1/ する手動ブラウザー要求から応答と証明書を受信しない場合は、それらに既定の TLS バインドを設定する必要があります。 そうしないと、プローブは失敗し、バックエンドは許可されません。

    Application Gateway での SNI の詳細については、「Application Gateway を使用 した TLS 終了とエンド ツー エンド TLS の概要」を参照してください。

    $authcert = New-AzApplicationGatewayAuthenticationCertificate -Name 'allowlistcert1' -CertificateFile C:\cert.cer
    

    前の手順で指定した証明書は、バックエンドに存在する .pfx 証明書の公開キーである必要があります。 バックエンド サーバーにインストールされている証明書 (ルート証明書ではなく) を Claim、Evidence、Reasoning (CER) 形式でエクスポートし、この手順で使用します。 この手順では、バックエンドとアプリケーション ゲートウェイを使用できます。

    Application Gateway v2 SKU を使用している場合は、認証証明書ではなく信頼されたルート証明書を作成します。 詳細については、「 Application Gateway を使用したエンド ツー エンド TLS の概要」を参照してください。

    $trustedRootCert01 = New-AzApplicationGatewayTrustedRootCertificate -Name "test1" -CertificateFile  <path to root cert file>
    
  8. アプリケーション ゲートウェイ バックエンドの HTTP 設定を構成します。 前の手順でアップロードした証明書を HTTP 設定に割り当てます。

    $poolSetting = New-AzApplicationGatewayBackendHttpSettings -Name 'setting01' -Port 443 -Protocol Https -CookieBasedAffinity Enabled -AuthenticationCertificates $authcert
    

    Application Gateway v2 SKU の場合は、次のコマンドを使用します。

    $poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name “setting01” -Port 443 -Protocol Https -CookieBasedAffinity Disabled -TrustedRootCertificate $trustedRootCert01 -HostName "test1"
    
  9. ロード バランサーの動作を構成するロード バランサー ルーティング規則を作成します。 この例では、基本的なラウンドロビン方式の規則が作成されます。

    $rule = New-AzApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
    
  10. アプリケーション ゲートウェイのインスタンス サイズを構成します。 使用可能なサイズは 、Standard_SmallStandard_MediumおよびStandard_Largeです。 容量の場合、使用可能な値は 1 から 10 です

    $sku = New-AzApplicationGatewaySku -Name Standard_Small -Tier Standard -Capacity 2
    

    テストの目的で、インスタンス数 1 を選択できます。 インスタンスの数が 2 未満の場合、SLA の対象外となるため、そのため推奨されないことを理解しておくことが重要です。 小規模なゲートウェイは、運用目的ではなく、開発テストに使用されます。

  11. アプリケーション ゲートウェイで使用する TLS ポリシーを構成します。 Application Gateway では、TLS プロトコル バージョンの最小バージョンを設定する機能がサポートされています。

    次の値は、定義できるプロトコル バージョンの一覧です。

    • TLSV1_0
    • TLSV1_1
    • TLSV1_2

    次の例では、最小プロトコル バージョンを TLSv1_2 に設定し、 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384およびTLS_RSA_WITH_AES_128_GCM_SHA256 のみを有効にします。

    $SSLPolicy = New-AzApplicationGatewaySSLPolicy -MinProtocolVersion TLSv1_2 -CipherSuite "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256" -PolicyType Custom
    

アプリケーション ゲートウェイの作成

上記のすべての手順を使用して、アプリケーション ゲートウェイを作成します。 ゲートウェイの作成は、実行に時間がかかるプロセスです。

V1 SKU の場合は、次のコマンドを使用します。

$appgw = New-AzApplicationGateway -Name appgateway -SSLCertificates $cert -ResourceGroupName "appgw-rg" -Location "West US" -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting -FrontendIpConfigurations $fipconfig -GatewayIpConfigurations $gipconfig -FrontendPorts $fp -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -SSLPolicy $SSLPolicy -AuthenticationCertificates $authcert -Verbose

V2 SKU の場合は、次のコマンドを使用します。

$appgw = New-AzApplicationGateway -Name appgateway -SSLCertificates $cert -ResourceGroupName "appgw-rg" -Location "West US" -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting01 -FrontendIpConfigurations $fipconfig -GatewayIpConfigurations $gipconfig -FrontendPorts $fp -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -SSLPolicy $SSLPolicy -TrustedRootCertificate $trustedRootCert01 -Verbose

バックエンド証明書の有効期限が切れている場合に新しい証明書を適用する

バックエンド証明書の有効期限が切れている場合は、次の手順に従って新しい証明書を適用します。

  1. 更新するアプリケーション ゲートウェイを取得します。

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. .cer ファイルから新しい証明書リソースを追加します。このファイルには、証明書の公開キーが含まれており、アプリケーション ゲートウェイで TLS 終了のためにリスナーに追加されたのと同じ証明書を指定することもできます。

    Add-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name 'NewCert' -CertificateFile "appgw_NewCert.cer" 
    
  3. 新しい認証証明書オブジェクトを変数に取得します (TypeName: Microsoft.Azure.Commands.Network.Models.PSApplicationGatewayAuthenticationCertificate)。

    $AuthCert = Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name NewCert
    
  4. BackendHttp 設定に新しい証明書を割り当て、$AuthCert変数で参照します。 (変更する HTTP 設定名を指定します)。

$out= Set-AzApplicationGatewayBackendHttpSetting -ApplicationGateway $gw -Name "HTTP1" -Port 443 -Protocol "Https" -CookieBasedAffinity Disabled -AuthenticationCertificates $Authcert
  1. 変更をアプリケーション ゲートウェイにコミットし、$out変数に含まれる新しい構成を渡します。
Set-AzApplicationGateway -ApplicationGateway $gw  

HTTP 設定から未使用の期限切れの証明書を削除する

HTTP 設定から未使用の期限切れの証明書を削除するには、次の手順に従います。

  1. 更新するアプリケーション ゲートウェイを取得します。

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. 削除する認証証明書の名前を一覧表示します。

    Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw | select name
    
  3. アプリケーション ゲートウェイから認証証明書を削除します。

    $gw=Remove-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name ExpiredCert
    
  4. 変更をコミットします。

Set-AzApplicationGateway -ApplicationGateway $gw

既存のアプリケーション ゲートウェイで TLS プロトコルのバージョンを制限する

前の手順では、エンド ツー エンド TLS を使用してアプリケーションを作成し、特定の TLS プロトコル バージョンを無効にしました。 次の例では、既存のアプリケーション ゲートウェイで特定の TLS ポリシーを無効にします。

  1. 更新するアプリケーション ゲートウェイを取得します。

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. TLS ポリシーを定義します。 次の例では、 TLSv1.0TLSv1.1 が無効になっており、許可されているのは暗号スイート TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384およびTLS_RSA_WITH_AES_128_GCM_SHA256 だけです。

    Set-AzApplicationGatewaySSLPolicy -MinProtocolVersion TLSv1_2 -PolicyType Custom -CipherSuite "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256" -ApplicationGateway $gw
    
    
  3. 最後に、ゲートウェイを更新します。 この最後の手順は、実行時間の長いタスクです。 完了すると、アプリケーション ゲートウェイでエンド ツー エンド TLS が構成されます。

    $gw | Set-AzApplicationGateway
    

アプリケーション ゲートウェイの DNS 名を取得する

ゲートウェイが作成されたら、次の手順は、通信用にフロントエンドを構成することです。 Application Gateway では、パブリック IP を使用するときに動的に割り当てられた DNS 名が必要です。これはわかりやすいものではありません。 エンド ユーザーがアプリケーション ゲートウェイにアクセスできるようにするには、CNAME レコードを使用して、アプリケーション ゲートウェイのパブリック エンドポイントを指すことができます。 詳細については、「 Azure でのカスタム ドメイン名の構成」を参照してください。

エイリアスを構成するには、アプリケーション ゲートウェイにアタッチされている PublicIPAddress 要素を使用して、アプリケーション ゲートウェイとそれに関連付けられている IP/DNS 名の詳細を取得します。 アプリケーション ゲートウェイの DNS 名を使用して、2 つの Web アプリケーションがこの DNS 名を指す CNAME レコードを作成します。 アプリケーション ゲートウェイの再起動時に VIP が変更される可能性があるため、A レコードの使用はお勧めしません。

Get-AzPublicIpAddress -ResourceGroupName appgw-RG -Name publicIP01
Name                     : publicIP01
ResourceGroupName        : appgw-RG
Location                 : westus
Id                       : /subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/publicIPAddresses/publicIP01
Etag                     : W/"00000d5b-54ed-4907-bae8-99bd5766d0e5"
ResourceGuid             : 00000000-0000-0000-0000-000000000000
ProvisioningState        : Succeeded
Tags                     : 
PublicIpAllocationMethod : Dynamic
IpAddress                : xx.xx.xxx.xx
PublicIpAddressVersion   : IPv4
IdleTimeoutInMinutes     : 4
IpConfiguration          : {
                                "Id": "/subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/applicationGateways/appgwtest/frontendIP
                            Configurations/frontend1"
                            }
DnsSettings              : {
                                "Fqdn": "00000000-0000-xxxx-xxxx-xxxxxxxxxxxx.cloudapp.net"
                            }

次のステップ

Application Gateway を介した Web アプリケーション ファイアウォールによる Web アプリケーションのセキュリティ強化の詳細については、 Web アプリケーション ファイアウォールの概要を参照してください。