使用 Keyvault 证书部署用于 API 管理的主机名配置

问题描述 投票:0回答:1

我正在实现一个二头肌文件,用于使用自定义域部署 API 管理。与此自定义域相关的证书必须从密钥库中获取。

我已设法使用以下硬编码值使其正常工作:

hostnameConfigurations: [{
  type: 'Proxy'
  hostName: 'my-url.my-domain.com'
  keyVaultId: <secret-identifier-from-certificate-in-keyvault>
  certificateSource: 'KeyVault'
  defaultSslBinding: true
  negotiateClientCertificate: false
}]

“secret-identifier-from-certificate-in-keyvault”的值取自 keyvault 证书

certificate fields from the keyvault

但是,在此测试之后,我想自动化执行此操作,这样如果我提供证书名称和 keyvault ID,我就能够检索此数据,因为每个环境中的数据都不同。

我尝试像这样访问证书数据:

resource keyVaultCertificate 'Microsoft.KeyVault/vaults/certificates@2022-07-01' existing = {
  parent: keyVault
  name: certificateName
}

然后使用二头肌中的相应值

keyVaultId: keyVaultCertificate.id
但没有用。

另外,与秘密相同:

resource keyVaultSecret 'Microsoft.KeyVault/vaults/secrets@2022-07-01' existing = {
  parent: keyVault
  name: certificateName
}

并使用

keyVaultId: keyVaultSecret.id
,也没有成功,收到错误“无效参数:不是有效的 KeyVault 秘密 Url”

我怎样才能从天蓝色门户获得与我在证书中看到的相同的数据,但作为我的二头肌的一部分?

此外,我读到最好不要将版本包含在

keyVaultId
数据中,以便在更新证书时它可以正常工作。有人可以阐明如何做到这一点并考虑到这种最佳实践吗?

谢谢

azure certificate azure-keyvault azure-api-management azure-custom-domain
1个回答
0
投票

经过一些额外的研究,我提出了一个可行的解决方案,尽管这不是我所期望的,因为我打算检索整个秘密地址作为证书的属性。

如果我将 keyvault 地址与证书数据连接起来,如下所示:

resource keyVault 'Microsoft.KeyVault/vaults@2022-07-01' existing = {
  name: keyVaultName
}

resource apiManagementName_resource = {

   [... some other settings ...]

   hostnameConfigurations: [
   {
     type: 'Proxy'
     hostName: 'my-url.my-domain.com'
     keyVaultId: '${keyVault.properties.vaultUri}secrets/${certificateName}'
     certificateSource: 'KeyVault'
     defaultSslBinding: true
     negotiateClientCertificate: false
   }
}

然后将证书正确附加到api管理中的自定义域字段中。

此外,由于它不包括版本,因此应该采用最后一个版本,因此如果翻新,它应该继续工作。

© www.soinside.com 2019 - 2024. All rights reserved.