はじめに
Application Gateway v2 SKU では、サーバー証明書用の Key Vault との統合をサポートしている。Application Gateway の SSL証明書設定に Key Vault を利用すること、証明書更新時のリスク低減などのメリットがある。詳細は公式ドキュメントを参照されたい。
https://docs.microsoft.com/ja-jp/azure/application-gateway/key-vault-certs
本記事では、Azure CLIを使って Application Gateway と Key Vault を連携し、SSL証明書を登録する手順を解説する。
手順
手順概要
以下に手順概要を示す。なお、Application Gateway とSSL証明書はあらかじめ用意してあり、操作端末には Azure CLI がインストールされているものとする。
- 初期設定
- Key Vault コンテナーを作成する
- マネージド ID を作成する
- 作成したマネージドIDを Application Gateway にアサインする
- Key Vault のアクセスポリシーにマネージド ID を追加する
- SSL証明書の登録
- SSL証明書を Key Vault にインポートし、証明書の sid(バージョン情報除外) を変数に格納する
- Key Vault に格納された証明書を Application Gateway に登録する
手順説明
# Configure your resources
appgwName=""
appgwResgp=""
keyvaultResgp=""
vaultName=""
location=""
sslCertName="" # SSL証明書の Azure Portal での表示名になる
# Azure にログイン
az login
az account set -s "{SUBSCRIPTION_ID}"
#### 1. 初期設定 ####
# One time operation, create Azure key vault and certificate (can done through portal as well)
az keyvault create -n $vaultName -g $keyvaultResgp --enable-soft-delete -l $location
# One time operation, create user-assigned managed identity
az identity create -n appgw-id -g $appgwResgp -l $location
identityID=$(az identity show -n appgw-id -g $appgwResgp -o tsv --query "id")
identityPrincipal=$(az identity show -n appgw-id -g $appgwResgp -o tsv --query "principalId")
# One time operation, assign the identity to Application Gateway
az network application-gateway identity assign \
--gateway-name $appgwName \
--resource-group $appgwResgp \
--identity $identityID
# One time operation, assign the identity GET secret access to Azure Key Vault
az keyvault set-policy \
-n $vaultName \
-g $keyvaultResgp \
--object-id $identityPrincipal \
--secret-permissions get
#### 2. SSL証明書の登録 ####
# For each new certificate, create a cert on keyvault and add unversioned secret id to Application Gateway
az keyvault certificate import \
--file {ssl sertification file} \
--password {ssl sertification password} \
--name $sslCertName \
--vault-name $vaultName
versionedSecretId=$(az keyvault certificate show -n $sslCertName --vault-name $vaultName --query "sid" -o tsv)
unversionedSecretId=$(echo $versionedSecretId | cut -d'/' -f-5) # remove the version from the url
# For each new certificate, Add the certificate to AppGw
az network application-gateway ssl-cert create \
-n $sslCertName \
--gateway-name $appgwName \
--resource-group $appgwResgp \
--key-vault-secret-id $unversionedSecretId # ssl certificate with name "$sslCertName" will be configured on AppGw
#### 参考:証明書確認コマンド ####
az keyvault certificate list --vault-name $vaultName
az network application-gateway ssl-cert list -g $appgwResgp --gateway-name $appgwName
上記の手順で Application Gateway にSSL証明書が登録される。
AKSでAGIC連携している場合は、デプロイマニフェストに appgw.ingress.kubernetes.io/appgw-ssl-certificate: {SSL証明書の登録名}
を追加することで、SSL証明書を利用できる。 詳細は 【Azure】AGICでSSL証明書を利用する【AKS】 を参照頂きたい。
ポイント
-
az network application-gateway ssl-cert create の --key-vault-secret-id に指定するパラメータは、certificates id ではなく、secret id(のバージョン情報を削除した値) である。
×:https://example-key.vault.azure.net/certificates/test-com
○:https://example-key.vault.azure.net/secrets/test-com
-
参考*2 には、AKSのAGICで利用するサービスプリンシパルにマネージドIDの "Managed Identity Operator" 権限を付与する手順が記載されている。必要性がわからなかったため本記事ではスキップしている。
参考
-
Key Vault 証明書を使用した TLS 終端
https://docs.microsoft.com/ja-jp/azure/application-gateway/key-vault-certs -
Configure certificate from Key Vault to AppGw
https://azure.github.io/application-gateway-kubernetes-ingress/features/appgw-ssl-certificate/ -
Application Gateway v2 の Key Vault 連携を試してみた
https://blog.shibayan.jp/entry/20190428/1556442190