Key Vault 証明書を使用した TLS 終端
Azure Key Vault はプラットフォームマネージド シークレット ストアです。シークレット、キー、TLS または SSL 証明書を保護するために使用できます。 Azure Application Gateway では、HTTPS 対応リスナーにアタッチされているサーバー証明書用の Key Vault との統合をサポートします。 このサポートは、Application Gateway の v2 SKU に制限されます。
Application Gateway には、TLS 終端の 2 つのモデルが用意されています。
- リスナーにアタッチされている TLS または SSL 証明書を指定します。 このモデルは、TLS 終端のために TLS または SSL 証明書を Application Gateway に渡す従来の方法を示しています。
- HTTPS 対応リスナーの作成時に、既存の Key Vault 証明書またはシークレットへの参照を指定します。
Application Gateway と Key Vault の統合には、次のようにさまざまな利点があります。
- セキュリティの強化 (TLS または SSL 証明書がアプリケーション開発チームによって直接処理されないため)。 統合により、別のセキュリティ チームが以下のこと実行できます。
- アプリケーション ゲートウェイを設定する。
- アプリケーション ゲートウェイのライフ サイクルを制御する。
- ご使用のキー コンテナーに格納されている証明書にアクセスする権限を特定のアプリケーション ゲートウェイに付与する。
- ご使用のキー コンテナーに既存の証明書をインポートできます。 また、任意の信頼できる Key Vault パートナーと共に Key Vault API を使用して、新しい証明書を作成したり管理したりできます。
- ご使用のキー コンテナーに格納されている証明書を自動更新できます。
サポートされている証明書
Application Gateway で現在サポートされているのは、ソフトウェアで検証された証明書のみです。 ハードウェア セキュリティ モジュール (HSM) で検証された証明書はサポートされません。
Key Vault 証明書を使用するように Application Gateway を構成すると、そのインスタンスによって Key Vault から証明書が取得され、TLS 終端のためにその証明書がローカルにインストールされます。 インスタンスによって 4 時間ごとに Key Vault がポーリングされ、証明書の更新バージョン (存在する場合) が取得されます。 更新された証明書が検出されると、HTTPS リスナーに関連付けられている TLS/SSL 証明書が自動的にローテーションされます。
ヒント
Application Gateway を変更すると、新しいバージョンの証明書が使用可能かどうかを判断するためにキー コンテナーの確認が強制的に実行されます。 これには、フロントエンド IP 構成、リスナー、ルール、バックエンド プール、リソース タグなどへの変更が含まれますが、これらに限定されるのではありません。 更新された証明書が見つかった場合は、新しい証明書がすぐに提示されます。
証明書を参照するために、Key Vault 内ではシークレット識別子が Application Gateway によって使用されます。 Azure PowerShell、Azure CLI、または Azure Resource Manager の場合、バージョンを指定しないシークレット識別子を使用することを強く推奨します。 このようにすると、キー コンテナー内で新しいバージョンが使用可能な場合、Application Gateway が証明書を自動的にローテーションします。 バージョンのないシークレット URI の例は https://myvault.vault.azure.net/secrets/mysecret/
です。 次のセクションで提供されている PowerShell の手順を参照できます。
Azure portal では、シークレットではなく Key Vault 証明書のみがサポートされます。 Application Gateway は引き続き Key Vault からのシークレットの参照をサポートしますが、PowerShell、Azure CLI、API、Azure Resource Manager テンプレート (ARM テンプレート) など、ポータル リソース以外を使用している場合のみに限られます。 Application Gateway で使用できるようにするには、Key Vault 証明書にエクスポート可能な秘密キーが必要です。
他の Azure サブスクリプションの Key Vault への参照はサポートされていますが、ARM テンプレート、Azure PowerShell、CLI、Bicep などを使用して構成する必要があります。現在、Azure portal を介した Application Gateway では、サブスクリプション間キー コンテナーの構成はサポートされていません。
Key Vault 内の証明書の設定
TLS 終端の場合、Application Gateway は、Personal Information Exchange (PFX) 形式の証明書のみサポートしています。 既存の証明書をインポートするか、ご自身のキー コンテナーで新しい証明書を作成することがします。 エラーを回避するには、Key Vault 内で証明書の状態が [有効] に設定されていることを確認します。
統合のしくみ
Application Gateway と Key Vault の統合は、3 段階の構成プロセスで行われます。
Note
Azure Application Gateway と Key Vault の統合では、コンテナー アクセス ポリシーと Azure ロールベースのアクセス制御の両方のアクセス許可モデルがサポートされます。
ユーザー割り当てマネージド ID を取得する
Application Gateway は、マネージド ID を使用して、ユーザーに代わって Key Vault から証明書を取得します。
統合には、新しいユーザー割り当てマネージド ID を作成することも既存のマネージド ID を再利用することもできます。 新しいユーザー割り当てマネージド ID の作成については、Azure portal を使用したユーザー割り当てマネージド ID の作成に関するページを参照してください。
ユーザー割り当てマネージド ID を Key Vault に委任する
ご自身のキー コンテナーでユーザー割り当てマネージド ID を使用するためのアクセス ポリシーを定義します。
Azure portal で、Key Vault に移動します。
証明書が格納されているキー コンテナーを選択します。
アクセス許可モデルとしてコンテナー アクセス ポリシーを使用している場合: [アクセス ポリシー]、[+ アクセス ポリシーの追加] を順に選択し、[シークレットのアクセス許可] で [取得] を選択して、[プリンシパルの選択] で、ご自身のユーザー割り当てマネージド ID を選択します。 その後、 [保存] を選びます。
Azure ロールベースのアクセス制御を使っている場合は、リソースにマネージド ID アクセスを割り当てるに関する記事に従い、ユーザー割り当てマネージド ID Key Vault Secrets User ロールを Azure Key Vault に割り当ててください。
Key Vault に対するファイアウォールのアクセス許可を確認する
2021 年 3 月 15 日現在、Key Vault は、Azure Key Vault に対する認証にユーザー マネージド ID を利用することで、Application Gateway を、信頼できるサービスとして認識します。 サービス エンドポイントを使用し、信頼できるサービス オプションを、キー コンテナーのファイアウォールに対して有効にすると、セキュリティで保護されたネットワーク境界をAzure 内で構築できます。 Key Vault に対するすべてのネットワーク (インターネット トラフィックを含む) からのトラフィックへのアクセスを拒否できますが、ご自身のサブスクリプションで、Application Gateway リソースに対して Key Vault をアクセス可能にすることはできます。
制限付きキー コンテナーを使用している場合は、次の手順に従って、ファイアウォールと仮想ネットワークが使用されるように Application Gateway を構成します。
ヒント
Key Vault に有効なプライベート エンドポイントがある場合、手順 1 から 3 は必要ありません。 アプリケーション ゲートウェイは、プライベート IP アドレスを使用して、Key Vault にアクセスできます。
重要
プライベート エンドポイントを使用して Key Vault にアクセスする場合は、参照先の Key Vault に対応するレコードを含む privatelink.vaultcore.azure.net プライベート DNS ゾーンを、Application Gateway を含む仮想ネットワークにリンクする必要があります。 カスタム DNS サーバーは、Azure DNS が提供するリゾルバーの代わりに仮想ネットワーク上で引き続き使用できますが、プライベート DNS ゾーンも仮想ネットワークにリンクしたままにしておく必要があります。
Azure portal の Key Vault で、[ネットワーク] を選択します。
[ファイアウォールと仮想ネットワーク] タブで、[選択されたネットワーク] を選択します。
[仮想ネットワーク] で、[+ 既存の仮想ネットワークの追加] を選択し、Application Gateway インスタンスの仮想ネットワークとサブネットを追加します。 メッセージが表示されたら、[現時点では 'Microsoft.KeyVault' サービス エンドポイントを構成しない] チェック ボックスがオフになっていることを確認して、
Microsoft.KeyVault
サービス エンドポイントがサブネットで有効になっていることを確認します。[はい] を選択し、信頼できるサービスが、キー コンテナーのファイアウォールをバイパスできるようにします。
Note
Azure CLI または PowerShell のいずれかを使用して ARM テンプレート経由で、あるいは Azure portal からデプロイされた Azure アプリケーション経由で、Application Gateway インスタンスをデプロイする場合、SSL 証明書は Base64 でエンコードされた PFX ファイルとしてキー コンテナー内に格納されます。 「デプロイ時に Azure Key Vault を使用して、セキュリティで保護されたパラメーター値を渡す」の手順を実行する必要があります。
特に、enabledForTemplateDeployment
を true
に設定することが重要です。 証明書は、パスワードがある場合とない場合があります。 パスワードが設定された証明書の場合、次の例は、Application Gateway の ARM テンプレート構成に対する properties
内の sslCertificates
エントリの構成を示しています。
"sslCertificates": [
{
"name": "appGwSslCertificate",
"properties": {
"data": "[parameters('appGatewaySSLCertificateData')]",
"password": "[parameters('appGatewaySSLCertificatePassword')]"
}
}
]
appGatewaySSLCertificateData
と appGatewaySSLCertificatePassword
の値は、「動的 ID でのシークレットの参照」で説明されているように、キー コンテナーから検索されます。 参照がどのように行われるかを確認するには、parameters('secretName')
から後方に参照をたどります。 証明書がパスワードレスである場合は、password
エントリを省略します。
Application Gateway リスナーを構成する
コンテナー アクセス ポリシー (Key Vault のアクセス許可モデル)
Azure portal で Application Gateway に移動し、[リスナー] タブを選択します。[リスナーの追加] を選択 (または既存のリスナーを選択) して、プロトコルに [HTTPS] を指定します。
[証明書の選択] で [新規作成] を選択し、[HTTPS 設定] の [キー コンテナーから証明書を選択する] を選択します。
証明書名には、Key Vault で参照する証明書のフレンドリ名を入力します。 使用するマネージド ID、キー コンテナー、証明書を選択します。
選択したら、[追加] (作成する場合) または [保存] (編集する場合) を選択して、参照先の Key Vault 証明書をリスナーに適用します。
Azure ロールベースのアクセス制御 (Key Vault のアクセス許可モデル)
Application Gateway は、アクセス許可モデルにロールベースのアクセス制御を用いて、Key Vault で参照された証明書をサポートします。 キー コンテナーを参照するための最初のいくつかの手順は、ARM テンプレート、Bicep、CLI、PowerShell のいずれかで行う必要があります。
Note
アクセス許可モデルがロールベースのアクセス制御の場合、その対象となる Azure Key Vault 証明書をポータル経由で指定することはできません。
この例では、PowerShell を使って新しい Key Vault シークレットを参照します。
# Get the Application Gateway we want to modify
$appgw = Get-AzApplicationGateway -Name MyApplicationGateway -ResourceGroupName MyResourceGroup
# Specify the resource id to the user assigned managed identity - This can be found by going to the properties of the managed identity
Set-AzApplicationGatewayIdentity -ApplicationGateway $appgw -UserAssignedIdentityId "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MyManagedIdentity"
# Get the secret ID from Key Vault
$secret = Get-AzKeyVaultSecret -VaultName "MyKeyVault" -Name "CertificateName"
$secretId = $secret.Id.Replace($secret.Version, "") # Remove the secret version so Application Gateway uses the latest version in future syncs
# Specify the secret ID from Key Vault
Add-AzApplicationGatewaySslCertificate -KeyVaultSecretId $secretId -ApplicationGateway $appgw -Name $secret.Name
# Commit the changes to the Application Gateway
Set-AzApplicationGateway -ApplicationGateway $appgw
コマンドの実行後、Azure portal の Application Gateway に移動し、[リスナー] タブを選択します。[リスナーの追加] をクリック (または既存のリスナーを選択) し、プロトコルとして HTTPS を指定します。
前の手順で命名した証明書を [証明書の選択] で選択します。 選択したら、[追加] (作成する場合) または [保存] (編集する場合) を選択して、参照先の Key Vault 証明書をリスナーに適用します。
Key Vault エラーの調査と解決
Note
Key Vault リソースの変更やアクセス権の取り消しを行うときには、Application Gateway リソースへの影響を考慮することが重要です。 Application Gateway が関連付けられているキー コンテナーにアクセスできないか、その中の証明書オブジェクトを見つけることができない場合、Application Gateway はそのリスナーを自動的に無効な状態に設定します。
このユーザー主導のイベントは、Application Gateway の Resource Health を表示することで識別できます。 詳細情報 を参照してください。
Azure Application Gateway は、Key Vault 上で更新された証明書バージョンを 4 時間ごとにポーリングするだけではありません。 すべてのエラーをログに記録し、Azure Advisor と統合して、構成の誤りを修正の推奨事項と共に表示します。
- Azure portal にサインインします
- Advisor を選びます
- 左側のメニューから [オペレーショナル エクセレンス] カテゴリを選びます。
- ゲートウェイでこの問題が発生している場合、「Application Gateway の Azure Key Vault に関する問題を解決する」というタイトルの推奨事項が表示されます。 上部のドロップダウン オプションから正しいサブスクリプションが選択されていることを確認します。
- 選ぶことで、エラーの詳細、関連付けられたキー コンテナー リソース、発生している問題を解決するためのトラブルシューティング ガイドが表示されます。
Azure Advisor や Resource Health を使ってこのようなイベントを特定することで、Key Vault の構成に関する問題をすばやく解決することができます。 Azure Advisor と Resource Health のアラートを利用して、問題が検出されたときに最新の情報を把握できるようにすることを強くお勧めします。
Advisor のアラートに対して、表示された推奨事項タイプから「Application Gateway の Azure Key Vault に関する問題を解決する」を使います。
次に示すように、Resource Health アラートを構成できます。