使用 REST API 添加或编辑 Azure 角色分配条件
Azure 角色分配条件是一项额外检查,你可选择将其添加到角色分配中,来提供更精细的访问控制。 例如,为了读取对象,你可添加要求对象具有特定标记的条件。 本文介绍如何使用 REST API 为角色分配添加、编辑、列出或删除条件。
先决条件
必须使用以下版本:
2020-03-01-preview
或更高版本2020-04-01-preview
或更高版本,如果要对角色分配使用description
属性2022-04-01
是第一个稳定版本
有关添加或编辑角色分配条件的先决条件的详细信息,请参阅条件的先决条件。
添加条件
若要添加角色分配条件,请使用角色分配 - Create REST API。 角色分配 - Create 包括与条件相关的以下参数。
参数 | 类型 | 说明 |
---|---|---|
condition |
字符串 | 可授予用户权限的条件。 |
conditionVersion |
字符串 | 条件语法的版本。 如果指定了 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}"
}
编辑条件
若要编辑现有角色分配条件,请使用添加角色分配条件所用的角色分配 - Create REST API。 以下是示例 JSON,其中 condition
和 description
已更新。 只有 condition
、conditionVersion
和 description
属性可以编辑。 必须指定其他属性以匹配现有角色分配。
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。
另外,如果想同时删除角色分配和条件,可以使用角色分配 - Delete API。 有关详细信息,请参阅删除 Azure 角色分配。