我正在实现一个二头肌文件,用于使用自定义域部署 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 证书
但是,在此测试之后,我想自动化执行此操作,这样如果我提供证书名称和 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
数据中,以便在更新证书时它可以正常工作。有人可以阐明如何做到这一点并考虑到这种最佳实践吗?
谢谢
经过一些额外的研究,我提出了一个可行的解决方案,尽管这不是我所期望的,因为我打算检索整个秘密地址作为证书的属性。
如果我将 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管理中的自定义域字段中。
此外,由于它不包括版本,因此应该采用最后一个版本,因此如果翻新,它应该继续工作。