如何将访问策略添加到位于二头肌另一个资源组中的 Key Vault?

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

我已经注意到这个答案中提供的建议。 向位于另一个资源组中的 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”。允许的属性 包括“断言”、“取决于”。

这可能吗?我可以很好地引用现有的密钥库。我什至可以将秘密复制到我的二头肌文件中的其他位置。为什么我无法仅因为它位于不同的资源组中而无法为其添加访问策略?

azure azure-keyvault azure-bicep
1个回答
0
投票

您应该将

keyvault
accessPolicy
视为一个整体,然后使用二头肌模块。

总而言之,如果您要使用子资源部署到另一个范围,则此处需要 Bicep 模块

注意:

keyvault.bicep
文件中的选项1和选项2都有效,选择你想要的。

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
© www.soinside.com 2019 - 2024. All rights reserved.