Azure Cosmos DB のデータへのアクセスをセキュリティで保護するSecure access to data in Azure Cosmos DB

この記事では、Microsoft Azure Cosmos DB に格納されたデータへのアクセスをセキュリティ保護する方法の概要を説明します。This article provides an overview of securing access to data stored in Microsoft Azure Cosmos DB.

Azure Cosmos DB では、2 種類のキーを使用してユーザーを認証し、そのデータとリソースへのアクセスを提供しています。Azure Cosmos DB uses two types of keys to authenticate users and provide access to its data and resources.

キーの種類Key type リソースResources
マスター キーMaster keys 次の管理リソースで使用されます。データベース アカウント、データベース、ユーザー、およびアクセス許可Used for administrative resources: database accounts, databases, users, and permissions
リソース トークンResource tokens 次のアプリケーション リソースで使用されます。コンテナー、ドキュメント、添付ファイル、ストアド プロシージャ、トリガー、UDFUsed for application resources: containers, documents, attachments, stored procedures, triggers, and UDFs

マスター キーMaster keys

マスター キーは、データベース アカウントのすべての管理リソースへのアクセスを提供します。Master keys provide access to all the administrative resources for the database account. マスター キー:Master keys:

  • アカウント、データベース、ユーザー、およびアクセス許可へのアクセスを提供します。Provide access to accounts, databases, users, and permissions.
  • コンテナーとドキュメントへのきめ細かいアクセスを提供するために使用することはできません。Cannot be used to provide granular access to containers and documents.
  • アカウントの作成時に作成されます。Are created during the creation of an account.
  • いつでも再生成することができます。Can be regenerated at any time.

各アカウントは、プライマリ キーとセカンダリ キーという 2 つのマスター キーで構成されます。Each account consists of two Master keys: a primary key and secondary key. 二重キーの目的は、キーを再生成 (ロール) して、アカウントとデータに継続的にアクセスできるようにするためです。The purpose of dual keys is so that you can regenerate, or roll keys, providing continuous access to your account and data.

Cosmos DB アカウント用の 2 つのマスター キーに加えて、2 つの読み取り専用キーがあります。In addition to the two master keys for the Cosmos DB account, there are two read-only keys. これらの読み取り専用キーは、アカウントの読み取り操作のみを許可します。These read-only keys only allow read operations on the account. 読み取り専用キーは、アクセス許可リソースを読み取るためのアクセスを提供しません。Read-only keys do not provide access to read permissions resources.

プライマリ、セカンダリ、読み取り専用、および読み取り/書き込みのマスター キーは、Azure Portal で取得と再生成を行うことができます。Primary, secondary, read only, and read-write master keys can be retrieved and regenerated using the Azure portal. 手順については、「アクセス キーを表示、コピー、および再生成する」を参照してください。For instructions, see View, copy, and regenerate access keys.

Azure portal でのアクセス制御 (IAM) - NoSQL データベースのセキュリティのデモ

キーのローテーションKey rotation

マスター キーのローテーション プロセスは単純です。The process of rotating your master key is simple.

  1. Azure portal に移動してセカンダリ キーを取得します。Navigate to the Azure portal to retrieve your secondary key.
  2. アプリケーションで、プライマリ キーをセカンダリ キーに置き換えます。Replace your primary key with your secondary key in your application. 全デプロイにわたるすべての Cosmos DB クライアントが直ちに再起動され、更新されたキーの使用が開始されることを確認します。Make sure that all the Cosmos DB clients across all the deployments are promptly restarted and will start using the updated key.
  3. Azure portal でプライマリ キーをローテーションします。Rotate the primary key in the Azure portal.
  4. 新しいプライマリ キーがすべてのリソースに対して動作することを検証します。Validate the new primary key works against all resource. キーのローテーション プロセスには、Cosmos DB アカウントのサイズに応じて、1 分未満から数時間かかる場合があります。Key rotation process can take any where from less than a minute to hours depending on the size of the Cosmos DB account.
  5. セカンダリ キーを新しいプライマリ キーに置き換えます。Replace the secondary key with the new primary key.

Azure portal でのマスター キーのローテーション - NoSQL データベースのセキュリティのデモ

マスター キーを使用するコード サンプルCode sample to use a master key

次のコード サンプルは、Cosmos DB アカウントのエンドポイントとマスター キーを使用して、DocumentClient のインスタンス化とデータベースの作成を行う方法を示しています。The following code sample illustrates how to use a Cosmos DB account endpoint and master key to instantiate a DocumentClient and create a database.

//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);

リソース トークン Resource tokens

リソース トークンは、データベース内のアプリケーション リソースへのアクセスを提供します。Resource tokens provide access to the application resources within a database. リソース トークン:Resource tokens:

  • コンテナー、パーティション キー、ドキュメント、添付ファイル、ストアド プロシージャ、トリガー、UDF へのアクセスを提供します。Provide access to specific containers, partition keys, documents, attachments, stored procedures, triggers, and UDFs.
  • ユーザーが特定のリソースへのアクセス許可を付与されたときに作成されます。Are created when a user is granted permissions to a specific resource.
  • アクセス許可リソースが POST、GET、または PUT 呼び出しで動作するときに作成されます。Are recreated when a permission resource is acted upon on by POST, GET, or PUT call.
  • ユーザー、リソース、およびアクセス許可用に特別に構築されたハッシュ リソース トークンを使用します。Use a hash resource token specifically constructed for the user, resource, and permission.
  • カスタマイズ可能な有効期間による時間の拘束があります。Are time bound with a customizable validity period. 既定の有効期間は 1 時間です。The default valid time span is one hour. ただし、トークンの有効期間は、最大 5 時間まで、明示的に指定することができます。Token lifetime, however, may be explicitly specified, up to a maximum of five hours.
  • マスター キーの代わりに使用できる安全な代替手段を提供します。Provide a safe alternative to giving out the master key.
  • クライアントが、付与されているアクセス許可に従って、Cosmos DB アカウント内のリソースを読み取り、書き込み、および削除できるようにします。Enable clients to read, write, and delete resources in the Cosmos DB account according to the permissions they've been granted.

リソース トークンは、自分のマスター キーを知らせたくないクライアントに、自分の Cosmos DB アカウント内のリソースへのアクセスを許可する場合に (Cosmos DB ユーザーとアクセス許可を作成することによって) 使用できます。You can use a resource token (by creating Cosmos DB users and permissions) when you want to provide access to resources in your Cosmos DB account to a client that cannot be trusted with the master key.

Cosmos DB リソース トークンにより、付与されたアクセス許可に従って、マスター キーや読み取り専用キーなしでクライアントによる Cosmos DB アカウント内のリソースの読み取り、書き込み、および削除を可能にする安全な代替手段が提供されます。Cosmos DB resource tokens provide a safe alternative that enables clients to read, write, and delete resources in your Cosmos DB account according to the permissions you've granted, and without need for either a master or read only key.

リソース トークンの要求、生成、およびクライアントへの配信に使用されることがある一般的な設計パターンを次に示します。Here is a typical design pattern whereby resource tokens may be requested, generated, and delivered to clients:

  1. 中間層サービスは、ユーザーの写真を共有するモバイル アプリケーションを提供するために設定します。A mid-tier service is set up to serve a mobile application to share user photos.

  2. 中間層サービスは、Cosmos DB アカウントのマスター キーを持ちます。The mid-tier service possesses the master key of the Cosmos DB account.

  3. 写真アプリは、エンド ユーザーのモバイル デバイスにインストールされます。The photo app is installed on end-user mobile devices.

  4. ログイン時に、写真アプリは、中間層サービスを使用してユーザー ID を確立します。On login, the photo app establishes the identity of the user with the mid-tier service. この ID 確立のしくみは完全にアプリケーションに依存します。This mechanism of identity establishment is purely up to the application.

  5. いったん ID が確立されると、中間層サービスはその ID に基づいてアクセス許可を要求します。Once the identity is established, the mid-tier service requests permissions based on the identity.

  6. 中間層サービスから、リソース トークンが電話アプリに返されます。The mid-tier service sends a resource token back to the phone app.

  7. 電話アプリはリソース トークンを引き続き使用し、リソース トークンによって定義されたアクセス許可を使用して、リソース トークンによって許可された間隔で Cosmos DB リソースに直接アクセスすることができます。The phone app can continue to use the resource token to directly access Cosmos DB resources with the permissions defined by the resource token and for the interval allowed by the resource token.

  8. リソース トークンの期限が切れると、それ以降の要求は、401 (承認されていない例外) を受け取ります。When the resource token expires, subsequent requests receive a 401 unauthorized exception. この時点で、電話アプリは ID を再度確立し、新しいリソース トークンを要求します。At this point, the phone app re-establishes the identity and requests a new resource token.

    Azure Cosmos DB リソース トークンのワークフロー

リソース トークンの生成と管理は、ネイティブ Cosmos DB クライアント ライブラリによって処理されます。ただし、REST を使用する場合は、要求/認証ヘッダーを構築する必要があります。Resource token generation and management is handled by the native Cosmos DB client libraries; however, if you use REST you must construct the request/authentication headers. REST 用の認証ヘッダーの作成については、Cosmos DB リソースのアクセス制御に関するページや、.NET SDK または Node.js SDK のソース コードを参照してください。For more information on creating authentication headers for REST, see Access Control on Cosmos DB Resources or the source code for our .NET SDK or Node.js SDK.

ブローカー リソース トークンを生成するために使用する中間層サービスの例については、ResourceTokenBroker アプリに関するページを参照してください。For an example of a middle tier service used to generate or broker resource tokens, see the ResourceTokenBroker app.

ユーザーUsers

Azure Cosmos DB ユーザーは、Cosmos データベースに関連付けらていれます。Azure Cosmos DB users are associated with a Cosmos database. 各データベースには、0 人以上の Cosmos DB ユーザーを含めることができます。Each database can contain zero or more Cosmos DB users. 次のコード サンプルは、Azure Cosmos DB .NET SDK v3 を使用して Cosmos DB ユーザーを作成する方法を示しています。The following code sample shows how to create a Cosmos DB user using the Azure Cosmos DB .NET SDK v3.

//Create a user.
Database database = benchmark.client.GetDatabase("SalesDatabase");

User user = await database.CreateUserAsync("User 1");

注意

各 Cosmos DB ユーザーには、ユーザーに関連付けられたアクセス許可の一覧を取得するために使用できる ReadAsync() メソッドがあります。Each Cosmos DB user has a ReadAsync() method that can be used to retrieve the list of permissions associated with the user.

アクセス許可Permissions

アクセス許可リソースはユーザーに関連付けられ、コンテナーおよびパーティション キー レベルで割り当てられます。A permission resource is associated with a user and assigned at the container as well as partition key level. 各ユーザーには、0 個以上のアクセス許可を含めることができます。Each user may contain zero or more permissions. アクセス許可リソースによって、ユーザーが特定のパーティション キー内の特定のコンテナーまたはデータにアクセスするときに必要なセキュリティ トークンへのアクセスが提供されます。A permission resource provides access to a security token that the user needs when trying to access a specific container or data in a specific partition key. アクセス許可リソースによって提供できるアクセス レベルは 2 つあります。There are two available access levels that may be provided by a permission resource:

  • All:ユーザーはリソースに対して完全なアクセス許可を持ちます。All: The user has full permission on the resource.
  • Read:ユーザーは、リソースの内容の読み取りのみを行えますが、リソースへの書き込み、更新、または削除の操作を実行することはできません。Read: The user can only read the contents of the resource but cannot perform write, update, or delete operations on the resource.

注意

ストアド プロシージャを実行するには、ストアド プロシージャを実行するコンテナーの All 権限を持つ必要があります。In order to run stored procedures the user must have the All permission on the container in which the stored procedure will be run.

アクセス許可を作成するコード サンプルCode sample to create permission

次のコード サンプルは、アクセス許可リソースを作成し、アクセス許可リソースのリソース トークンを読み取って、先ほど作成したユーザーにアクセス許可を関連付ける方法を示しています。The following code sample shows how to create a permission resource, read the resource token of the permission resource, and associate the permissions with the user created above.

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

ユーザーのアクセス許可を読み取るコード サンプルCode sample to read permission for user

次のコード スニペットは、上で作成したユーザーに関連付けられているアクセス許可を取得し、1 つのパーティション キーにスコープを指定して、ユーザーに代わって新しい CosmosClient をインスタンス化する方法を示しています。The following code snippet shows how to retrieve the permission associated with the user created above and instantiate a new CosmosClient on behalf of the user, scoped to a single partition key.

//Read a permission, create user client session.
PermissionProperties permissionProperties = await user.GetPermission("permissionUser1Orders")

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

ユーザーの追加とロールの割り当てを行うAdd users and assign roles

ユーザー アカウントに Azure Cosmos DB アカウントの閲覧者アクセス権を追加するには、サブスクリプションの所有者が Azure Portal で以下の手順を実行します。To add Azure Cosmos DB account reader access to your user account, have a subscription owner perform the following steps in the Azure portal.

  1. Azure Portal を開き、Azure Cosmos DB アカウントを選択します。Open the Azure portal, and select your Azure Cosmos DB account.
  2. [アクセス制御 (IAM)] タブをクリックし、 [+ ロール割り当ての追加] をクリックします。Click the Access control (IAM) tab, and then click + Add role assignment.
  3. [ロール割り当ての追加] ウィンドウの [ロール] ボックスで、 [Cosmos DB アカウントの閲覧者ロール] を選択します。In the Add role assignment pane, in the Role box, select Cosmos DB Account Reader Role.
  4. [アクセスの割り当て先] ボックスで、 [Azure AD のユーザー、グループ、またはアプリケーション] を選択します。In the Assign access to box, select Azure AD user, group, or application.
  5. ディレクトリで、アクセス権を付与するユーザー、グループ、またはアプリケーションを選択します。Select the user, group, or application in your directory to which you wish to grant access. ディレクトリは、表示名、電子メール アドレス、およびオブジェクト識別子を使用して検索できます。You can search the directory by display name, email address, or object identifiers. 選択したメンバー、グループ、またはアプリケーションが、選択したメンバー一覧に表示されます。The selected user, group, or application appears in the selected members list.
  6. [保存] をクリックします。Click Save.

そのエンティティが Azure Cosmos DB リソースを閲覧できるようになります。The entity can now read Azure Cosmos DB resources.

ユーザー データの削除またはエクスポートDelete or export user data

Azure Cosmos DB では、データベースまたはコレクションにあるすべての個人データを、検索、選択、変更、削除することができます。Azure Cosmos DB enables you to search, select, modify and delete any personal data located in database or collections. Azure Cosmos DB には、個人データを検索および削除する API があります。しかし、個人データを消去する API を使用してロジックを定義するのはユーザーの責任です。Azure Cosmos DB provides APIs to find and delete personal data however, it’s your responsibility to use the APIs and define logic required to erase the personal data. 各マルチモデル API (SQL、MongoDB、Gremlin、Cassandra、Table) では、個人データを検索および削除するメソッドを含む SDK をさまざまな言語で提供しています。Each multi-model API (SQL, MongoDB, Gremlin, Cassandra, Table) provides different language SDKs that contain methods to search and delete personal data. Time to Live (TTL) 機能を有効にすると、追加のコストの発生なしに、指定した期間後に自動的にデータを削除するようにすることもできます。You can also enable the time to live (TTL) feature to delete data automatically after a specified period, without incurring any additional cost.

注意

個人データの表示または削除については、「GDPR のための Azure データ サブジェクト要求」を参照してください。For information about viewing or deleting personal data, see Azure Data Subject Requests for the GDPR. GDPR の詳細については、Service Trust Portal の GDPR に関するセクションを参照してください。For more information about GDPR, see the GDPR section of the Service Trust portal.

次のステップNext steps