チュートリアル: 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 を作成できるようになります。 次の例では、場所 EastUS に myVM という名前の 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 ページに進みます。
セキュリティで保護された IIS Web サイトは、次の例のように表示されます。
次のステップ
このチュートリアルでは、Azure Key Vault に格納されている TLS 証明書を使用して IIS Web サーバーをセキュリティ保護しました。 以下の方法を学習しました。
- Azure Key Vault を作成します。
- 証明書の生成、または Key Vault へのアップロードを行います。
- VM を作成し、IIS Web サーバーをインストールします。
- VM に証明書を取り込み、IIS で TLS バインドの構成を行います。
事前構築済みの仮想マシン スクリプトのサンプルについては、次を参照してください。