Azure Cosmos DB의 리소스 토큰
적용 대상: NoSQL MongoDB Cassandra Gremlin 테이블
리소스 토큰은 컨테이너, 파티션 키 또는 항목에 대한 특정 액세스를 제공할 수 있는 자격 증명입니다. 사용자 단위로 특정 권한을 부여하고 Azure Cosmos DB용 REST API로 직접 작업하도록 미세 조정할 수 있습니다. 리소스 토큰은 읽기/쓰기 또는 읽기 전용 액세스를 위해 구성된 기본 또는 보조 키를 사용하는 인증의 대안을 제공합니다.
Important
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. 이 절차에서 설명된 인증 흐름은 다른 흐름에는 없는 위험을 전달하며, 애플리케이션에서 매우 높은 신뢰 수준을 요구합니다. 이 흐름은 관리 ID와 같은 보다 안전한 다른 흐름을 실행할 수 없는 경우에만 사용되어야 합니다.
Azure Cosmos DB의 경우 Microsoft Entra 인증은 사용 가능한 가장 안전한 인증 메커니즘입니다. API에 대한 적절한 보안 가이드를 검토합니다.
네이티브 Azure Cosmos DB 클라이언트 라이브러리는 리소스 토큰 생성 및 관리를 직접 처리합니다. 그러나 REST를 사용하는 경우 요청/인증 헤더를 직접 생성해야 합니다. REST에 대한 인증 헤더를 만드는 방법에 대한 자세한 내용은 REST의 Azure Cosmos DB 리소스에 대한 액세스 제어를 참조하세요.
필수 조건
- 기존 Azure Cosmos DB 계정
- .NET 8 SDK(이상)
사용자 및 권한 만들기
먼저 NoSQL SDK용 Azure Cosmos DB를 사용하여 사용자를 만들어야 합니다. 그런 다음 사용자에 대한 권한을 만들 수 있습니다.
참고 항목
Cassandra 및 Gremlin과 같은 많은 API는 리소스 토큰을 만들기 위해 기본 SDK를 통해 인터페이스를 노출하지 않습니다. 리소스 토큰을 사용하려면 선택한 API에 관계없이 NoSQL SDK를 사용하여 계정 엔드포인트와 인터페이스해야 합니다.
기존 계정에서 NoSQL 엔드포인트 및 계정의 읽기/쓰기 키 중 하나를 가져옵니다.
패키지의
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>" );
참고 항목
일반적으로 다음과 같은 형식
https://<account-name>.documents.azure.com:443/
의 계정에 NoSQL 엔드포인트를 사용해야 합니다.데이터베이스 및 컨테이너 개체를 가져옵니다.
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);
}
}