💪
Azure Bicep で TLS 証明書付きの Application Gateway を作成する
Bicep で HTTPS Listener 付きの Application Gateway を作成する際の手順をメモとして残します。
前提条件
- 作業用端末に Azure CLI がインストールされていること(本手順は Linux 向けです)
- 有効な Azure サブスクリプションを持っていること
- 適切な権限を持っていること
クイックスタート
1. Azure CLI でサブスクリプションにサインインする
作業用端末で以下のコマンドを実施する。
az login --use-device-code
az account set -s "{YOUR_SUBSCRIPTION_ID}"
# 正しいサブスクリプションになっているか確認
az account show -o table
az group list -o table
2. リソースグループ作成
テスト用のリソースグループを作成する。
- Application Gateway や VNet 用のリソースグループ
- Key Vault 用のリソースグループ
today=$(date +%Y%m%d)
appgwResgp="test-agw-${today}"
keyvaultResgp="test-kv-${today}"
location=japaneast
az group create --name $appgwResgp --location $location
az group create --name $keyvaultResgp --location $location
3. Key Vault 作成
テスト用の Key Vault と PKCS#12 形式の自己署名証明書( CN=test.com )を作成する。また、Application Gateway から Key Vault の secrets を参照できるようにするためのユーザー割り当てマネージド ID を作成し、権限を付与する。Azure Portal から実施してもよい。
# Configure your resources
vaultName="test-kv-$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 12 | head -n 1)" && echo $vaultName
identityName="appgw-id-${today}"
# Create Azure key vault and certificate (can done through portal as well)
az keyvault create -n $vaultName -g $keyvaultResgp -l $location
vaultId=$(az keyvault show -n $vaultName -g $keyvaultResgp -o tsv --query "id") && echo $vaultId
az keyvault certificate create --vault-name $vaultName -n test-com -p "$(az keyvault certificate get-default-policy | sed 's/CN=CLIGetDefaultPolicy/CN=test.com/g')"
# Create user-assigned managed identity
az identity create -n $identityName -g $appgwResgp -l $location
identityPrincipal=$(az identity show -n $identityName -g $appgwResgp -o tsv --query "principalId") && echo $identityPrincipal
# Assign the identity the role of 'Key Vault Secrets Officer' to the Key Vault
az role assignment create --role "b86a8fe4-44ce-4948-aee5-eccb2c155cd7" --assignee $identityPrincipal --scope $vaultId
4. VNet と Application Gateway の作成
Bicep ファイル を利用し、VNet と Application Gateway を作成する。
-
以下からサンプルのコードをコピーして、
appgw.bicepというファイル名で保存する。
https://gist.github.com/yukit7s/59eb2e66cd6b3ff18f49063e1ad64743 -
resource.applicationGateWay.identity.userAssignedIdentities(132行目付近) の `` で囲まれた文字列について、前の手順で作成したユーザー割り当てマネージド ID のリソース ID に書き換える。マネージドIDのリソースID確認コマンドaz identity show -n $identityName -g $appgwResgp -o tsv --query "id" -
以下のコマンドを実行して、リソースを作成する。
bicepFile="appgw.bicep" operatorName=$(az account show --query user.name -o tsv | cut -d @ -f 1) && echo $operatorName # Key Vault の名前を確認しておく echo $vaultName # 作成前に what-if で確認する az deployment group what-if --resource-group $appgwResgp --template-file $bicepFile --name "${operatorName}_$(date +%Y%m%d_%H%M%S)" # "Please provide string value for 'keyVaultName'" には、前の手順で作成した Key Vault の名前を指定する # 作成する az deployment group create --resource-group $appgwResgp --template-file $bicepFile --name "${operatorName}_$(date +%Y%m%d_%H%M%S)"
リソースをクリーンアップする
不要になったリソースとリソース グループは、適切に削除してください。
az group delete -n $appgwResgp
az group delete -n $keyvaultResgp
おわりに
- Bicep で Application Gateway を作成する場合、パラメータやパラメータ間の依存関係が多く、ソースコードが複雑になりがちです。うまくいく Bicep ファイルの例をご紹介することで、みなさんの助けになれば幸いです。
- Key Vault を使わずに、Bicep ファイル内に証明書を直接埋め込むことも、できなくはないです。その場合は、 ApplicationGatewaySslCertificatePropertiesFormat の
dataに Base 64 でエンコードした PKCS#12 証明書の情報を埋め込むことになります。
Discussion