我正在尝试配置对包含多个容器的 Cosmos DB 数据库的访问。在我们的场景中,我们希望不同的用户团队仅在特定容器内拥有读写权限,如果他们尝试对另一个容器进行任何访问,那么他们应该被拒绝。
我一直在阅读有关 Cosmos 中基于角色的访问的内容,这听起来完全符合我们的需要。因此,我尝试为此创建自定义角色,但我对可用的不同权限感到困惑。
我无法嵌入图像,但下面的链接是我在 DocumentDB 中找到的容器的权限。
权限链接:
有诸如 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
第一步是为每个容器创建角色定义。您可以使用 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/