Bicep 角色定义错误 - 名称为 <name> 的角色定义已存在,请为新角色定义选择一个唯一的名称

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

我正在尝试创建自定义角色定义,然后将我的应用程序分配给该定义。

我在模块中创建角色定义,然后单独分配。 但是,当我部署时,出现以下错误

名称为 [读写角色] 的角色定义已存在, 请为您的新角色定义选择一个唯一的名称。活动ID: ba570f19-95e0-4b8b-9595-163f8e4ee857, Microsoft.Azure.Documents.Common/2.14.0, Microsoft.Azure.Documents.Common/2.14.0, Microsoft.Azure.Documents.Common/2.14.0, Microsoft.Azure.Documents.Common/2.14.0, Microsoft.Azure.Documents.Common/2.14.0, Microsoft.Azure.Documents.Common/2.14.0(代码:BadRequest)

...后续部署。

param cosmosDbAccountName string

var dataActions = [
  'Microsoft.DocumentDB/databaseAccounts/readMetadata'
  'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery'
  'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*'
]

resource cosmosDbAccount 'Microsoft.DocumentDB/databaseAccounts@2023-11-15' existing = {
  name: cosmosDbAccountName
}

var roleDefinitionId = guid('sql-role-definition', cosmosDbAccount.id)

resource sqlRoleDefinition 'Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions@2024-02-15-preview' = {
  parent: cosmosDbAccount
  name: roleDefinitionId
  properties: {
    roleName: 'Read Write Role'
    type: 'CustomRole'
    assignableScopes: [
      cosmosDbAccount.id
    ]
    permissions: [
      {
        dataActions: dataActions
      }
    ]
  }
}

output id string = sqlRoleDefinition.id

然后,当我想为每个应用程序分配此值时,我会执行类似的操作


// this is passed in - based on the output from above module
param roleDefinitionId string

resource cosmosDbAccount 'Microsoft.DocumentDB/databaseAccounts@2023-11-15' existing = {
  name: cosmosDbAccountName

  resource sqlRoleAssignment 'sqlRoleAssignments@2023-11-15' = {
    name: guid(roleDefinitionId, principalId, cosmosDbAccount.id)
    properties: {
      roleDefinitionId: roleDefinitionId
      principalId: principalId
      scope: cosmosDbAccount.id
    }
  }
}

我的基础是: https://github.com/Azure/azure-quickstart-templates/blob/master/quickstarts/microsoft.documentdb/cosmosdb-sql-rbac/main.bicep

我怎样才能实现这个目标?

azure-bicep
1个回答
0
投票

我也遇到了类似的问题,为我找到的解决方案是,直接使用 guid 函数内联到 sqlRole 定义的 name 属性。 您可以尝试使用“name: guid('sql-role-definition', cosmosDbAccount.id)”而不是“name: roleDefinitionId”。 虽然 using 变量使代码更具可读性并且应该没有什么区别,但对我来说它是有效的。 我的工作代码:

resource snUIRoleAssignmentApiApp 'Microsoft.Authorization/roleAssignments@2022-04-01' = {

名称:guid(部署().名称,pApiAppServiceManagedIdentity) 范围: snExistingUiAppService 特性: { roleDefinitionId:resourceId('Microsoft.Authorization/roleDefinitions',pContributorRoleDefinitionResourceId) 主体ID:pApiAppServiceManagedIdentity 主体类型:“服务主体” } }

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