Поделиться через


Маркеры ресурсов в Azure Cosmos DB

Область применения: Nosql Mongodb Кассандра Гремлин Таблица

Маркеры ресурсов — это учетные данные, которые могут предоставлять конкретный доступ к контейнерам, разделам или элементам. Их можно настроить, чтобы предоставить определенные разрешения на основе каждого пользователя и работать непосредственно с REST API для Azure Cosmos DB. Маркеры ресурсов предоставляют альтернативу проверке подлинности с помощью первичных или вторичных ключей, настроенных для доступа только для чтения и записи или чтения.

Внимание

Корпорация Майкрософт рекомендует использовать самый безопасный поток проверки подлинности. Поток проверки подлинности, описанный в этой процедуре, требует очень высокого уровня доверия к приложению и несет риски, которые отсутствуют в других потоках. Этот поток следует использовать только в том случае, если другие более безопасные потоки, такие как управляемые удостоверения, не являются жизнеспособными.

Для Azure Cosmos DB проверка подлинности Microsoft Entra является самым безопасным механизмом проверки подлинности. Ознакомьтесь с соответствующим руководством по безопасности для API:

Собственные клиентские библиотеки Azure Cosmos DB обрабатывают создание и управление маркерами ресурсов напрямую. Однако при использовании REST необходимо самостоятельно создать заголовки запросов и проверки подлинности. Дополнительные сведения о создании заголовков проверки подлинности для REST см. в разделе "Управление доступом" в ресурсах Azure Cosmos DB в REST.

Необходимые компоненты

  • Существующая учетная запись Azure Cosmos DB
  • Пакет SDK для .NET 8 (или более поздней версии)

Создание пользователя и разрешения

Сначала необходимо создать пользователя с помощью пакета SDK Azure Cosmos DB для NoSQL. Затем можно создать разрешение для пользователя.

Примечание.

Многие API, такие как Cassandra и Gremlin, не предоставляют интерфейс с помощью собственных пакетов SDK для создания маркеров ресурсов. Чтобы использовать маркеры ресурсов, необходимо использовать пакеты SDK NoSQL для взаимодействия с конечной точкой учетной записи независимо от выбранного API.

  1. Получите конечную точку NoSQL и один из ключей чтения и записи учетной записи из существующей учетной записи.

  2. Добавьте версию Microsoft.Azure.Cosmos пакета 3.x в проект .NET.

    dotnet add package Microsoft.Azure.Cosmos --version 3.*
    
  3. Добавьте блок using для Microsoft.Azure.Cosmos пространства имен.

    using Microsoft.Azure.Cosmos;
    
  4. Создайте новый клиент, указывающий конечную точку учетной записи NoSQL и ключ записи для чтения.

    CosmosClient client = new(
        accountEndpoint: "<account-nosql-endpoint>",
        authKeyOrResourceToken: "<account-read-write-key>"
    );
    

    Примечание.

    Для учетной записи необходимо использовать конечную точку NoSQL, которая обычно находится в следующем формате: https://<account-name>.documents.azure.com:443/

  5. Получение объектов базы данных и контейнеров.

    Database database = client.GetDatabase("<database-name>");
    Container container = database.GetContainer("<container-name>");
    
  6. Создайте нового пользователя в базе данных, указав имя пользователя.

    User user = await database.CreateUserAsync("demo-user");
    
  7. Создайте новое разрешение для пользователя, указывающего режим разрешений (Read или All), уникальный идентификатор, контейнер с областью действия и необязательную область ключа секции.

    PermissionProperties permissionProperties = new(
        id: "read-permission",
        permissionMode: PermissionMode.All,
        container: container,
        resourcePartitionKey: new PartitionKey("partition-key-value")
    );
    Permission permission = await user.CreatePermissionAsync(permissionProperties);
    

Получение маркера ресурса

Теперь снова используйте пакет SDK NoSQL для получения маркера ресурса из учетной записи.

PermissionResponse response = await permission.ReadAsync();
string resourceToken = response.Resource.Token;

Использование маркера ресурса

Наконец, вы можете использовать собственный пакет SDK для API для использования маркера ресурса.

using Microsoft.Azure.Cosmos;

CosmosClient client = new(
    accountEndpoint: "<account-nosql-endpoint>",
    authKeyOrResourceToken: "<resource-token>"
);

Container container = client.GetContainer("<database-name>", "<container-name>");

var iterator = container.GetItemQueryIterator<dynamic>("SELECT * FROM c");

while (iterator.HasMoreResults)
{
    foreach (var item in await iterator.ReadNextAsync())
    {
        Console.WriteLine(item);
    }
}