チュートリアル: Key Vault に格納されている TLS 証明書を使用して Azure 内の Windows 仮想マシン上の Web サーバーをセキュリティ保護する

適用対象: ✔️ Windows VM ✔️ フレキシブル スケール セット

注意

現在、このドキュメントは一般化されたイメージにのみ適用できます。 特殊化されたディスクを使用してこのチュートリアルを実行しようとすると、エラーが発生します。

Web サーバーをセキュリティ保護するには、トランスポート層セキュリティ (TLS) 証明書を使用して Web トラフィックを暗号化できます。 TLS 証明書は Azure Key Vault に格納することができ、Azure 内の Windows 仮想マシン (VM) への証明書のデプロイをセキュリティ保護できます。 このチュートリアルで学習する内容は次のとおりです。

  • Azure Key Vault を作成します。
  • 証明書の生成、または Key Vault へのアップロードを行います。
  • VM を作成し、IIS Web サーバーをインストールします。
  • VM に証明書を取り込み、IIS で TLS バインドの構成を行います。

Azure Cloud Shell を起動する

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。

Cloud Shell を開くには、コード ブロックの右上隅にある [Open Cloudshell] (Cloudshell を開く) を選択するだけです。 https://shell.azure.com/powershell に移動して、別のブラウザー タブで Cloud Shell を起動することもできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付け、Enter キーを押して実行します。

概要

Azure Key Vault では、証明書やパスワードなどの暗号化キーと秘密が保護されます。 Key Vault は、証明書の管理プロセスを合理化し、証明書にアクセスするキーの管理を維持するのに役立ちます。 Key Vault 内に自己署名証明書を作成したり、既に所有している、既存の信頼された証明書をアップロードしたりできます。

証明書が組み込まれたカスタム VM イメージを使用するのではなく、実行中の VM に証明書を取り込みます。 このプロセスでは、デプロイ時に最新の証明書が Web サーバーにインストールされていることを確認します。 証明書を更新するか置き換える場合には、新しいカスタム VM イメージを作成する必要もありません。 追加の VM を作成すると、最新の証明書が自動的に取り込まれます。 すべてのプロセスにおいて、証明書が Azure プラットフォームから流出したり、スクリプト、コマンドラインの履歴、またはテンプレートで公開されたりすることはありません。

Azure Key Vault を作成する

キー コンテナーと証明書を作成する前に、New-AzResourceGroup を使用してリソース グループを作成します。 次の例では、myResourceGroupSecureWeb という名前のリソース グループを米国東部に作成します。

$resourceGroup = "myResourceGroupSecureWeb"
$location = "East US"
New-AzResourceGroup -ResourceGroupName $resourceGroup -Location $location

New-AzKeyVault を使用してキー コンテナーを作成します。 各 Key Vault には一意の名前が必要であり、すべて小文字にする必要があります。 次の例の mykeyvault は、独自の一意の Key Vault 名に置き換えてください。

$keyvaultName="mykeyvault"
New-AzKeyVault -VaultName $keyvaultName `
    -ResourceGroup $resourceGroup `
    -Location $location `
    -EnabledForDeployment

証明書を生成して Key Vault に格納する

実際の運用では、Import-AzKeyVaultCertificate を使用して、信頼できるプロバイダーによって署名された有効な証明書をインポートする必要があります。 このチュートリアルでは、Add-AzKeyVaultCertificate で、New-AzKeyVaultCertificatePolicy からの既定の証明書ポリシーを使用する自己署名証明書を生成する方法を次の例に示します。

$policy = New-AzKeyVaultCertificatePolicy `
    -SubjectName "CN=www.contoso.com" `
    -SecretContentType "application/x-pkcs12" `
    -IssuerName Self `
    -ValidityInMonths 12

Add-AzKeyVaultCertificate `
    -VaultName $keyvaultName `
    -Name "mycert" `
    -CertificatePolicy $policy 

仮想マシンの作成

次のように、Get-Credential を使用して VM の管理者のユーザー名とパスワードを設定します。

$cred = Get-Credential

これで、New-AzVM を使用して VM を作成できるようになります。 次の例では、場所 EastUSmyVM という名前の VM を作成します。 これらが存在しない場合は、関連ネットワーク リソースが作成されます。 セキュリティで保護された Web トラフィックを許可するには、コマンドレットでポート 443 も開きます。

# Create a VM
New-AzVm `
    -ResourceGroupName $resourceGroup `
    -Name "myVM" `
    -Location $location `
    -VirtualNetworkName "myVnet" `
    -SubnetName "mySubnet" `
    -SecurityGroupName "myNetworkSecurityGroup" `
    -PublicIpAddressName "myPublicIpAddress" `
    -Credential $cred `
    -OpenPorts 443

# Use the Custom Script Extension to install IIS
Set-AzVMExtension -ResourceGroupName $resourceGroup `
    -ExtensionName "IIS" `
    -VMName "myVM" `
    -Location $location `
    -Publisher "Microsoft.Compute" `
    -ExtensionType "CustomScriptExtension" `
    -TypeHandlerVersion 1.8 `
    -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server -IncludeManagementTools"}'

VM が作成されるまで、数分間かかります。 最後に、Azure カスタム スクリプト拡張機能を使用して Set-AzVmExtension で IIS web サーバーをインストールします。

Key Vault からの証明書を VM に追加します。

Key Vault からの証明書を VM に追加するには、Get-AzKeyVaultSecret で証明書の ID を取得します。 Add-AzVMSecret で証明書を VM に追加します。

$certURL=(Get-AzKeyVaultSecret -VaultName $keyvaultName -Name "mycert").id

$vm=Get-AzVM -ResourceGroupName $resourceGroup -Name "myVM"
$vaultId=(Get-AzKeyVault -ResourceGroupName $resourceGroup -VaultName $keyVaultName).ResourceId
$vm = Add-AzVMSecret -VM $vm -SourceVaultId $vaultId -CertificateStore "My" -CertificateUrl $certURL | Update-AzVM

証明書を使用するように IIS を構成します。

再度、Set-AzVMExtension でカスタム スクリプト拡張機能を使用して IIS 構成を更新します。 この更新プログラムは、Key Vault から挿入した証明書を IIS に 適用し、Web バインド構成します。

$publicSettings = '{
    "fileUris":["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/secure-iis.ps1"],
    "commandToExecute":"powershell -ExecutionPolicy Unrestricted -File secure-iis.ps1"
}'

Set-AzVMExtension -ResourceGroupName $resourceGroup `
    -ExtensionName "IIS" `
    -VMName "myVM" `
    -Location $location `
    -Publisher "Microsoft.Compute" `
    -ExtensionType "CustomScriptExtension" `
    -TypeHandlerVersion 1.8 `
    -SettingString $publicSettings

セキュリティで保護された Web アプリをテストする

VM のパブリック IP アドレスを取得するには、Get-AzPublicIPAddress を使用します。 次の例では、先ほど作成した myPublicIP の IP アドレスを取得しています。

Get-AzPublicIPAddress -ResourceGroupName $resourceGroup -Name "myPublicIPAddress" | select "IpAddress"

Web ブラウザーを開き、アドレス バーに「https://<myPublicIP>」と入力できるようになりました。 自己署名証明書を使用した場合、セキュリティ警告を受け入れるには、そのまま [詳細] を選択し Web ページに進みます

Web ブラウザーのセキュリティ警告のスクリーンショット。

セキュリティで保護された IIS Web サイトは、次の例のように表示されます。

セキュリティ保護された IIS サイトを示すブラウザーのスクリーンショット。

次のステップ

このチュートリアルでは、Azure Key Vault に格納されている TLS 証明書を使用して IIS Web サーバーをセキュリティ保護しました。 以下の方法を学習しました。

  • Azure Key Vault を作成します。
  • 証明書の生成、または Key Vault へのアップロードを行います。
  • VM を作成し、IIS Web サーバーをインストールします。
  • VM に証明書を取り込み、IIS で TLS バインドの構成を行います。

事前構築済みの仮想マシン スクリプトのサンプルについては、次を参照してください。