我已经注意到这个答案中提供的建议。 向位于另一个资源组中的 Key Vault 添加访问策略
它说一个建议是尝试将 keyvault 的完整资源 ID 硬编码到访问策略步骤中。当我尝试这个时:
resource Keyvault 'Microsoft.KeyVault/vaults@2021-04-01-preview' existing = {
name: KeyvaultName
scope: resourceGroup(ResourceGroup)
}
resource accessPolicy 'Microsoft.KeyVault/vaults/accessPolicies@2021-04-01-preview' = {
name: '${Keyvault.id}/add'
properties: {
accessPolicies: [
{
tenantId: subscription().tenantId
objectId: UamiObjectId
permissions: {
keys: []
secrets: ['get']
certificates: []
}
}
]
}
}
失败了
错误:代码=无效模板;消息=部署模板验证 失败:'模板资源 '/subscriptions/subId/resourceGroups/rgName/providers/Microsoft.KeyVault/vaults/KeyVaultName/add' 对于类型“Microsoft.KeyVault/vaults/accessPolicies”不正确 段长度。嵌套资源类型必须具有相同数量的 段作为其资源名称。根资源类型必须有段 长度比其资源名称大一。
下一个建议是尝试将订阅 ID 包含为范围,但这似乎是不允许的,因为验证失败并显示“:
错误 BCP037: 类型的对象不允许使用属性“范围” “Microsoft.KeyVault/vaults/accessPolicies”。允许的属性 包括“断言”、“取决于”。
这可能吗?我可以很好地引用现有的密钥库。我什至可以将秘密复制到我的二头肌文件中的其他位置。为什么我无法仅因为它位于不同的资源组中而无法为其添加访问策略?
您应该将
keyvault
和accessPolicy
视为一个整体,然后使用二头肌模块。
总而言之,如果您要使用子资源部署到另一个范围,则此处需要 Bicep 模块。
注意:
文件中的选项1和选项2都有效,选择你想要的。keyvault.bicep
keyvault.bicep
param KeyvaultName string
param UamiObjectId string
resource Keyvault 'Microsoft.KeyVault/vaults@2021-04-01-preview' existing = {
name: KeyvaultName
}
// option 1
resource accessPolicy 'Microsoft.KeyVault/vaults/accessPolicies@2021-04-01-preview' = {
name: '${KeyvaultName}/add'
properties: {
accessPolicies: [
{
tenantId: subscription().tenantId
objectId: UamiObjectId
permissions: {
keys: []
secrets: ['get']
certificates: []
}
}
]
}
}
// //option 2
// resource accessPolicy1 'Microsoft.KeyVault/vaults/accessPolicies@2021-04-01-preview' = {
// name: 'add'
// parent: Keyvault
// properties: {
// accessPolicies: [
// {
// tenantId: subscription().tenantId
// objectId: UamiObjectId1
// permissions: {
// keys: []
// secrets: ['get']
// certificates: []
// }
// }
// ]
// }
// }
主要.二头肌
param keyvaultRgName string
param keyvaultName string
param uamiObjectId string
module dataCollectionRuleAssociateModule './keyvault.bicep' = {
scope: resourceGroup(keyvaultRgName)
name: 'testDeploy'
params: {
KeyvaultName: keyvaultName
UamiObjectId: uamiObjectId
}
}
部署.ps1
$deploymentRgName = "rg1"
$keyVaultRgName = "rg2"
$keyvaultName = "xxx"
$uamiObjectId = "1111111-33333-4d9f-bb80-2222222"
##
$param = @{
keyvaultRgName = $keyVaultRgName
keyvaultName = $keyvaultName
uamiObjectId = $uamiObjectId
}
New-AzResourceGroupDeployment -Name "keyvaultest" -ResourceGroupName $deploymentRgName -TemplateFile ".\main.bicep" -TemplateParameterObject $param