使用 REST API 添加或编辑 Azure 角色分配条件

Azure 角色分配条件是一项额外的检查,你可以选择添加到角色分配以提供更精细的访问控制。 例如,为了读取某个对象,可以添加要求该对象具有特定标记的条件。 本文介绍如何使用 REST API 为角色分配添加、编辑、列出或删除条件。

先决条件

必须使用以下版本:

  • 2020-03-01-preview 或更高版本
  • 如果想要将 description 属性用于角色分配,请使用 2020-04-01-preview 或更高版本
  • 2022-04-01 是第一个稳定版本

有关添加或编辑角色分配条件的先决条件的详细信息,请参阅 “条件先决条件”。

添加条件

若要添加角色分配条件,请使用 角色分配 - 创建 REST API。 角色分配 - 创建 包括以下与条件相关的参数。

参数 类型 Description
condition String 用户可以被授予权限的条件。
conditionVersion String 条件语法的版本。 如果只指定了 condition 而没有 conditionVersion,则版本设置为默认值 2.0。

使用以下请求和正文:

PUT https://management.chinacloudapi.cn/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
    "properties": {
        "roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
        "principalId": "{principalId}",
        "condition": "{condition}",
        "conditionVersion": "2.0",
        "description": "{description}"
    }
}

以下示例演示如何使用条件分配 存储 Blob 数据读取者 角色。 条件检查容器名称是否等于“blobs-example-container”。

PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))",
        "conditionVersion": "2.0",
        "description": "Read access if container name equals blobs-example-container"
    }
}

下面显示了输出示例:

{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "principalType": "User",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))",
        "conditionVersion": "2.0",
        "createdOn": "2022-07-20T06:20:44.0205560Z",
        "updatedOn": "2022-07-20T06:20:44.2955371Z",
        "createdBy": null,
        "updatedBy": "{updatedById}",
        "delegatedManagedIdentityResourceId": null,
        "description": "Read access if container name equals blobs-example-container"
    },
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
    "type": "Microsoft.Authorization/roleAssignments",
    "name": "{roleAssignmentId}"
}

编辑条件

若要编辑现有角色分配条件,请使用与用于添加角色分配条件相同的 角色分配 - 创建 REST API。 下面显示了一个示例 JSON,其中 conditiondescription 已更新。 只有conditionconditionVersiondescription属性可以被编辑。 必须指定其他属性以匹配现有角色分配。

PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))",
        "conditionVersion": "2.0",
        "description": "Read access if container name equals blobs-example-container or blobs-example-container2"
    }
}

列出条件

若要列出角色分配条件,请使用 角色分配 获取或列出 REST API。 有关详细信息,请参阅 使用 REST API 列出 Azure 角色分配

删除条件

若要删除角色分配条件,请编辑角色分配条件,并将条件和条件版本设置为空字符串或 null。

或者,如果要同时删除角色分配和条件,可以使用 角色分配 - 删除 API。 有关详细信息,请参阅删除 Azure 角色分配

后续步骤