我正在尝试创建自定义角色定义,然后将我的应用程序分配给该定义。
我在模块中创建角色定义,然后单独分配。 但是,当我部署时,出现以下错误
名称为 [读写角色] 的角色定义已存在, 请为您的新角色定义选择一个唯一的名称。活动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
}
}
}
我怎样才能实现这个目标?
我也遇到了类似的问题,为我找到的解决方案是,直接使用 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 主体类型:“服务主体” } }