你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Bicep 创建或更新 Azure 自定义角色

如果 Azure 内置角色不满足组织的特定需求,你可以创建自己的自定义角色。 本文介绍如何使用 Bicep 创建或更新自定义角色。

Bicep 是一种特定于域的语言 (DSL),使用声明性语法来部署 Azure 资源。 它提供简明的语法、可靠的类型安全性以及对代码重用的支持。 Bicep 会针对你的 Azure 基础结构即代码解决方案提供最佳创作体验。

若要创建自定义角色,请指定角色名称、角色权限以及可使用角色的位置。 在本文中,你将创建一个名为“自定义角色 - RG 读者”的角色,其资源权限可在订阅或更低层次的范围内分配。

先决条件

若要创建自定义角色,必须拥有创建自定义角色的权限,例如用户访问权限管理员

还必须拥有一个有效的 Azure 订阅。 如果没有,可以在开始之前创建一个免费帐户

查阅 Bicep 文件

本文中使用的 Bicep 文件来自 Azure 快速入门模板。 Bicep 文件具有四个参数和一个资源部分。 这四个参数为:

  • 默认值为 ["Microsoft.Resources/subscriptions/resourceGroups/read"] 的操作数组。
  • 默认值为空的 notActions 数组。
  • 默认值为 Custom Role - RG Reader 的角色名称。
  • 默认值为 Subscription Level Deployment of a Role Definition 的角色说明。

将可分配此自定义角色的范围设置为当前订阅。

自定义角色需要唯一 ID。 可以使用 guid() 函数生成 ID。 由于自定义角色还需要租户的唯一显示名称,因此可以使用角色名称作为 guid() 函数的参数来创建确定性 GUID。 如果以后需要使用同一 Bicep 文件更新自定义角色,则确定性 GUID 非常有用。

targetScope = 'subscription'

@description('Array of actions for the roleDefinition')
param actions array = [
  'Microsoft.Resources/subscriptions/resourceGroups/read'
]

@description('Array of notActions for the roleDefinition')
param notActions array = []

@description('Friendly name of the role definition')
param roleName string = 'Custom Role - RG Reader'

@description('Detailed description of the role definition')
param roleDescription string = 'Subscription Level Deployment of a Role Definition'

var roleDefName = guid(roleName)

resource roleDef 'Microsoft.Authorization/roleDefinitions@2022-04-01' = {
  name: roleDefName
  properties: {
    roleName: roleName
    description: roleDescription
    type: 'customRole'
    permissions: [
      {
        actions: actions
        notActions: notActions
      }
    ]
    assignableScopes: [
      subscription().id
    ]
  }
}

Bicep 文件中定义了以下资源:

部署 Bicep 文件

  1. 将该 Bicep 文件另存为本地计算机上的 main.bicep。

  2. 使用 roleDefinition 的操作创建名为 myActions 的变量。

    $myActions='["Microsoft.Resources/subscriptions/resourceGroups/read"]'
    
  3. 使用 Azure CLI 或 Azure PowerShell 来部署该 Bicep 文件。

    az deployment sub create --location eastus --name customRole --template-file ./main.bicep --parameters actions=$myActions
    

部署完成后,应会看到一条指出部署成功的消息。

查看已部署的资源

使用 Azure 门户、Azure CLI 或 Azure PowerShell 验证是否已创建自定义角色。

az role definition list --name "Custom Role - RG Reader"

更新自定义角色

与创建自定义角色类似,可以使用 Bicep 来更新现有的自定义角色。 若要更新自定义角色,需要指定需要更新的角色。 如果以前在 Bicep 中创建了具有确定性的唯一角色 ID 的自定义角色,则可以使用相同的 Bicep 文件并仅使用显示名称来指定自定义角色。

  1. 指定更新的操作。

    $myActions='["Microsoft.Resources/resources/read","Microsoft.Resources/subscriptions/resourceGroups/read"]'
    
  2. 使用 Azure CLI 或 Azure PowerShell 更新自定义角色。

    az deployment sub create --location eastus --name customrole --template-file ./main.bicep --parameters actions=$myActions roleName="Custom Role - RG Reader"
    

    注意

    可能需要几分钟时间才能传播更新的自定义角色。

清理资源

如果不再需要自定义角色,请使用 Azure 门户、Azure CLI 或 Azure PowerShell 将其移除。

az role definition delete --name "Custom Role - RG Reader"

后续步骤