Azure Role Base Access Control (

2024-06-22  本文已影响0人  Mc杰夫

基本

云平台资源的接入管理(access management)对于任何使用云的组织都是一个至关重要的功能。Azure的基于角色的接入控制(RBAC)帮用户管理了,1) 谁可以接入Azure资源,2)可以用这些资源做什么,3)可以接入哪些资源。

Azure的RBAC是建立在Azure资源管理器之上得到授权系统(authorisation system),为Azure 资源提供了精细化的接入管理。

RBAC的具体案例如下:

RBAC如何工作

使用RBAC做资源接入控制的方式是分配Azure角色,也就是如何执行和赋予权限(permission)。角色分批包括三个元素,1) security principal,2) role defition角色定义,和3) scope。

Azure引入多个内建的角色。比如VM贡献者,允许用户创建和使用VM。如果内建角色无法满足用户需求,可定制化角色。

Azure可在对象内部赋给数据的接入权限,比如一个用户有一个存储账户的读权限,该用户可读该存储张的blobs或消息。

Azure中可指定的scope分为四级:1. management group, 2. subscription, 3. resource group, 4. resource。Scope以母子关系组织,可在任何一级分配角色。


rbac-scope.png

(2024.06.24 Mon @KLN)

Role Definition

(2024.06.25 Tues)
角色定义,或简称角色(role)是一系列许可/权限的合集。角色定义列出了可以执行的动作,如读、写、删除,也列出了不可以对底层数据进行的动作。

在用Azure PowerShell显示时,角色定义包含下列字段:

用REST APIs或AZURE CLI显示,角色定义包含下列字段:

案例,在Azure PowerShell下的一个contributor role,以json形式表示如下

{
  "Name": "Contributor",
  "Id": "b24988ac-6180-42a0-ab88-20f7382dd24c",
  "IsCustom": false,
  "Description": "Grants full access to manage all resources, but does not allow you to assign roles in Azure RBAC, manage assignments in Azure Blueprints, or share image galleries.",
  "Actions": [
    "*"
  ],
  "NotActions": [
    "Microsoft.Authorization/*/Delete",
    "Microsoft.Authorization/*/Write",
    "Microsoft.Authorization/elevateAccess/Action",
    "Microsoft.Blueprint/blueprintAssignments/write",
    "Microsoft.Blueprint/blueprintAssignments/delete",
    "Microsoft.Compute/galleries/share/action",
    "Microsoft.Purview/consents/write",
    "Microsoft.Purview/consents/delete"
  ],
  "DataActions": [],
  "NotDataActions": [],
  "AssignableScopes": [
    "/"
  ],
  "Condition": null,
  "ConditionVersion": null
}

字段说明

Property Description
Name/roleName 角色的显示名
Id/name 该角色的唯一ID,内建角色在云平台内只有一个ID
id 角色的fully qualified unique ID,即便该角色被改名,角色ID也不会变,建议在代码中使用该id
IsCustom/roleType 角色是否为自定义角色,值为true/CustomeRole则为自定义,值为false/BuiltInRole则为内建角色
type 对象类型,设置为Microsoft.Authorization/roleDefinitions
Description/description 角色描述
Actions/actions 指定该角色可以执行的动作,列表形式
NotActions/notActions 指定了该角色不能执行的动作,列表形式
DataActions/dataActions 指定了该角色可以对对象中的数据执行的操作,列表形式
NotDataActions/notDataActions 指定了该角色不可以对对象中的数据执行的操作,列表形式
AssignableScopes/assignableScopes 指定了角色可以分配的scope(scopes that the role is available for assignment),列表形式
Condition/condition 对于内建角色,基于角色定义的动作的条件声明
ConditionVersion/conditionVersion 条件版本号,默认2.0,且为唯一支持版本

注意上面案例中的Actions字段,该字段的格式如下

{Company}.{ProviderName}/{resourceType}/{action}

其中的{action}部分指明了可以对该resourceType执行的动作,可能包含如下动作

Action substring Description
* wildcard符号含所有动作
read 读(GET)
write 写(PUT/PATCH)
action 诸如重启VM(POST)
delete 删除(DELETE)

另一个案例,在Azure CLI中表示的角色,以json形式表达

[
  {
    "assignableScopes": [
      "/"
    ],
    "createdBy": null,
    "createdOn": "2015-02-02T21:55:09.880642+00:00",
    "description": "Grants full access to manage all resources, but does not allow you to assign roles in Azure RBAC, manage assignments in Azure Blueprints, or share image galleries.",
    "id": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
    "name": "b24988ac-6180-42a0-ab88-20f7382dd24c",
    "permissions": [
      {
        "actions": [
          "*"
        ],
        "condition": null,
        "conditionVersion": null,
        "dataActions": [],
        "notActions": [
          "Microsoft.Authorization/*/Delete",
          "Microsoft.Authorization/*/Write",
          "Microsoft.Authorization/elevateAccess/Action",
          "Microsoft.Blueprint/blueprintAssignments/write",
          "Microsoft.Blueprint/blueprintAssignments/delete",
          "Microsoft.Compute/galleries/share/action",
          "Microsoft.Purview/consents/write",
          "Microsoft.Purview/consents/delete"
        ],
        "notDataActions": []
      }
    ],
    "roleName": "Contributor",
    "roleType": "BuiltInRole",
    "type": "Microsoft.Authorization/roleDefinitions",
    "updatedBy": null,
    "updatedOn": "2023-07-10T15:10:53.947865+00:00"
  }
]

Scope

(2024.06.26 Wed)
scope是一系列可以使用的资源。通过限制scope,可以限制security principal使用的资源。

Management group是比subscription更高一级的scope,但management group支持更多复杂分级。下图给出了一个management group和subscriptions的一个分级网络。


rbac-scope-management-groups.png

一个scope的案例如下,在Azure PowerShell中表示,scope id表示成属性的json。

RoleAssignmentId   : /subscriptions/<subscriptionId>/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01/pro
                     viders/Microsoft.Authorization/roleAssignments/<roleAssignmentId>
Scope              : /subscriptions/<subscriptionId>/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/azurestorage12345/blobServices/default/containers/blob-container-01
DisplayName        : User
SignInName         : user@contoso.com
RoleDefinitionName : Storage Blob Data Reader
RoleDefinitionId   : 2a2b9908-6ea1-4ae2-8e65-a410df84e7d1
ObjectId           : <principalId>
ObjectType         : User
CanDelegate        : False
Description        :
ConditionVersion   :
Condition          :

scope的格式
如果使用命令行分配角色,需要明确scope。在命令行中,scope表示为长字符串,用于识别角色分配的精确scope。在Azure portal中scope id往往用resource id来表示。

scope包含了一系列的字段,用斜线/做分割。可将该字符串想象成如下分解,其中用大括号{}标识的是可以自定义的内容。

/subscriptions
    /{subscriptionId}
        /resourcegroups
            /{resourceGroupName}
                /providers
                    /{providerName}
                        /{resourceType}
                            /{resourceSubType1}
                                /{resourceSubType2}
                                    /{resourceName}

Management groups比其他scope有着最广泛的scope。Management group的scope有下列形式:

/providers
    /Microsoft.Management
        /managementGroups
            /{managmentGroupName}

Steps to assign an Azure role

(2024.06.24 Mon)

  1. 确定谁需要access:user? group? service principal? or manged identity?这四者合称security principal。
  2. 选定合适的角色:可从Azure built-in roles中找,优先管理者角色(privileged administrator roles)包括Contributor,Owner,RBAC administrator和user access administrator。若超出built-in roles的范畴,可自定义角色。
  3. 确定scope
  4. 检查角色和scope
  5. 分配角色:一旦确定了security principal,角色和scope,即可分配角色。方式包括,portal, PowerShell,CLI,SDKs和REST APIs。
    每个subscription中有4000个角色分配,每个management group中有500个角色分配。具体数字可查RBAC limits。

How Azure RBAC determines if a user has access to a resource

placeholder

Reference

上一篇下一篇

猜你喜欢

热点阅读