首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RBAC在Azure Cosmos DB帐户内创建数据库

使用RBAC在Azure Cosmos DB帐户内创建数据库
EN

Stack Overflow用户
提问于 2021-04-13 19:46:31
回答 1查看 334关注 0票数 0

我使用azure cosmos db的java版本4 SDK。我想用服务主体,而不是masterkey在azure cosmos db帐户内创建数据库。

根据以下文档,我分配给服务主体DocumentDB Account ContributorCosmos DB Operator内置角色定义:

https://docs.microsoft.com/pl-pl/azure/role-based-access-control/built-in-roles#cosmos-db-operator

我无法创建CosmosAsyncClient,直到我添加了新的自定义角色,它只包含读取元数据。上面提到的内置角色定义不包含它...

代码语言:javascript
复制
 TokenCredential ServicePrincipal = new ClientSecretCredentialBuilder()
            .authorityHost("https://login.microsoftonline.com")
            .tenantId(tenant_here)
            .clientId(clientid_here)
            .clientSecret(secret_from_above_client)
            .build();

 client = new CosmosClientBuilder()
                            .endpoint(AccountSettings.HOST)
                            .credential(ServicePrincipal)
                            .buildAsyncClient();

添加此角色后,创建了客户端,但下一步无法创建数据库实例和其中的容器。在访问控制中,我可以看到角色已被分配,因此服务主体在这里是正确的。

更重要的是,当我首先使用主密钥创建数据库和容器,然后想要使用服务主体读/写数据时,它可以工作(显然也是在添加了用于写入的自定义角色之后)。

然后我不知道为什么DocumentDB Account ContributorCosmos DB Operator不能用于创建数据库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-14 17:48:31

看起来这是java SDK中的一个错误,因为DocumentDB Account Contributor角色拥有Microsoft.DocumentDb/databaseAccounts/*权限,所以它足以创建数据库和容器(*是一个通配符,它还包括您提到的Microsoft.DocumentDB/databaseAccounts/readMetadata )。

当我测试使用具有此角色的服务主体来创建具有powershell New-AzCosmosDBSqlDatabase的数据库时,它工作得很好。当使用服务主体运行此命令时,它本质上使用Azure AD client credential flow来获取令牌,然后使用令牌来调用REST API - PUT https://management.azure.com/subscriptions/xxxx/resourceGroups/xxxx/providers/Microsoft.DocumentDB/databaseAccounts/xxxx/sqlDatabases/testdb1?api-version=2020-04-01来创建数据库,java SDK本质上也执行相同的操作,因此它也应该可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67074227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档