Bicep - 将角色分配给不同资源组中的资源

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

我有一个模块,可将 Azure 服务总线发送者角色分配给应用服务的托管身份。 我需要将范围设置为服务总线的实际实例,但它与应用程序服务不在同一资源组中。

这是我的二头肌:

param principalId string
param roleDefinitionID string
param serviceBusName string

resource serviceBus 'Microsoft.ServiceBus/namespaces@2022-10-01-preview' existing = {
  name: serviceBusName
}

resource azureServiceBusDataRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
  scope: subscription()
  name: roleDefinitionID
}

resource AzureServiceBusRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(subscription().id, principalId, roleDefinitionID)
  scope: serviceBus
  properties: {
    principalId: principalId
    roleDefinitionId: azureServiceBusDataRoleDefinition.id 
    principalType: 'ServicePrincipal' 
  }
}

部署正在针对保存应用程序服务的资源组运行,因此无法找到服务总线。因此,我将上面的二头肌称为模块,并将范围设置为包含服务总线的资源组。

module azureServiceBusSenderPremissions './azureServiceBus-roleassignment.bicep' = if (useAzureServiceBus){
  name: '${deployment().name}-bbb-${appServiceName}'
  scope: resourceGroup(serviceBusResourceGroup)
  params:{
    principalId: appServicesResource.identity.principalId
    roleDefinitionID: '69a216fc-b8fb-44d8-bc22-1f3c2cd27a39'
    serviceBusName: serviceBusName
  }
}

这行不通。它仍然尝试在错误的资源组下查找服务总线。 我收到此错误:

资源“Microsoft.ServiceBus/namespaces/providers”下 找不到资源组“appservice-resourceGroup”。

azure azureservicebus azure-resource-manager azure-bicep azure-rbac
1个回答
0
投票

您的代码看起来很适合将

Azure Service Bus Sender
角色分配给另一个资源组中存在的应用程序服务的托管标识。

尝试以下步骤解决冲突并成功部署:

正如@Thomas所指出的,检查服务总线资源组参数是否准确,因为服务总线资源已存在。

还可以尝试在模块配置下添加

dependsOn
块以避免此类冲突,如下所示。

还在模块bicep代码中单独提供一个资源组名称参数,以便让服务总线所在的位置不会产生任何误解。

根据上述细微更改进行相应修改后,部署按预期正常工作。

module.bicep

param useAzureServiceBus bool = true
param  serviceBusResourceGroup  string = 'caronew'
resource appServicesResource 'Microsoft.Web/sites@2024-04-01' existing = {
  name: appServiceName
}
module azureServiceBusSenderPremissions 'appser.bicep' = if (useAzureServiceBus){
  name: '${deployment().name}-bbb-${appServiceName}'
  scope: resourceGroup(serviceBusResourceGroup)
  params:{
    principalId: appServicesResource.identity.principalId
    roleDefinitionID: '69a216fc-b8fb-44d8-bc22-1f3c2cd27a39'
    serviceBusName: serviceBusName
  }
  dependsOn: [
    appServicesResource
  ]
}
param principalId string
param roleDefinitionID string = '69a216fc-b8fb-44d8-bc22-1f3c2cd27a39'
param serviceBusName string = 'servicebusA'

resource serviceBus 'Microsoft.ServiceBus/namespaces@2022-10-01-preview' existing = {
  name: serviceBusName
}

resource azureServiceBusDataRoleDefinition 'Microsoft.Authorization/roleDefinitions@2022-04-01' existing = {
  scope: subscription()
  name: roleDefinitionID
}

resource AzureServiceBusRoleAssignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(subscription().id, principalId, roleDefinitionID)
  scope: serviceBus
  properties: {
    principalId: principalId
    roleDefinitionId: azureServiceBusDataRoleDefinition.id 
    principalType: 'ServicePrincipal' 
  }
}

部署成功:

enter image description here

enter image description here

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