使用Bicep将证书从Azure密钥库添加到Azure容器环境

hi3rlvi2  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(141)

我需要一种机制来从Keyvault下载.pfx证书,然后将其上载到Azure容器环境,所有操作均通过Bicep完成。这将最大限度地减少证书更新时的任何手动干预。
我当前正在使用powershell手动转换的base64编码值向Azure容器环境添加证书。如下所示:

resource certificate 'Microsoft.App/managedEnvironments/certificates@2022-06-01-preview' = {
  parent: env
  location: location
  name: 'ta-cert'
  properties: {
    password: certificatePassword
    value: '<base64>'
  }
}

我想尝试和实现的是从Keyvault下载pfx文件,并将其转换为base64(可能通过使用bicep中嵌入的powershell命令),所有这些都在Bicep文件中,然后可以在上面的代码中使用。
如果有人这样做过,将真的很感激看到实施。

nwlls2ji

nwlls2ji1#

如果您的证书作为证书存储在密钥存储库中,则它已采用base64编码,并可作为密钥存储库机密进行访问(请参阅证书的组成)。
您可以使用bicep getSecret函数将证书传递到容器应用程序环境:

param containerAppEnvName string
param location string = resourceGroup().location
param certificateName string

@secure()
param certificateValue string

resource containerAppEnv 'Microsoft.App/managedEnvironments@2022-03-01' existing = {
  name: containerAppEnvName
}

resource certificate 'Microsoft.App/managedEnvironments/certificates@2022-06-01-preview' = {
  parent: containerAppEnv
  location: location
  name: certificateName
  properties: {
    // Dont need password here
    value: certificateValue
  }
}

从您的main.bicep模板中,您可以按如下方式调用它:

param containerAppEnvName string
param location string = resourceGroup().location

param keyVaultName string
param keyVaultCertificateName string

// Get a reference to key vault
resource keyVault 'Microsoft.KeyVault/vaults@2019-09-01' existing = {
  name: keyVaultName
}

module certificate 'containerapp-env-certificate.bicep' = {
  name: 'containerapp-env-certificate'
  params: {
    containerAppEnvName: containerAppEnvName
    certificateName: 'ta-cert'
    location: location
    // Get the certificate as a base64 secret
    certificateValue: keyVault.getSecret(keyVaultCertificateName)    
  }
}

相关问题