如何在Bicep中获取Key Vault密钥作为Synapse Workspace创建输入
错误原因
getSecret() 函数仅支持对Bicep中声明的资源类型对象调用,你当前是对Key Vault模块的返回对象调用该函数,所以触发类型不匹配报错。
替代实现方案
方案1:通过existing关键字引用已创建的Key Vault资源后调用getSecret
- 首先修改你的
modules/keyVault.bicep模块,在末尾新增输出,暴露Key Vault的名称和资源ID:
// modules/keyVault.bicep 末尾添加如下代码 output keyVaultName string = keyVault.name output keyVaultId string = keyVault.id
- 在主Bicep文件的Key Vault模块定义后,声明已存在的Key Vault资源对象:
// 主文件中keyVault模块定义完成后添加 resource existingKeyVault 'Microsoft.KeyVault/vaults@2023-02-01' existing = { name: keyVault.outputs.keyVaultName scope: resourceGroup() }
- 替换synapse模块中密码参数的赋值逻辑,使用新声明的existingKeyVault对象调用
getSecret,入参为你存储的密钥名称:
synapseSqlAdministratorLoginPassword: existingKeyVault.getSecret('synapseSQLAdministratorLoginPassword')
注意:需要提前在Key Vault的访问配置中开启「允许Azure资源管理器访问以获取机密」,同时部署使用的身份需要有该密钥的
get权限。
方案2:直接构造密钥的资源ID传入(更简洁)
Bicep会自动识别Key Vault密钥的资源ID为安全参数,无需明文传递,也不需要额外声明资源对象,直接替换参数赋值即可:
synapseSqlAdministratorLoginPassword: resourceId('Microsoft.KeyVault/vaults/secrets', keyVault.outputs.keyVaultName, 'synapseSQLAdministratorLoginPassword')
额外优化建议
你当前定义的keyVaultSecret模块中,keyVaultSecretName参数无实际使用价值,可以直接删除。
内容的提问来源于stack exchange,提问作者caroline101
相关产品推荐
相关产品推荐

