如何定义 Azure 基于角色的访问控制 (RBAC)

发布日期:2026-07-02 12:08:05   来源 : 杭州电子商务研究院    浏览量 :11
杭州电子商务研究院 发布日期:2026-07-02 12:08:05  
11

介绍

Azure 允许云管理员使用基于角色的访问控制 (RBAC) 来管理对其资源的访问。这允许向用户、组和应用授予特定权限。如果正确实施,这将通过应用最小特权原则来增强安全性。但是,当您的云基础架构规模庞大,包含数十个应用和数百个用户时,以可重复和透明的方式管理所有这些权限将变得困难。

在本指南中,您将了解如何使用 Azure CLI 定义角色并分配角色。这允许您使用代码编写 RBAC 角色分配脚本以简化部署和维护。本指南假定您对 bash 有基本的了解。

角色定义和分配

在 Azure CLI 中,有两个组件需要管理:

  • 角色定义定义了一组权限。这些权限包括授予或拒绝受让人访问哪些数据和操作。
  • 角色分配是角色定义、范围和受让人之间的映射。受让人可以是 Active Directory 域中的用户、代表应用的服务主体或包含一个或多个用户的安全组。范围是一种属性,允许管理员将角色定义限制为订阅、资源组或特定的 Azure 资源。

需要澄清的是,您的 Azure 订阅已经具有一组内置角色定义。例如,您可以创建一个角色分配,将角色读取者分配给my-web-app资源组范围内的安全组开发人员。这允许开发人员安全组的所有成员查看my-web-app资源组中包含的资源,但不能进行任何更改。

在 Azure CLI 中创建角色分配

要分配角色,您需要三个组件:

  • 角色定义
  • 受让人
  • 分配的范围。如果不提供范围,则默认为整个订阅。

要将读者范围分配给开发人员安全组,请运行以下命令:

      # get a list of all roles definitions
az role definition list --query "sort_by([],&roleName)[].{name:name,roleType:roleType,roleName:roleName}" -o tsv

# save security group object's id to a variable
developers_security_group=$(az ad group list --query "[?displayName=='developers'].{objectId:objectId}" -o tsv)

# assign the role by omitting the scope. This defaults to entire subscription.
az role assignment create --role "Reader" --assignee $developers_security_group

# assign the role and specify a resource group scope.
az role assignment create --role "Reader" --assignee $developers_security_group --scope /subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx/resourceGroups/my-web-app
    

在 Azure CLI 中创建角色定义

您还可以创建自己的角色定义。当您有一组想要授予不同范围的应用程序的标准权限时,这很有用。例如,假设您有 100 个资源组,每个资源组内有两个应用程序。每个应用程序仅被允许从其自己的资源组内的存储帐户和 Cosmos DB 数据库读取数据的权限。如果您坚持使用内置角色,则需要为每个应用程序分别分配Cosmos DB 帐户读取器角色存储 Blob 数据读取器存储队列数据消息处理器权限。

要定义您自己的名为“自定义数据读取器”的角色,请运行以下命令:

      az role definition create --role-definition '{
        "Name": "Custom Data Reader",
        "Description": "Read data from storage accounts and cosmos DB Databases.",
        "Actions": [
          "Microsoft.DocumentDB/*/read",
          "Microsoft.Storage/storageAccounts/blobServices/containers/read",
          "Microsoft.Storage/storageAccounts/queueServices/queues/delete",
          "Microsoft.Storage/storageAccounts/queueServices/queues/read",
          "Microsoft.Storage/storageAccounts/queueServices/queues/write"
        ],
        "DataActions": [
          "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read",
          "Microsoft.Storage/storageAccounts/queueServices/queues/messages/delete",
          "Microsoft.Storage/storageAccounts/queueServices/queues/messages/read",
          "Microsoft.Storage/storageAccounts/queueServices/queues/messages/write"
        ],
        "NotDataActions": [
        ],
        "AssignableScopes": ["/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"]
    }'


# assign the new custom role to an app or group
az role assignment create --role "Custom Data Reader" --assignee $developers_security_group
    

使用托管标识

到目前为止,您已将角色分配给安全组。这很有用,因为它允许您一次管理多个用户的权限。

然而,在微服务环境中,您可能拥有数百个应用程序,但单个应用程序只需要用户可能拥有的角色的子集。在这种情况下,您需要单独识别应用程序并仅分配其所需的角色。

Microsoft 有一组支持托管标识的服务。这些身份使管理权限变得容易,因为您不需要自己管理密码或客户端凭据等机密信息。与用户一样,他们也可以分配角色。

要分配角色,首先查询身份,然后在适当的范围内创建角色分配。

      # query the principalId of a webapp
APP_IDENTITY=$(az webapp identity show -n my-web-app -g my-web-app --query "{principalId:principalId}" -o tsv)

# assign a role to that webapp
az role assignment create --role "Custom Data Reader" --assignee $developers_security_group --scope /subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx/resourceGroups/my-web-app
    

结论

RBAC 提供了一组丰富的功能,可让您控制组织内的访问。通过编写角色定义和分配脚本,可以简化大量角色的管理;您可以以可预测的方式进行广泛的更改。这还允许您通过源代码管理审核和查看更改。要进一步掌握这些技能,请阅读有关Azure AD 托管标识的更多信息。

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据