azure - 仅在 Cosmos DB 中为特定容器添加权限

标签 azure permissions containers azure-cosmosdb roles

我正在尝试配置对包含多个容器的 Cosmos DB 数据库的访问。在我们的场景中,我们希望不同的用户团队仅在特定容器内拥有读写权限,如果他们尝试对另一个容器进行任何访问,那么他们应该被拒绝。

我一直在阅读有关 Cosmos 中基于角色的访问的内容,这听起来完全符合我们的需要。因此,我尝试为此创建自定义角色,但我对可用的不同权限感到困惑。

我无法嵌入图像,但下面的链接是我在 DocumentDB 中找到的容器的权限。

权限链接:
Link to permissions

有诸如 Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write 之类的权限,但听起来这些权限是用于容器本身的实际维护,而不是容器中的数据。图中下面的集合提到了容器的吞吐量,因此这似乎也不正确。

我之前看到的 Material 提到这些角色只能通过 PowerShell 之类的工具创建,但是当我在门户中看到这些角色时,我认为这可能已经过时了,但情况仍然如此吗?

本质上,我想要的设置是:

  • 角色 1 仅有权读取和写入容器 1 中的项目
  • 角色 2 仅有权读取和写入容器 2 中的项目

另外,作为另一个快速的附带问题。权限是累加的吗?那么,我是否可以仅出于访问该容器的目的创建此角色,然后将其添加到另一个更通用的角色,或者我是否需要包含您在 Cosmos DB 帐户读取者角色等内容中找到的基本权限?

最佳答案

您拥有的权限用于对 Cosmos DB 资源进行管理操作。您正在寻找的权限记录在 Configure role-based access control with Azure Active Directory for your Azure Cosmos DB account

Comos DB data plane permissions

第一步是为每个容器创建角色定义。您可以使用 Built-in role definitions例如 Cosmos DB 内置数据贡献者,或者如果您想要限制谨慎的操作,您可以使用 az cli、PowerShell 或 ARM/Bicep 构建自定义角色定义。

一旦您有了角色定义,您就可以Create role assignments对于每个容器到 AAD 租户内的任何服务主体。

最后一步是Initialize our SDK with Azure AD 。这适用于我们的 .NET、Java、Python 和 JS SDK。您需要确保您使用的是正确版本的 SDK,因此如果使用旧版本,最好进行升级。要通过 AAD 进行身份验证,您需要创建客户端 secret 凭证。创建新实例时传递给 Cosmos 客户端的 token 。

最后,当您想通过 Cosmos 数据浏览器访问数据时,您将需要使用自定义查询字符串。您可能还希望限制只能通过 AAD 访问您的数据。为此,您需要将 ARM 模板部署到您的帐户(请务必先执行 GET,以免意外破坏您的资源)。然后将 "disableLocalAuth": true 添加到 databaseAccount 资源的属性中。

关于azure - 仅在 Cosmos DB 中为特定容器添加权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73034129/

相关文章:

c++ - 是否可以确定传递的迭代器是否属于关联标准容器?

Azure存储生命周期管理: filtering based on file extension

azure - 使用 AzCopy 将数据从一个存储帐户复制到另一个存储帐户?

Azure CI/CD - Azure 私有(private) Npm 注册表 - 无法进行身份验证,需要 : Bearer authorization_uri=https://login. windows.net

java - AccessController 没有考虑类的 ProtectionDomain

android - Android 4.4 Kitkat 中的内部文件选择器

amazon-web-services - 如何监控 ECS 任务循环?

Azure Application Insights - 用于查询 Azure 门户外部数据的 API

node.js - NPM 错误 : Error: EROFS: read-only file system, mkdir '/npm'

css - 尝试在一个容器内对齐 3 个图像 - 是否存在 float 问题?