Azure Cosmos DB에서 데이터 액세스 보호

적용 대상: NoSQL

이 문서에서는 Azure Cosmos DB의 데이터 액세스 제어 개요를 제공합니다.

Azure Cosmos DB는 데이터에 대한 액세스를 제어하는 세 가지 방법을 제공합니다.

액세스 제어 형식 특성
기본/보조 키 관리 또는 데이터 작업을 허용하는 공유 비밀입니다. 읽기-쓰기 및 읽기 전용 변형이 모두 제공됩니다.
RBAC(역할 기반 액세스 제어) 인증을 위해 Microsoft Entra ID를 사용하는 세분화된 역할 기반 권한 모델입니다.
리소스 토큰 네이티브 Azure Cosmos DB 사용자 및 권한을 기반으로 하는 세분화된 권한 모델입니다.

기본/보조 키

기본/보조 키는 데이터베이스 계정의 모든 관리 리소스에 대한 액세스 권한을 제공합니다. 각 계정은 두 개의 키(주 키와 보조 키)로 구성됩니다. 이중 키를 사용하는 목적은 키를 다시 생성하거나 롤링하여 계정 및 데이터에 지속적인 액세스를 제공하는 것입니다. 기본/보조 키에 대해 자세히 알아보려면 Azure Cosmos DB의 데이터베이스 보안 개요를 참조하세요.

계정 키를 보려면 왼쪽 메뉴에서 를 선택합니다. 그런 다음 각 키 오른쪽에 있는 보기 아이콘을 선택합니다. 선택한 키를 복사하려면 복사 단추를 선택합니다. 나중에 키별로 동일한 아이콘을 선택하여 아이콘을 숨길 수 있습니다. 그러면 아이콘이 숨기기 단추로 업데이트됩니다.

Screenshot of the View account key for Azure Cosmos DB.

키 순환 및 다시 생성

참고 항목

다음 섹션에서는 API for NoSQL의 키를 순환하고 다시 생성하는 단계를 설명합니다. 다른 API를 사용하는 경우 API for MongoDB, API for Cassandra, API for Gremlin 또는 API for Table 섹션을 참조하세요.

계정의 키 업데이트 및 키 다시 생성을 모니터링하려면 Azure Cosmos DB 계정의 키 업데이트 및 키 다시 생성 모니터링을 참조하세요.

키 순환 및 다시 생성 프로세스는 간단합니다. 먼저 애플리케이션이 기본 키 또는 보조 키를 일관되게 사용하여 Azure Cosmos DB 계정에 액세스하는지 확인합니다. 그런 다음, 다음 섹션의 단계를 수행합니다.

  1. Azure Portal에서 Azure Cosmos DB 계정으로 이동합니다.

  2. 왼쪽 메뉴에서 를 선택한 다음 보조 키 오른쪽에 있는 줄임표에서 보조 키 다시 생성을 선택합니다.

    Screenshot that shows the Azure portal showing how to regenerate the secondary key.

  3. 새 보조 키가 Azure Cosmos DB 계정에 대해 일관되게 작동하는지 확인합니다. 키 다시 생성은 Azure Cosmos DB 계정의 크기에 따라 1분에서 몇 시간까지 걸릴 수 있습니다.

  4. 애플리케이션에서 기본 키를 보조 키로 바꿉니다.

  5. Azure Portal로 돌아가서 기본 키 다시 생성을 트리거합니다.

    Screenshot that shows the Azure portal showing how to regenerate the primary key.

기본 키를 사용할 코드 샘플

다음 코드 샘플은 Azure Cosmos DB 계정 엔드포인트 및 기본 키를 사용하여 CosmosClient를 인스턴스화하는 방법을 보여 줍니다.

// Read the Azure Cosmos DB endpointUrl and authorization keys from config.
// These values are available from the Azure portal on the Azure Cosmos DB account blade under "Keys".
// Keep these values in a safe and secure location. Together they provide Administrative access to your Azure Cosmos DB account.

private static readonly string endpointUrl = ConfigurationManager.AppSettings["EndPointUrl"];
private static readonly string authorizationKey = ConfigurationManager.AppSettings["AuthorizationKey"];

CosmosClient client = new CosmosClient(endpointUrl, authorizationKey);

역할 기반 액세스 제어

Azure Cosmos DB는 다음을 수행할 수 있는 기본 제공 RBAC 시스템을 공개합니다.

  • Microsoft Entra ID를 사용하여 데이터 요청을 인증합니다.
  • 세분화된 역할 기반 권한 모델을 사용하여 데이터 요청에 권한을 부여합니다.

Azure Cosmos DB RBAC는 다음과 같은 상황에서 이상적인 액세스 제어 방법입니다.

  • 기본 키와 같은 공유 비밀을 사용하지 않고 토큰 기반 인증 메커니즘을 사용하는 것을 선호합니다.
  • Microsoft Entra ID를 사용하여 요청을 인증하려고 합니다.
  • ID에서 수행할 수 있는 데이터베이스 작업을 엄격하게 제한하려면 세분화된 권한 모델이 필요합니다.
  • 액세스 제어 정책을 복수 ID에 할당할 수 있는 "역할"로 구체화하려고 합니다.

Azure Cosmos DB RBAC에 대해 자세히 알아보려면 Azure Cosmos DB 계정에 대한 역할 기반 액세스 제어 구성을 참조하세요.

Azure Cosmos DB for MongoDB에 대한 RBAC를 구성하기 위한 정보 및 샘플 코드는 Azure Cosmos DB for MongoDB에 대한 역할 기반 액세스 제어 구성을 참조하세요.

리소스 토큰

리소스 토큰은 데이터베이스 내에서 애플리케이션 리소스에 대한 액세스를 제공합니다. 리소스 토큰:

  • 특정 컨테이너, 파티션 키, 문서 및 첨부 파일에 대한 액세스를 제공합니다.
  • 사용자에게 특정 리소스에 대한 사용 권한이 부여된 경우 생성됩니다.
  • POST, GET 또는 PUT 호출에 의해 권한 리소스가 작동될 때 다시 만들어집니다.
  • 사용자, 리소스 및 사용 권한을 위해 특별히 구성된 해시 리소스 토큰을 사용합니다.
  • 시간은 사용자 지정 가능한 유효 기간으로 제한됩니다. 기본 유효 시간은 1시간입니다. 그러나 토큰 수명은 최대 24시간까지 명시적으로 지정할 수 있습니다.
  • 기본 키를 전달하기 위한 안전한 대안을 제공합니다.
  • 클라이언트가 부여된 권한에 따라 Azure Cosmos DB 계정의 리소스를 읽고, 쓰고, 삭제할 수 있도록 합니다.

Azure Cosmos DB 계정에 있는 리소스에 대한 액세스 권한을 기본 키로 신뢰할 수 없는 클라이언트에 제공하려는 경우 Azure Cosmos DB 사용자 및 권한을 만들어서 리소스 토큰을 사용할 수 있습니다.

Azure Cosmos DB 리소스 토큰은 사용자가 부여한 권한에 따라 기본 또는 읽기 전용 키에 대한 요구 없이 Azure Cosmos DB 계정에서 클라이언트가 리소스를 읽고, 쓰고, 삭제할 수 있게 해주는 안전한 대안을 제공합니다.

다음은 리소스 토큰을 요청하고 생성하여 클라이언트에 배달할 수 있는 일반적인 디자인 패턴입니다.

  1. 중간 계층 서비스는 모바일 애플리케이션이 사용자 사진을 공유하도록 설정됩니다.

  2. 중간 계층 서비스는 Azure Cosmos DB 계정의 기본 키를 소유합니다.

  3. 사진 앱은 사용자 모바일 디바이스에 설치됩니다.

  4. 로그인하면 사진 앱이 중간 계층 서비스를 사용해서 사용자의 ID를 설정합니다. ID 설정 방식은 순전히 애플리케이션에 달려 있습니다.

  5. ID가 설정된 다음에는 중간 계층 서비스 요청 권한이 ID를 기반으로 합니다.

  6. 중간 계층 서비스는 리소스 토큰을 다시 전화 앱으로 전송합니다.

  7. 전화 앱은 계속 리소스 토큰을 사용해서 리소스의 토큰으로 정의된 권한을 사용하여 리소스 토큰에서 허용하는 간격으로 Azure Cosmos DB 리소스에 직접 액세스합니다.

  8. 리소스 토큰이 만료되면 후속 요청은 401 허가되지 않은 예외를 수신합니다. 이 지점에서는 전화 앱이 ID 를 다시 설정하고 새로운 리소스 토큰을 요청합니다.

    Screenshot that shows an Azure Cosmos DB resource tokens workflow.

리소스 토큰 생성 및 관리는 네이티브 Azure Cosmos DB 클라이언트 라이브러리에서 처리됩니다. 그러나 REST를 사용하는 경우 요청/인증 헤더를 구성해야 합니다. REST에 대한 인증 헤더를 만드는 방법에 대한 자세한 내용은 Azure Cosmos DB 리소스에 대한 Access Control 또는 .NET SDK 또는 Node.js SDK에 대한 소스 코드를 참조하세요.

리소스 토큰을 생성하거나 broker하는 데 사용되는 중간 계층 서비스의 예는 ResourceTokenBroker 앱을 참조하세요.

사용자

Azure Cosmos DB 사용자는 Azure Cosmos DB 데이터베이스와 연결됩니다. 각 데이터베이스는 0개 이상의 Azure Cosmos DB 사용자를 포함할 수 있습니다. 다음 코드 샘플에서는 Azure Cosmos DB .NET SDK v3을 사용하여 Azure Cosmos DB 사용자를 만드는 방법을 보여줍니다.

// Create a user.
Database database = client.GetDatabase("SalesDatabase");
User user = await database.CreateUserAsync("User 1");

참고 항목

각 Azure Cosmos DB 사용자에는 사용자와 연결된 권한 목록을 검색하는 데 사용할 수 있는 ReadAsync() 메서드가 있습니다.

권한

권한 리소스는 사용자와 연결되고 특정 리소스에 할당됩니다. 각 사용자는 0개 이상의 권한을 포함할 수 있습니다. 권한 리소스는 사용자가 특정 파티션 키의 특정 컨테이너 또는 데이터에 액세스하려고 시도할 때 필요한 보안 토큰에 대한 액세스 권한을 제공합니다. 권한 리소스에서 제공될 수 있는 사용 가능한 액세스 수준은 다음 두 가지입니다.

  • 전체: 사용자가 리소스에 대한 모든 권한을 갖습니다.
  • 읽기: 사용자가 리소스 내용을 읽을 수만 있고 리소스에 대해 쓰기, 업데이트 또는 삭제 작업을 수행할 수 없습니다.

참고 항목

저장 프로시저를 실행하려면 사용자에게 저장 프로시저가 실행되는 컨테이너에 대한 모든 권한이 있어야 합니다.

데이터 평면 요청에서 진단 로그를 사용하도록 설정하면 사용 권한에 해당하는 다음 두 가지 속성이 로깅됩니다.

  • resourceTokenPermissionId - 해당 속성은 지정한 리소스 토큰 권한 ID를 나타냅니다.

  • resourceTokenPermissionMode: 이 속성은 리소스 토큰을 만들 때 설정한 권한 모드를 나타냅니다. 권한 모드는 All 또는 Read 등의 값을 가질 수 있습니다.

사용 권한을 만드는 코드 샘플

다음 코드 샘플은 권한 리소스를 만들고, 권한 리소스의 리소스 토큰을 읽고, 방금 만든 사용자와 사용 권한을 연결시키는 방법을 보여 줍니다.

// Create a permission on a container and specific partition key value
Container container = client.GetContainer("SalesDatabase", "OrdersContainer");
await user.CreatePermissionAsync(
    new PermissionProperties(
        id: "permissionUser1Orders", 
        permissionMode: PermissionMode.All, 
        container: container,
        resourcePartitionKey: new PartitionKey("012345")));

사용자에 대한 권한을 읽는 코드 샘플

다음 코드 조각은 만든 사용자와 연결된 권한을 검색하고 단일 파티션 키로 범위가 지정된 사용자에 대한 새 CosmosClient를 인스턴스화하는 방법을 보여 줍니다.

// Read a permission, create user client session.
Permission permission = await user.GetPermission("permissionUser1Orders").ReadAsync();

CosmosClient client = new CosmosClient(accountEndpoint: "MyEndpoint", authKeyOrResourceToken: permission.Resource.Token);

RBAC와 리소스 토큰의 차이점

Subject RBAC 리소스 토큰
인증 Microsoft Entra ID 사용. 네이티브 Azure Cosmos DB 사용자 기반.
Microsoft Entra ID와 리소스 토큰을 통합하려면 Microsoft Entra ID와 Azure Cosmos DB 사용자를 연결하기 위한 추가 작업이 필요합니다.
Authorization 역할 기반: 역할 정의는 허용되는 작업을 매핑하고 복수 ID에 할당할 수 있습니다. 권한 기반: 각 Azure Cosmos DB 사용자에 대해 데이터 액세스 권한을 할당해야 합니다.
토큰 범위 Microsoft Entra 토큰은 요청자의 ID를 전달합니다. 이 ID는 권한 부여를 수행하기 위해 할당된 모든 역할 정의와 일치합니다. 리소스 토큰은 특정 Azure Cosmos DB 리소스에 대해 특정 Azure Cosmos DB 사용자에게 부여된 권한을 전달합니다. 다양한 리소스에 대한 권한 부여 요청에는 다양한 토큰이 필요할 수 있습니다.
토큰 새로 고침 Microsoft Entra 토큰은 만료되면 Azure Cosmos DB SDK에 의해 자동으로 새로 고쳐집니다. 리소스 토큰 새로 고침은 지원되지 않습니다. 리소스 토큰이 만료되면 새 리소스 토큰을 발급해야 합니다.

사용자 추가 및 역할 할당

사용자 계정에 Azure Cosmos DB 계정 독자 액세스를 추가하려면 구독 소유자가 Azure Portal에서 다음 단계를 수행하도록 합니다.

  1. Azure Portal을 열고, Azure Cosmos DB 계정을 선택합니다.

  2. 액세스 제어(IAM) 를 선택합니다.

  3. 추가>역할 할당 추가를 선택하여 역할 할당 추가 페이지를 엽니다.

  4. 다음 역할을 할당합니다. 자세한 단계는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

    설정
    역할 Cosmos DB 계정 읽기 권한자.
    다음에 대한 액세스 할당 사용자, 그룹 또는 서비스 주체
    멤버 액세스 권한을 부여하려는 사용자 디렉터리의 사용자, 그룹 또는 애플리케이션입니다.

    Screenshot that shows the Add role assignment page in the Azure portal.

이제 엔터티는 Azure Cosmos DB 리소스를 읽을 수 있습니다.

사용자 데이터 삭제 또는 내보내기

데이터베이스 서비스로 Azure Cosmos DB를 사용하면 데이터베이스 또는 컨테이너에 있는 모든 데이터를 검색, 선택, 수정 및 삭제할 수 있습니다. 제공된 API를 사용하고 필요한 경우 개인 데이터를 찾아 삭제하는 데 필요한 논리를 정의하는 것은 사용자의 책임입니다.

각 다중 모델 API(SQL, MongoDB, Gremlin, Cassandra 또는 Table)는 사용자 지정 조건자에 기반한 데이터를 검색하고 삭제하는 방법이 포함된 여러 가지 언어 SDK를 제공합니다. 또한 TTL(수명) 기능을 사용하도록 설정하면 추가 비용 없이 지정된 기간이 지나면 자동으로 데이터를 삭제할 수 있습니다.

참고 항목

개인 데이터의 보기 또는 삭제에 대한 자세한 내용은 GDPR에 대한 Azure 데이터 주체 요청을 참조하세요. GDPR에 대한 자세한 내용은 Microsoft Trust Center의 GDPR 섹션Service Trust 포털의 GDPR 섹션을 참조하세요.

다음 단계