问题描述
我将 java 版本 4 SDK 用于 azure cosmos db。我想使用服务主体而不是主密钥在 azure cosmos db 帐户中创建数据库。
根据此文档,我分配给服务主体 DocumentDB Account Contributor
和 Cosmos DB Operator
内置角色定义:
https://docs.microsoft.com/pl-pl/azure/role-based-access-control/built-in-roles#cosmos-db-operator
我无法创建 CosmosAsyncClient,直到我添加了仅包含读取元数据的新自定义角色。上面提到的内置角色定义不包含它...
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 Contributor
和Cosmos DB Operator
对创建数据库不起作用。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)