AzureのApplication GatewayでTLS 終端を行う場合、証明書が必要です。証明書はApplication Gateway作成時にアップロードできますが、Key Vaultに事前にアップロードしてそれを利用することもできます。
#PFX証明書
Key ValutにはPEMもしくはPFXの証明書をアップロードできますが、Application Gatewayで使用するにはPFXでなければいけないみたいです。
PEM形式の証明書をApplication Gatewayから使用するとこの様なエラーが出ます。
{
"code": "ApplicationGatewaySslCertificateInvalidData",
"message": "Data or Password for certificate /subscriptions/xxxxxxxxxxxxxxxxx/resourceGroups/xxxx/providers/Microsoft.Network/applicationGateways/test/sslCertificates/test is invalid."
}
#秘密鍵のフォーマット
AzureのKey Vaultに証明書をアップロードするには、秘密鍵のフォーマットがPKCS#8でないとはじかれるみたいです。
-----BEGIN RSA PRIVATE KEY-----
で始まっているファイルはPKCS#1で、これをそのまま使うとアップロードするときにエラーが出ます。PKCS#8は -----BEGIN PRIVATE KEY-----
で始まっています。 PKCS#1をPKCS#8に変更するには、以下のようして行えます。
openssl pkcs8 -topk8 -inform PEM -in ./private_v1.key -out private_v8.key -nocrypt
#PEMからPFX証明書を作成
PEMフォーマットの証明書からPFXフォーマットの証明書を作成するのは、以下の通りです。中間証明書がある場合はあらかじめpublic.pem
にコピーしておきます。
openssl pkcs12 -export -out my_cert.pfx -inkey private_v8.key -in public.pem
#Key Valutへアップロード
AzureのKey Valutへアップロードします。
ここでは証明書の名前をmycert
としておきます。
#Terraformから参照
アップロードした証明書はTerraformから以下のような感じで、参照できます。
#証明書を使用していますが、参照するときはazurerm_key_vault_secretを使います。
data "azurerm_key_vault_secret" "my_cert" {
name = "mycert" #アップロードした時の証明書の名前
key_vault_id = data.azurerm_key_vault.my_keyvault.id
}
resource "azurerm_application_gateway" "my_appgateway" {
...
ssl_certificate {
name = "mycompany.com"
key_vault_secret_id = data.azurerm_key_vault_secret.my_cert.id
}
}
詳しくはこちらに書かれていますが、
key_vault_secret_id - (Optional) Secret Id of (base-64 encoded unencrypted pfx)
PFX証明書のシークレットIDと指定されているので、azurerm_key_vault_secret
を使ってIDを取得します。
これで、Key Vaultにアップロードした証明書をApplication Gatewayから使用することができます。