Azure Cosmos DB for Table のセキュリティ用語集
デプロイ ガイドのシーケンスのダイアグラム。概要、概念、準備、ロールベースのアクセス制御、リファレンスの順になっています。 現在は "概念" の場所が強調表示されています。
この記事には、この Azure Cosmos DB for Table セキュリティ ガイドで使用されている一般的な用語の用語集が含まれています。
ロールベースのアクセス制御
ロールベースのアクセス制御 (RBAC) とは、Azure でリソースへのアクセスを管理するための方法を表します。 この方法は、1 つ以上のリソースに対して保有しているアクセス レベルを管理するロールに割り当てられている特定の ID に基づいたものです。 ロールベースのアクセス制御によって、きめ細かいアクセス管理をするための柔軟なシステムが実現されており、ID には担当するタスクを実行するために必要な最小限の特権レベルのアクセス権のみを持たせるようにすることができます。
詳細については、「ロールベースのアクセス制御の概要」を参照してください。
ID/プリンシパル
ID は、システムに対して何らかのレベルのアクセス権が必要なエンティティを表す Microsoft Entra 内のオブジェクトを指します。 Azure と Microsoft Entra のコンテキストでは、ID は次のいずれかの種類のエンティティを表します。
説明 | |
---|---|
ワークロード ID | ワークロード ID は、他のサービスまたはリソースにアクセスする必要があるソフトウェア ワークロードを表す |
人間の ID | 人間の ID は、テナントにネイティブなユーザーか、ゲストとして追加されたユーザーを表す |
マネージド ID | マネージド ID は、Azure サービスの ID を表す Azure 内の個別のリソース |
サービス プリンシパル | サービス プリンシパルは、任意の数の認証シナリオで使用できるサービス アカウント |
デバイス ID | デバイス ID は、デバイスにマッピングされている Microsoft Entra のオブジェクト |
グループ | グループは、1 つの操作として 1 つ以上の ID へのアクセスを管理するために使用されるオブジェクト |
詳細については、「ID の基礎」を参照してください。
ロール
ロールは、アクセスとアクセス許可を適用する主な単位です。 ID にロールを割り当てます。ロールの定義によって、その ID が持つアクセス レベルが決まります。 割り当てのスコープによって、ID がアクセスできる正確な対象が決まります。
Azure には、さまざまなリソースへのアクセスを許可するために使用できる多数の組み込みロールがあります。 以下に例を示します。
Value | |
---|---|
Role | CosmosBackupOperator |
定義 | Microsoft.DocumentDB/databaseAccounts/backup/action と Microsoft.DocumentDB/databaseAccounts/restore/action |
スコープ | リソース グループ |
この例では、ユーザーには特定のリソース グループに対する CosmosBackupOperator
ロールが割り当てられています。 この割り当てにより、ユーザーはそのリソース グループ内の任意の Azure Cosmos DB アカウントに対して backup
または restore
アクションを実行できます。
重要
Azure Cosmos DB などの一部の Azure サービスには独自のネイティブのロールベースのアクセス制御が導入されており、そこではさまざまな Azure Resource Manager プロパティ、Azure CLI コマンド、Azure PowerShell コマンドレットが使用されます。 ロールベースのアクセス制御の管理に通常使用するコマンドは、Azure Cosmos DB データ プレーン アクセスでは機能しません。 Azure のロールベースのアクセス制御に使用する一部のコマンドは、Azure Cosmos DB コントロール プレーン アクセスで動作する場合があります。
詳細については、「組み込みの Azure ロール」を参照してください。
ロール定義
ロールの定義は、コントロール プレーンとデータ プレーンでの許可されるアクションと許可されていないアクションの一覧を含む JSON オブジェクトです。 CosmosRestoreOperator
組み込みロールにおける、一部を省略した次の例を考えてみましょう。
{
"roleName": "CosmosRestoreOperator",
"type": "Microsoft.Authorization/roleDefinitions",
...
"permissions": [
{
"actions": [
"Microsoft.DocumentDB/locations/restorableDatabaseAccounts/restore/action",
"Microsoft.DocumentDB/locations/restorableDatabaseAccounts/*/read",
"Microsoft.DocumentDB/locations/restorableDatabaseAccounts/read"
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
],
...
}
この定義では、このロールが割り当てられた ID は restore
アクションを実行できます。 復元操作が完了すると、ID はさまざまなリソースを読み取り、復元が成功したことを確認できます。 read
に対して *
(ワイルドカード) 演算子があるため、これらのリソースを読み取ることが可能だと判断できます。
詳細については、「ロールの定義の概念」を参照してください。
ロール割り当て
ロールの割り当てによって、ID に特定の Azure リソースへのアクセスが許可されます。 ロールの割り当ては、次の要素で構成されます。
説明 | |
---|---|
プリンシパル | このロールに割り当てられている ID |
Role | ID に割り当てられているロール |
スコープ | 割り当てのターゲットとなる Azure リソースまたはグループ |
名前/説明 | 大規模な割り当ての管理が簡単になるメタデータ |
ヒント
ロールベースのアクセス制御では、ID とプリンシパルという用語が同じ意味で使用されていることがあります。
詳細については、「ロールの割り当ての概念」を参照してください。
アクション
アクションは、ロールがターゲット リソースに対して持つ特定のアクセス許可を定義します。 アクションは、通常、リソースの種類と、そのアクションによって付与されるアクセス許可の詳細を説明する名前を含む文字列です。 次にいくつかの一般的な例を挙げます。
説明 | プレーン | |
---|---|---|
Microsoft.DocumentDB/databaseAccounts/listKeys/action |
アカウント キーのみを読み取る | コントロール プレーン |
Microsoft.DocumentDB/databaseAccounts/backup/action |
バックアップの実行 | コントロール プレーン |
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/replace |
既存の項目を完全に置き換える | データ プレーン |
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery |
NoSQL クエリを実行する | データ プレーン |
アクションには *
(ワイルドカード) 文字を含めることもできます。そのため、特定のサブアクセス許可ごとに手動で詳細を指定する必要はありません。 ワイルドカードを使用したアクションの例をいくつか次に示します。
説明 | |
---|---|
Microsoft.DocumentDb/databaseAccounts/* |
Azure Cosmos DB アカウントの作成と管理 |
Microsoft.DocumentDB/*/read |
任意のコンテナーまたはデータベースを読み取る |
アクションは、コントロール プレーンとデータ プレーンに分かれています。 コントロール プレーン リソースに対するアクションと、データに影響を与える可能性のあるアクションを個別に定義する必要があります。 ロールの定義では、コントロール プレーン アクションは actions
プロパティを使用し、データ プレーン アクションは dataActions
プロパティ内にあります。 また、それぞれの notActions
プロパティと notDataActions
プロパティを使用して、ID が実行できないアクションを定義することもできます。
Note
アクションがコントロール プレーンとデータ プレーンに分かれているのは、レガシ ロールの定義からのワイルドカード アクションがデータに対して意図しないアクセス権を無制限に持つことを防ぐためのセキュリティ対策です。
詳細については、「コントロールおよびデータ アクション」を参照してください。
最小特権
「最小限の特権」の概念とは、すべてのユーザーが各自の担当するタスクまたはジョブの実行に必要な最小限のレベルのアクセス権のみを持つようにするための運用上のベスト プラクティスを指します。 たとえば、データベースからデータを読み取るアプリケーションでは、データ ストアへの読み取りアクセス権限のみが必要です。 そのアプリケーションがデータ ストアへの読み取りと書き込みのアクセス権限を持っていた場合、次のようなこと (ただし、これらに限定されません) が発生する可能性があります。
- アプリケーションが誤ってデータを破棄する可能性がある
- 承認されていないユーザーがアプリケーションの認証情報にアクセスして、データを変更する可能性がある
最小限の特権のプラクティスに従うことで、データ侵害が発生する可能性があってもスコープ内で確実に制限されます。 このプラクティスにより、運用上のセキュリティが最大限に強化され、ユーザーは必要な操作を引き続き行うことができます。
詳細については、「タスク別の推奨される最小特権ロール」を参照してください。
コントロール プレーン
コントロール プレーン アクセスとは、データを管理せずに Azure サービスのリソースを管理する機能を指します。 たとえば、Azure Cosmos DB コントロール プレーン アクセスには、次の機能が含まれる場合があります。
- すべてのアカウントとリソースのメタデータを読み取る
- アカウント キーと接続文字列を読み取る、再生成する
- アカウントのバックアップと復元を実行する
- データ転送ジョブを開始する、追跡する
- データベースとコンテナーを管理する
- アカウントのプロパティを変更する
重要
Azure Cosmos DB では、ネイティブ データ プレーンのロールベースのアクセス制御の定義と割り当てを管理するためにコントロール プレーン アクセスが必要です。 Azure Cosmos DB のデータ プレーンのロールベースのアクセス制御メカニズムはネイティブであるため、定義と割り当てを作成してそれらを Azure Cosmos DB アカウント内のリソースとして格納するには、コントロール プレーン アクセスが必要になります。
データ プレーン
データ プレーン アクセスとは、アカウント内のリソースを管理することなく、Azure サービス内でデータの読み取りと書き込みを行う機能を指します。 たとえば、Azure Cosmos DB データ プレーン アクセスには、次の機能が含まれる場合があります。
- アカウントとリソースのメタデータを読み取る
- アイテムを作成する、読み取る、更新する、パッチを適用する、削除する
- NoSQL クエリを実行する
- コンテナーの変更フィードから読み取る
- ストアド プロシージャを実行する
- 競合フィードで競合に対処する
移植可能な認証
開発では、ローカルの開発インスタンスと実稼働インスタンスに対して 2 組の個別の認証ロジックを記述するのが一般的です。 Azure SDK を使用すると、1 つの手法を使用してロジックを記述し、その認証コードを開発環境と実稼働環境でシームレスに動作させることができます。
Azure Identity クライアント ライブラリは、Azure SDK の一部として複数のプログラミング言語で使用できます。 このライブラリを使用すると、環境に応じて適切な認証情報を見つけるために、複数のオプションを順番にインテリジェントに検索する DefaultAzureCredential
オブジェクトを作成できます。 これらの認証オプションには、次のものが (順番に) 含まれます。
- 環境変数として格納されているクライアント シークレットまたは証明書
- Microsoft Entra ワークロード ID
- ユーザー割り当てマネージド ID またはシステム割り当てマネージド ID
- Visual Studio の設定から派生した Azure 認証情報
- Visual Studio Code の Azure Account 拡張機能で使用されている認証情報
- Azure CLI からの現在の認証情報
- Azure PowerShell からの現在の認証情報
- Azure Developer CLI からの現在の認証情報
- サインインのためにシステムのブラウザーを起動する対話型セッション
最新の各 Azure SDK ライブラリは、DefaultAzureCredential
インスタンスまたはその基本型を受け入れる、それぞれのクライアント オブジェクトまたはクラスのコンストラクターをサポートします。
ヒント
運用コードのデバッグを容易にし、予測しやすくするために、開発中に DefaultAzureCredential
を使用し、アプリケーションのデプロイ後に WorkloadIdentityCredential
や ManagedIdentityCredential
などのより具体的な認証情報に入れ替えることを選択できます。 これらのクラスはすべて、多くの Azure SDK でクライアント初期化ロジックの一部に含まれると想定されている TokenCredential
クラスに基づいているため、簡単にやり取りできます。
一意識別子
Microsoft Entra の各 ID には一意識別子があります。 この一意識別子は、id
、objectId
、または principalId
と呼ばれることもあります。 ロールの割り当てを作成するときに、割り当てで使用する ID の一意識別子が必要です。
範囲
ロールを割り当てるときは、アクセス権を付与する Azure リソースまたはグループを決定する必要があります。 ロールの割り当てのスコープによって、割り当てが行われるレベルが定義されます。
次に例を示します。
- 1 つのリソース スコープでは、その単一のリソースのみへのアクセス許可が適用されます
- リソース グループ レベルで設定されたスコープでは、そのグループ内のすべての関連リソースへのアクセス許可が適用されます
- 管理グループ レベルまたはサブスクリプション レベルのスコープは、すべての子グループとリソースに適用されます
Azure ロールベースのアクセス制御でロールを割り当てるときは、ワークロードに必要な最小限のリソースが含まれるようにその割り当てのスコープを設定することをお勧めします。 たとえば、割り当てのスコープをリソース グループに設定できます。 このリソース グループ スコープには、リソース グループ内のすべての Azure Cosmos DB リソースが含まれます。
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>
また、スコープを 1 つの Azure リソースに設定し、アクセス許可の割り当てをより細かく、狭くすることもできます。 この例では、Azure Cosmos DB リソースのプロバイダーと名前を使用してスコープを絞り込んでいます。
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>
詳細については、Azure のロールベースのアクセス制御のスコープに関する記事を参照してください。
スコープ (Azure Cosmos DB ネイティブ)
Azure Cosmos DB のロールベースのアクセス制御のネイティブ実装では、スコープとは、アクセス許可を適用するアカウント内のリソースの細分性を指します。
最上位レベルでは、最大のスコープを使用して、データ プレーンのロールベースのアクセス制御割り当てのスコープをアカウント全体に設定できます。 このスコープには、アカウント内のすべてのデータベースとコンテナーが含まれます。
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/
または、データ プレーンのロールの割り当てのスコープを、既定のデータベースに限定することもできます。
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/TablesDB
重要
既定のデータベース TablesDB
では、大文字と小文字が区別されます。 スコープで大文字と小文字を誤って使用すると、そのスコープは、許可される最大スコープ (アカウント レベル) に切り捨てられます。
最後に、割り当てのスコープを 1 つのコンテナー (テーブル)、つまり最も詳細なスコープに設定できます。
/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.DocumentDB/databaseAccounts/<account-name>/dbs/TablesDB/colls/<container-name>