无法为 cosmos db 分配 Azure 角色

Cannot assign Azure Role for cosmos db

我正在尝试将身份分配给 cosmos db read/write 的角色。我 运行 这个命令:

az role assignment create \
--assignee <sp_object_id> \
--role "00000000-0000-0000-0000-000000000002" \
--scope "/subscriptions/<subscriptionId>/resourceGroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<cosmos-db-name>"

这是我返回的错误:

The specified role definition with ID '00000000000000000000000000000002' does not exist.

我已经尝试过角色名称,但没有用。我已经尝试过GUI,但是这个角色在任何地方都看不到。

如何分配这个角色?

似乎普通的角色命令对cosmosdb不起作用,应该改用这个命令:

az cosmosdb sql role assignment create

Azure Cosmosdb 上的 RBAC 构建类似于 Azure RBAC,其中对数据操作有更精细的控制,而不是 Azure 资源管理。 permission model描述的很详细

在使用 SDK 与 数据平面 交互(例如,写入数据或读取数据)的实施过程中,应为应用程序提供精细的数据级别权限。 无法从门户授予数据平面级别权限。

以下命令提供对数据库中“container1”的“数据贡献者”权限,但仅对同一数据库中的“container2”提供“数据 reader”权限

az cosmosdb sql role assignment create --account-name ${{ variables.cosmosdbAccountName }} --resource-group ${{ variables.resourceGroupName }} --role-definition-name "Cosmos DB Built-in Data Contributor" --scope "/dbs/${{ variables.cosmosdbAccountDatabaseName }}/colls/${{ variables.cosmosdbContainerOneName }}" --principal-id $(umiObjectId)

az cosmosdb sql role assignment create --account-name ${{ variables.cosmosdbAccountName }} --resource-group ${{ variables.resourceGroupName }} --role-definition-name "Cosmos DB Built-in Data Reader" --scope "/dbs/${{ variables.cosmosdbAccountDatabaseName }}/colls/${{ variables.cosmosdbContainerTwoName }}" --principal-id $(umiObjectId)

同样,上面的示例仅显示了内置 CosmosDB 数据平面 RBAC 的用法,最好使用自定义角色在每个容器内进行更细粒度的访问。

NOTE: Azure CosmosDB data containers are not Azure Resources, meaning cannot be created by Azure Resource Model (ARM). So this permission model fulfills the authorization need with many security benefits