Azure Cosmos DB での Azure ロールベースのアクセス制御
適用対象: NoSQL MongoDB Cassandra Gremlin Table
Note
この記事では、Azure Cosmos DB での管理プレーン操作に対するロールベースのアクセス制御について説明します。 データ プレーン操作を使用している場合、データは主キー、リソース トークン、Azure Cosmos DB RBAC のいずれかを使って保護されます。
NoSQL 用 API のデータ プレーン操作に適用されるロールベースのアクセス制御について詳しくは、データ アクセスのセキュリティ保護および Azure Cosmos DB RBAC に関する記事をご覧ください。 Azure Cosmos DB MongoDB 用 API については、MongoDB 用 API でのデータ プレーン RBAC に関する記事をご覧ください。
Azure Cosmos DB には、Azure Cosmos DB の一般的な管理シナリオに対応する Azure ロールベースのアクセス制御 (Azure RBAC) が組み込まれています。 Microsoft Entra ID 内にプロファイルがある個人は、これらの Azure ロールをユーザー、グループ、サービス プリンシパル、またはマネージド ID に割り当てて、Azure Cosmos DB 上のリソースへのアクセスとリソースの操作を許可または拒否できます。 ロールの割り当ては、Azure Cosmos DB アカウント、データベース、コンテナー、およびオファー (スループット) へのアクセスを含む、コントロールプレーン アクセスのみに限定されています。
組み込みのロール
Azure Cosmos DB でサポートされている組み込みのロールは次のとおりです。
組み込みのロール | 説明 |
---|---|
DocumentDB Account Contributor | Azure Cosmos DB アカウントを管理できます。 |
Cosmos DB アカウントの閲覧者ロール | Cosmos DB アカウントのデータを読み取ることができます。 |
CosmosBackupOperator | 定期的バックアップ対応データベースまたはコンテナーについての復元要求を Azure portal で送信できます。 Azure portal でバックアップ間隔と保有期間を変更できます。 データにアクセスしたり、Data Explorer を使用したりすることはできません。 |
CosmosRestoreOperator | 継続的バックアップモードで Azure Cosmos DB アカウントの復元操作を実行できます。 |
Cosmos DB オペレーター | Azure Cosmos DB のアカウント、データベース、コンテナーをプロビジョニングできます。 データにアクセスしたり、Data Explorer を使用したりすることはできません。 |
ID およびアクセス管理 (IAM)
Azure Cosmos DB リソースに対して Azure ロールベースのアクセス制御を構成するには、Azure portal の [アクセス制御 (IAM)] ペインを使います。 ロールは、Active Directory 内のユーザー、グループ、サービス プリンシパル、およびマネージド ID に適用されます。 組み込みのロールまたはカスタム ロールは、個人とグループに使用できます。 次のスクリーンショットは、Azure portal のアクセス制御 (IAM) を使用した Active Directory 統合 (Azure RBAC) を示しています。
カスタム ロール
組み込みのロールに加えて、ユーザーは Azure でカスタム ロールを作成し、それらのロールを Active Directory テナント内のすべてのサブスクリプションにわたるサービス プリンシパルに適用することもできます。 カスタム ロールによって、ユーザーは、カスタムのリソース プロバイダー操作セットを使用して Azure ロール定義を作成できるようになります。 Azure Cosmos DB のカスタム ロールを構築するために使用できる操作の詳細については、「Azure Cosmos DB のリソース プロバイダー操作」を参照してください。
ヒント
Azure Cosmos DB に格納されているデータにアクセスしたり、Azure portal でデータ エクスプローラーを使用したりする必要があるカスタム ロールには、Microsoft.DocumentDB/databaseAccounts/listKeys/*
アクションが必要です。
Note
カスタム ロールの割り当ては、常に Azure portal に表示されるとは限りません。
警告
管理 RBAC の変更後、アカウント キーが自動的にローテーションまたは取り消されることはありません。 これらのキーを使用してデータ プレーン操作にアクセスできます。 ユーザーからキーへのアクセスを削除する場合は、キーのローテーションも行うことをお勧めします。 RBAC データ プレーンの場合、ロールまたは要求が一致しなくなると、要求は Cosmos DB バックエンドで拒否されます。 ユーザーがデータ プレーン操作に一時的にアクセスする必要がある場合は、Azure Cosmos DB RBAC データ プレーンを使用することをお勧めします。
Azure Cosmos DB SDK からの変更の防止
アカウント キーを使って接続しているクライアント (つまり Azure Cosmos DB SDK 経由で接続しているアプリケーション) がリソースを変更しないように、Azure Cosmos DB リソース プロバイダーをロックできます。 この機能は、運用環境における制御とガバナンスの強化を必要とするユーザーに適している可能性があります。 SDK からの変更を防止すると、コントロール プレーン操作に対するリソース ロックや診断ログなどの機能も有効になります。 Azure Cosmos DB SDK から接続しているクライアントは、Azure Cosmos DB アカウント、データベース、コンテナー、スループットのプロパティを変更できません。 Azure Cosmos DB コンテナー自体に対するデータの読み取りと書き込みに関連する操作は影響を受けません。
この機能を有効にした場合、リソースへの変更を行うことができるのは、適切な Azure ロールと、管理サービス ID を含む Microsoft Entra 資格情報を持つユーザーだけです。
警告
この機能を有効にすると、アプリケーションに影響を与える可能性があります。 有効にする前に、その影響について理解しておいてください。
有効にする前のチェック リスト
この設定により、アカウント キーを使って接続するすべてのクライアント (すべての Azure Cosmos DB SDK を含む) や、アカウント キーを介して接続するすべてのツールから、Azure Cosmos DB リソースを変更できなくなります。 この機能を有効にした後にアプリケーションからの問題またはエラーを回避するには、この機能を有効にする前に、アプリケーションが次の操作を実行するかどうかを確認します。
データベースやコンテナーなどの子リソースの作成、削除。 これには、Cassandra、MongoDB、Gremlin、テーブル リソースなど、他の API のリソースが含まれます。
データベースまたはコンテナー レベルのリソースでのスループットの読み取りまたは更新。
コンテナー プロパティ (インデックス ポリシー、TTL、一意キーなど) の変更。
ストアド プロシージャ、トリガー、またはユーザー定義関数の変更。
このような操作がアプリケーションにより (または Azure portal 経由でユーザーにより) 実行される場合は、ARM テンプレート、PowerShell、Azure CLI、REST または Azure 管理ライブラリ経由で実行されるように移行する必要があります。 Azure の管理は、複数の言語で使用できることに留意してください。
ARM テンプレートを使用して設定する
ARM テンプレートを使用してこのプロパティを設定するには、既存のテンプレートを更新するか、現在のデプロイ用の新しいテンプレートをエクスポートしてから、databaseAccounts
リソースのプロパティに "disableKeyBasedMetadataWriteAccess": true
を含めます。 次に、このプロパティ設定を含む Azure Resource Manager テンプレートの基本的な例を示します。
{
{
"type": "Microsoft.DocumentDB/databaseAccounts",
"name": "[variables('accountName')]",
"apiVersion": "2020-04-01",
"location": "[parameters('location')]",
"kind": "GlobalDocumentDB",
"properties": {
"consistencyPolicy": "[variables('consistencyPolicy')[parameters('defaultConsistencyLevel')]]",
"locations": "[variables('locations')]",
"databaseAccountOfferType": "Standard",
"disableKeyBasedMetadataWriteAccess": true
}
}
}
重要
このプロパティを使用して再デプロイする場合は、アカウントと子リソースの他のプロパティを必ず含めてください。 このテンプレートをそのままデプロイしないでください。すべてのアカウント プロパティがリセットされます。
Azure CLI を使用して設定する
Azure CLI を使用して有効にするには、次のコマンドを使用します。
az cosmosdb update --name [CosmosDBAccountName] --resource-group [ResourceGroupName] --disable-key-based-metadata-write-access true
PowerShell を使用して設定する
Azure PowerShell を使用して有効にするには、次のコマンドを使用します。
Update-AzCosmosDBAccount -ResourceGroupName [ResourceGroupName] -Name [CosmosDBAccountName] -DisableKeyBasedMetadataWriteAccess true