Azure Cosmos DB のリソース トークン
適用対象: NoSQL MongoDB Cassandra Gremlin Table
リソース トークンは、コンテナー、パーティション キー、または項目への特定のアクセスを提供できる資格情報です。 ユーザーごとに特定のアクセス許可を付与し、Azure Cosmos DB の REST API と直接連携するように微調整できます。 リソース トークンは、読み取り/書き込みアクセスまたは読み取り専用アクセス用に構成されたプライマリ キーまたはセカンダリ キーを使用した認証の代替手段となります。
重要
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明されている認証フローでは、アプリケーションで非常に高い信頼度が要求されるため、他のフローには存在しないリスクが伴います。 このフローは、マネージド ID など、より安全なフローが実行可能ではない場合にのみ使用してください。
Azure Cosmos DB の場合、Microsoft Entra 認証は、使用可能な最も安全な認証メカニズムです。 API の適切なセキュリティ ガイドを確認します。
ネイティブの Azure Cosmos DB クライアント ライブラリは、リソース トークンの生成と管理を直接処理します。 ただし、REST を使用する場合は、要求/認証ヘッダーを自分で作成する必要があります。 REST の認証ヘッダーの作成の詳細については、「rest の Azure Cosmos DB リソースに対するアクセス制御」を参照してください。
前提条件
- 既存の Azure Cosmos DB アカウント
- .NET 8 SDK (またはそれ以降)
ユーザーとアクセス許可を作成する
まず、Azure Cosmos DB for NoSQL SDK を使用してユーザーを作成する必要があります。 その後、ユーザーのアクセス許可を作成できます。
Note
Cassandra や Gremlin などの多くの API は、リソース トークンを作成するためにネイティブ SDK を介してインターフェイスを公開しません。 リソース トークンを使用するには、選択した API に関係なく、NoSQL SDK を使用してアカウント エンドポイントとインターフェイスする必要があります。
既存のアカウントから、 NoSQL エンドポイント およびアカウントの read-write キーの 1 つを取得します。
Microsoft.Azure.Cosmos
パッケージの 3.x バージョンを .NET プロジェクトに追加します。dotnet add package Microsoft.Azure.Cosmos --version 3.*
Microsoft.Azure.Cosmos
名前空間の using ブロックを追加します。using Microsoft.Azure.Cosmos;
アカウント NoSQL エンドポイントと読み取り/書き込みキーを指定する新しいクライアントを作成します。
CosmosClient client = new( accountEndpoint: "<account-nosql-endpoint>", authKeyOrResourceToken: "<account-read-write-key>" );
Note
通常は次の形式の NoSQL エンドポイントをアカウントに使用する必要があります:
https://<account-name>.documents.azure.com:443/
。データベース オブジェクトとコンテナー オブジェクトを取得します。
Database database = client.GetDatabase("<database-name>"); Container container = database.GetContainer("<container-name>");
ユーザーの名前を指定して、データベース内に新しいユーザーを作成します。
User user = await database.CreateUserAsync("demo-user");
アクセス許可モード (
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);
リソース トークンを取得する
ここで、NoSQL SDK をもう一度使用して、アカウントからリソース トークンを取得します。
PermissionResponse response = await permission.ReadAsync();
string resourceToken = response.Resource.Token;
リソース トークンを使用する
最後に、API のネイティブ SDK を使用してリソース トークンを使用できます。
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);
}
}