Я использую java версию 4 SDK для лазурного космоса 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
не работают для создания базы данных.