我正在尝试为身份分配一个角色来读取/写入cosmos db。我运行这个命令:
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,但是这个角色在任何地方都看不到。
我如何分配这个角色?
Azure Cosmosdb 上的 RBAC 的构建方式与 Azure RBAC 类似,其中对数据操作进行更精细的控制,而不是 Azure 资源管理。 权限模型详细描述。
在使用 SDK 与 dataplane 交互(例如写入数据或读取数据)的实现过程中,应为应用程序提供细粒度的数据级别权限。 无法从门户授予数据平面级别权限。
以下命令提供对数据库中“container1”的“数据贡献者”权限,但仅对同一数据库中的“container2”提供“数据读取者”权限
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 的使用,最好在每个容器中使用自定义角色进行更细粒度的访问。
注意:Azure CosmosDB 数据容器不是 Azure 资源,这意味着不能由 Azure 资源模型 (ARM) 创建。所以这个权限模型满足了授权需求并具有许多安全优势
看来普通的角色命令对cosmosdb不起作用,应该使用这个命令:
az cosmosdb sql role assignment create
这如何在 Terraform 中完成?我遇到了同样的错误。