一种以编程方式为Azure Application Gateway导入TLS证书的更安全的方法

时间:2019-01-15 00:23:16

标签: azure azure-powershell azure-keyvault azure-application-gateway

我们正在为Web应用程序资源组的新部署自动创建Azure应用程序网关。不幸的是,AppGW似乎不像Azure App Service那样直接支持密钥保管库证书(ref),并且看来添加证书(至少在Powershell中)的唯一方法是通过New-AzureRmApplicationGatewaySslCertificate。该cmdlet仅具有“ CertificateFile”参数,该参数需要一个物理文件路径,我真的希望避免将证书存储在磁盘上。

目前,我们将证书和证书密码都存储在Key Vault中,AppGW脚本的相关部分正在执行此操作:

  1. 通过Get-AzureKeyVaultSecret(仍以SecureString形式)获取证书的导出密码
  2. 通过Get-AzureKeyVaultCertificate(也保持安全格式)获取证书本身

到目前为止一切顺利,数据以相当安全的格式存储在内存中。

  1. 将步骤1的SecretValue转换为纯文本(eww),因为下一步需要使用纯文本字符串密码
  2. 使用证书的Export方法和纯文本密码,将证书写入磁盘(eww)上的PFX文件中
  3. 使用New-AzureRmApplicationGatewaySslCertificate导入PFX文件
  4. 创建其余的AppGW
  5. 删除PFX文件

不得不从SecureStrings和Key Vault证书之类的东西上剥离所有的安全性,这使我很难受。我知道AppGW还不支持Key Vault证书,但我会满足于至少仅将这些内容存储在内存中,而不必将证书写入磁盘。当然,我只是缺少明显的东西,并且有一种更安全的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

我们正在做的-将证书作为base64字符串存储在keyvault和证书密码中,并使用嵌套的arm模板在部署时提取这些值并将其分配给应用程序网关。这样,您就不必在本地存储\拉动任何东西。一切都以自动化方式在云中发生。